[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 能做一个去掉不成立的等式的BAT吗,有加减乘除的

本帖最后由 nono84223860 于 2014-7-11 13:57 编辑

有大神能做一个这样的BAT吗

http://pan.baidu.com/s/1ntv7o97 3G大小的txt 压缩后只有4MB

我需要处理这个txt 由于过大2楼代码好像无法使用

用了9楼的方案后

出现了不成立的式子

5/0/5=5-8-4
5/0/5=5-8-5
5/0/5=5-8-6
5/0/5=5-8-7
5/0/5=5-8-8
5/0/5=5-8-9
5/0/5=5-9-0
5/0/5=5-9-1
5/0/5=5-9-2
5/0/5=5-9-3
5/0/5=5-9-4
5/0/5=5-9-5
5/0/5=5-9-6

回复 21# nono84223860


    亲,那是 perl 代码
    两个小时啊,用 10 楼代码应该至少减半吧

TOP

本帖最后由 nono84223860 于 2014-7-11 17:46 编辑

回复 20# CrLf

10楼的不会用。。。。。

9楼的代码我处理了好像是2个小时左右吧

TOP

回复 18# nono84223860


    已修改。
    不过还是建议用 10 楼的 perl,3G 的文件呢,可不是开玩笑...

TOP

回复 17# Batcher


http://www.bathome.net/thread-30937-1-1.html

这位大神您能够帮我看一下这个吗

TOP

回复 9# CrLf


大神,出现了不成立的式子。。怎么解决 楼上有写

TOP

回复 16# nono84223860


    这个你应该找9楼那个家伙帮你解决
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 15# Batcher

可以了

不过出现了这个问题。。。

5/0/5=5-8-4
5/0/5=5-8-5
5/0/5=5-8-6
5/0/5=5-8-7
5/0/5=5-8-8
5/0/5=5-8-9
5/0/5=5-9-0
5/0/5=5-9-1
5/0/5=5-9-2
5/0/5=5-9-3
5/0/5=5-9-4
5/0/5=5-9-5
5/0/5=5-9-6

有这样的不成立的数字

TOP

回复 14# nono84223860


    把9楼第一段代码保存成 test.vbs 试试
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13# Batcher

回复 13# Batcher

8 9 10楼都试过,秒退的。
是不是少了什么插件,还是操作有误
楼顶的是3G压缩包,
我想处理这个文件

TOP

回复 12# nono84223860


    你复制的几楼的代码?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

,,,我复制去BAT,都无法使用。。。。
什么原因

TOP

回复 10# CrLf
js eval的效率 确实提不上

TOP

本帖最后由 CrLf 于 2014-7-11 15:46 编辑

eval 的效率提不上去,换了一种实现,快多了,为了效率,函数也不用了...
  1. open(IN,"dd.txt");
  2. open(OUT,">dd_out2.txt");
  3. while ($str=<IN>){
  4. next if $str =~ /\/0/;
  5. @ar=split(//,$str);
  6. $a=$b=0;
  7. for($i=1;$i<4;$i+=2){
  8. if(@ar[$i]=='+'){$a+=@ar[$i+1];next;}
  9. if(@ar[$i]=='-'){$a-=@ar[$i+1];next;}
  10. if(@ar[$i]=='*'){$a*=@ar[$i+1];next;}
  11. if(@ar[$i]=='/'){$a/=@ar[$i+1];next;}
  12. }
  13. for($i=7;$i<10;$i+=2){
  14. if(@ar[$i]=='+'){$b+=@ar[$i+1];next;}
  15. if(@ar[$i]=='-'){$b-=@ar[$i+1];next;}
  16. if(@ar[$i]=='*'){$b*=@ar[$i+1];next;}
  17. if(@ar[$i]=='/'){$b/=@ar[$i+1];next;}
  18. }
  19. if($a==$b){print OUT ($str);}
  20. }
复制代码

TOP

本帖最后由 CrLf 于 2014-7-11 15:41 编辑

js 的 eval 有点危险吧

第一感觉是用 vbs,先来个 vbs 版的:
  1. On Error Resume Next
  2. Dim fso,str,i,ar(65536)
  3. i=0
  4. Set fso = WScript.CreateObject("Scripting.Filesystemobject")
  5. Set ts = fso.OpenTextFile("dd.txt")
  6. Set ts2 = fso.CreateTextFile("dd_output.txt",true)
  7. Do Until ts.AtEndOfStream
  8. str = ts.ReadLine
  9.         If InStr("12","/0")=0 Then
  10.         If Eval(str) Then
  11.          ar(i)=str
  12.          i = i + 1
  13.          If i=65536 Then
  14.          ts2.WriteLine Join(ar,vbCrLf)
  15.          i = 0
  16.          End If
  17.                 End If
  18. End If
  19. Loop
  20. If i>0 Then
  21. For j=0 To i
  22. ts2.WriteLine ar(j)
  23. Next
  24. End If
复制代码
虽然有为速度稍作优化,但速度还是慢得不可忍受...

再来个 perl 版的,快多了:
  1. open(IN,"dd.txt");
  2. open(OUT,">dd_output.txt");
  3. while ($str=<IN>){
  4.     next if $str =~ /\/0/;
  5.    $str=~ s/=/==/;
  6.    if(eval($str)){print OUT ($str);}
  7. }
复制代码
1

评分人数

    • nono84223860: 这位老师每次我有问题都帮我解决,还没测试技术 + 1

TOP

返回列表