Board logo

标题: [文本处理] 文本文档批处理替换 [打印本页]

作者: duancaile    时间: 2018-12-18 15:21     标题: 文本文档批处理替换

求一个批处理语句,没人会吗?网上的那些工具都没用。如图所示有一个文本2,里面有好多个AA,有一个文本1,里面有对应个数的数据,要求把文本2的AA用文本1的数据按顺讯替换了,换后如图3那样
作者: Batcher    时间: 2018-12-18 15:31

1.txt和2.txt打包压缩之后传上来,我试试。
作者: duancaile    时间: 2018-12-18 15:41

回复 2# Batcher

这个只是个例子,实际中有很多的数据
作者: duancaile    时间: 2018-12-18 15:45

回复 2# Batcher


文本2里的内容可以是随便的,主要是有,AA,这个字符,用文本1的数据按顺序替换,谢谢!
作者: flashercs    时间: 2018-12-18 16:03

本帖最后由 flashercs 于 2018-12-18 16:11 编辑

上传的乱码了;
如果文本1的行数比文本2中的AA数量少,怎么办?
作者: duancaile    时间: 2018-12-18 16:15

回复 5# flashercs

可能我们公司加密了,两个数量是相等的,要是不等就显示一个错误给我就好了,谢谢!!!!
作者: Batcher    时间: 2018-12-18 16:39

回复 6# duancaile


    两个文件的内容试试能直接发出来吗
作者: duancaile    时间: 2018-12-18 16:44

回复 7# Batcher

文本1内容
1,
2,
3,
4,
5,



文本2内容
47940409,AA,RHEIOFOKDSNFLK,49UI03OFLKFNKL,AA,FKLNBCVNKBNRTOTO,AA,9409UOIFJKLNOJOICVO,AA,FKNVLKNVPTQJOJRANFNL,AA,NFKJNKNVBNBVOREU39U30
作者: flashercs    时间: 2018-12-18 16:46

替换AA.js ,放到1.txt 2.txt同目录,生成结果3.txt
  1. var fso = WScript.CreateObject('Scripting.FileSystemObject');
  2. var file1 = '1.txt';
  3. var file2 = '2.txt';
  4. var file3 = '3.txt';
  5. var curDir = WScript.CreateObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  6. var ts1 = fso.OpenTextFile(file1, 1, false, -2);
  7. var ts2 = fso.OpenTextFile(file2, 1, false, -2);
  8. var ts3 = fso.OpenTextFile(file3, 2, true, -2);
  9. if (!ts2.AtEndOfStream) {
  10.   ts3.Write(ts2.ReadAll().replace(/AA/g, function ($0) {
  11.     return ts1.AtEndOfStream ? $0 : ts1.ReadLine();
  12.   }));
  13. }
  14. ts1.close();
  15. ts2.close();
  16. ts3.close();
复制代码

作者: duancaile    时间: 2018-12-18 16:46

回复 7# Batcher



1
2
3
4
5
文本1内容,就5个数字,不带符号
作者: yhcfsr    时间: 2018-12-18 17:35

本帖最后由 yhcfsr 于 2018-12-18 17:40 编辑

POWERSHELL,保存为ps1格式,与要处理文件放一起,右键执行
  1. $file1='1.txt';#替换数据文本
  2. $file2='2.txt';#需要被替换的源文件
  3. $key='AA';#需要被替换的关键字
  4. $ontent_file1=[io.file]::ReadAllLines($file1);#读文件
  5. $ontent_file2=[io.file]::ReadAllText($file2);#读文件
  6. $result='';$n=0;$lenKey=$key.Length;#变量初始化
  7. while(1)
  8. {
  9. $i=$ontent_file2.IndexOf($key);#查询关键字的首位置
  10. if(($i -ne -1) -and ($ontent_file1[$n])){
  11.     $result+=$ontent_file2.Substring(0,$i)+$ontent_file1[$n];#替换关键字
  12.     $ontent_file2=$ontent_file2.Substring($i+$lenKey);#截取文本
  13. } else {$result+=$ontent_file2;break;}#不含关键字或数据文本结束,则跳出循环
  14.    $n++;
  15. }
  16. $result>'结果.TXT'
复制代码

作者: xczxczxcz    时间: 2018-12-18 21:12

凑个热闹
  1. $Arr=gc 1.txt #1为纯数字文件;2为待替换文件,会读取整个文档内容。
  2. $Array=(((gc 2.txt) -join "`r`n").replace(',AA,',",AA,`t").split("`t"))
  3. (0..($Arr.count -1))|%{$Array[$_]=$Array[$_].Replace(',AA,',",$($Arr[$_]),")}
  4. $str=-join $Array
  5. $str|sc .\2.txt
复制代码

作者: 523066680    时间: 2018-12-18 21:25

本帖最后由 523066680 于 2018-12-19 08:05 编辑
  1. use File::Slurp;
  2. my @t1 = read_file("1.txt");
  3. my $t2 = read_file("2.txt");
  4. grep { chomp } @t1;
  5. $t2=~s/,AA,/",".(shift @t1).","/ge;
  6. print $t2;
复制代码

作者: tigerpower    时间: 2018-12-19 09:31

下载busybox
  1. busybox sh -c "sed -b 's/,AA,/,\n,/g' 2.txt|paste -d'\n' - 1.txt|tr -d '\n'"
复制代码

作者: 523066680    时间: 2018-12-19 11:05

回复 14# tigerpower


看到busybox就想起安卓busybox,现在手机安全加强了,解ROOT权限很繁琐(我用小米,刷了开发版系统)
后来发现有个叫 termux 的东西,不需要root,就可以安装/运行 clang nodejs python perl ,特别好用。
作者: WHY    时间: 2018-12-19 11:45

  1. PowerShell "$a=type 1.txt; [regex]::Replace((type 2.txt) -join \"`r`n\", 'AA', {$a[$global:n++]})"
复制代码





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