Board logo

标题: [解决]40元求unicode文本提取 [打印本页]

作者: lxh623    时间: 2020-8-4 14:52     标题: [解决]40元求unicode文本提取

本帖最后由 lxh623 于 2020-8-4 17:59 编辑

文本a和tmp都是UTF-8编码。
文本a的格式是中文字符或者偏旁部首,用制表符分隔。每一行一个到四个。(考虑平时别的应用,加了一个。)
用文本a的每一行的几个元素,不考虑顺序,搜索文本tmp,如果都有,写入文本b(UTF-8)。写入格式是“\1\2\3\4\t+tmp那一行”。文本a的每一行搜索到没有为止。(一行可能有多个结果!!)
文本a可能有一万行,tmp可能有九万行。
谢谢!
作者: zaqmlp    时间: 2020-8-4 15:47

  1. <# :
  2. cls
  3. @echo off
  4. cd /d "%~dp0"
  5. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
  6. pause
  7. exit
  8. #>
  9. $path=$args[0].trimend('\');
  10. $file1=$path+'\a.txt';
  11. $file2=$path+'\tmp.txt';
  12. $file3=$path+'\b.txt';
  13. if(-not (test-path -liter $file1)){Write-host ('"'+$file1+'" not found');exit;};
  14. if(-not (test-path -liter $file2)){Write-host ('"'+$file2+'" not found');exit;};
  15. $arr=New-Object -TypeName System.Collections.ArrayList;
  16. $enc=$Utf8NoBom=New-Object System.Text.UTF8Encoding $False;
  17. $text1=[IO.File]::ReadAllLines($file1, $enc);
  18. for($i=0;$i -lt $text1.count;$i++){
  19.     $brr=$text1[$i] -split '[\t]+'
  20.     [void]$arr.add($brr);
  21. };
  22. $fs=New-Object System.IO.FileStream($file3, [System.IO.FileMode]::Create);
  23. $sw=New-Object System.IO.StreamWriter($fs, $enc);
  24. $text2=[IO.File]::ReadAllLines($file2, $enc);
  25. for($i=0;$i -lt $text2.count;$i++){
  26.     for($j=0;$j -lt $arr.count;$j++){
  27.         $n=0;
  28.         for($k=0;$k -lt $arr[$j].count;$k++){
  29.             if($text2[$i].contains($arr[$j][$k])){$n++};
  30.         };
  31.         if($n -eq $arr[$j].count){
  32.             $tmpline=($arr[$j] -join '\')+"`t"+$text2[$i];
  33.             $sw.WriteLine($tmpline);
  34.             $sw.Flush();
  35.             break;
  36.         };
  37.     };
  38. };
  39. $sw.Close();
  40. $fs.Close();
复制代码

作者: lxh623    时间: 2020-8-4 18:00

回复 2# zaqmlp
请查收!




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