找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 92612|回复: 21

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

[复制链接]
发表于 2014-7-10 23:40:00 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2014-7-11 00:09:23 | 显示全部楼层
  1. @echo off
  2. (for /f "tokens=1,2 delims==" %%a in (a.txt) do (
  3.     set /a "1/(%%a-(%%b))" || echo,%%a=%%b
  4. ))>b.txt 2>nul
  5. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
nono84223860 + 1 神速。这么难的用这么快速就搞好了 非常感 ...

查看全部评分

 楼主| 发表于 2014-7-11 00:13:02 | 显示全部楼层
回复 2# apang


    大神厉害,这么么快解决我的问题,以为很难
发表于 2014-7-11 00:16:14 | 显示全部楼层
本帖最后由 terse 于 2014-7-11 00:17 编辑

发出来 已经有了 算了
 楼主| 发表于 2014-7-11 00:28:25 | 显示全部楼层
回复 4# terse


还有个 比如 1+1+1+1=
BAT处理后悔填上结果的,这个难吗?

处理前:
1+1+1+1=
处理后
1+1+1+1=4

也是有加减乘除的。如果是除法,小数点保留到后3位就可以了
 楼主| 发表于 2014-7-11 00:31:21 | 显示全部楼层
回复 2# apang

不过我刚刚处理了一个3G的TXT,秒退。。。。
 楼主| 发表于 2014-7-11 00:35:31 | 显示全部楼层
回复 4# terse

上面大神的,处理大文件会秒退,然后生成了一个0字节的 b.txt 处理的是3g大的txt
发表于 2014-7-11 02:02:47 | 显示全部楼层
回复 7# nono84223860
试试这个呢?
  1. @if(0)==(0) echo off
  2. cscript //nologo //e:javascript "%~0"<a.txt >结果.txt
  3. pause&goto :eof
  4. @end
  5. while (!WScript.StdIn.AtEndOfStream){
  6.   var s = WScript.StdIn.ReadLine();
  7.   var a = s.replace(/(.+)=.+/,'$1');
  8.   var b = s.replace(/.+=(.+)/,'$1');
  9.   var c = eval(a)-eval(b);
  10.   if (c === 0) {WScript.Echo(s)}
  11. }
复制代码
发表于 2014-7-11 04:41:39 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
nono84223860 + 1 这位老师每次我有问题都帮我解决,还没测试

查看全部评分

发表于 2014-7-11 05:16:09 | 显示全部楼层
本帖最后由 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. }
复制代码
发表于 2014-7-11 06:01:04 | 显示全部楼层
回复 10# CrLf
js eval的效率 确实提不上
 楼主| 发表于 2014-7-11 09:53:39 | 显示全部楼层
,,,我复制去BAT,都无法使用。。。。
什么原因
发表于 2014-7-11 10:16:52 | 显示全部楼层
回复 12# nono84223860


    你复制的几楼的代码?
 楼主| 发表于 2014-7-11 10:22:18 | 显示全部楼层
回复 13# Batcher

回复 13# Batcher

8 9 10楼都试过,秒退的。
是不是少了什么插件,还是操作有误
楼顶的是3G压缩包,
我想处理这个文件
发表于 2014-7-11 11:20:25 | 显示全部楼层
回复 14# nono84223860


    把9楼第一段代码保存成 test.vbs 试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 07:51 , Processed in 0.043162 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表