标题: [解决]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
- <# :
- cls
- @echo off
- cd /d "%~dp0"
- powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
- pause
- exit
- #>
- $path=$args[0].trimend('\');
- $file1=$path+'\a.txt';
- $file2=$path+'\tmp.txt';
- $file3=$path+'\b.txt';
- if(-not (test-path -liter $file1)){Write-host ('"'+$file1+'" not found');exit;};
- if(-not (test-path -liter $file2)){Write-host ('"'+$file2+'" not found');exit;};
- $arr=New-Object -TypeName System.Collections.ArrayList;
- $enc=$Utf8NoBom=New-Object System.Text.UTF8Encoding $False;
- $text1=[IO.File]::ReadAllLines($file1, $enc);
- for($i=0;$i -lt $text1.count;$i++){
- $brr=$text1[$i] -split '[\t]+'
- [void]$arr.add($brr);
- };
- $fs=New-Object System.IO.FileStream($file3, [System.IO.FileMode]::Create);
- $sw=New-Object System.IO.StreamWriter($fs, $enc);
- $text2=[IO.File]::ReadAllLines($file2, $enc);
- for($i=0;$i -lt $text2.count;$i++){
- for($j=0;$j -lt $arr.count;$j++){
- $n=0;
- for($k=0;$k -lt $arr[$j].count;$k++){
- if($text2[$i].contains($arr[$j][$k])){$n++};
- };
- if($n -eq $arr[$j].count){
- $tmpline=($arr[$j] -join '\')+"`t"+$text2[$i];
- $sw.WriteLine($tmpline);
- $sw.Flush();
- break;
- };
- };
- };
- $sw.Close();
- $fs.Close();
复制代码
作者: lxh623 时间: 2020-8-4 18:00
回复 2# zaqmlp
请查收!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |