Board logo

标题: 【完结】20元求提取文本 [打印本页]

作者: lxh623    时间: 2019-4-8 10:42     标题: 【完结】20元求提取文本

本帖最后由 lxh623 于 2019-4-8 14:08 编辑

文本a有四十万行,有些行内有中文标点符号。
文本tmp有180万行,前面是中文,中间是制表符,后面是数字。
想用a的每一行去搜索tmp,精确匹配tmp制表符前面的部分,提取tmp那一行到文本b。

另外,能不能在a和tmp都是UTF-8编码的条件下运行批处理,因为ANSI码,有些字不对了。(这一条,尽量。)
谢谢!
作者: zaqmlp    时间: 2019-4-8 11:28

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. start mshta VBScript:Execute("msgbox(""%info%""):close")
  6. cd /d "%~dp0"
  7. set "文件1=a.txt"
  8. set "文件2=tmp.txt"
  9. set "文件3=b.txt"
  10. powershell ^
  11.     $t1=@(gc '%文件1%' -enc UTF8);^
  12.     $t2=@(gc '%文件2%' -enc UTF8);^
  13.     $dic=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  14.     [System.Collections.ArrayList]$arr=@();^
  15.     for($i=0;$i -lt $t1.length;$i++){^
  16.         if(-not $dic.ContainsKey($t1[$i].trimend())){$dic.Add($t1[$i].trimend(), '')};^
  17.     };^
  18.     for($i=0;$i -lt $t2.length;$i++){^
  19.         $line=$t2[$i] -split '\t';^
  20.         if($dic.ContainsKey($line[0])){[void]$arr.Add($t2[$i])};^
  21.     };^
  22.     out-file -file '%文件3%' -input ($arr -join \"`r`n\") -enc UTF8;
  23. pause
复制代码

作者: lxh623    时间: 2019-4-8 14:09

本帖最后由 lxh623 于 2019-4-8 14:12 编辑

突然有了自己的办法。emeditor里面排序,就可以,提取需要的行,或者删除一些行,得到符合要求的行。两步就一分为二。
excel里面删除相同项,是另外一个做法。
所以,我付了、结了,但是,没有尝试,因为批处理花时间得多。

还是谢谢!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2