标题: [文本处理] 文本文档批处理替换 [打印本页]
作者: 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- var fso = WScript.CreateObject('Scripting.FileSystemObject');
- var file1 = '1.txt';
- var file2 = '2.txt';
- var file3 = '3.txt';
- var curDir = WScript.CreateObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
- var ts1 = fso.OpenTextFile(file1, 1, false, -2);
- var ts2 = fso.OpenTextFile(file2, 1, false, -2);
- var ts3 = fso.OpenTextFile(file3, 2, true, -2);
- if (!ts2.AtEndOfStream) {
- ts3.Write(ts2.ReadAll().replace(/AA/g, function ($0) {
- return ts1.AtEndOfStream ? $0 : ts1.ReadLine();
- }));
- }
- ts1.close();
- ts2.close();
- 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格式,与要处理文件放一起,右键执行- $file1='1.txt';#替换数据文本
- $file2='2.txt';#需要被替换的源文件
- $key='AA';#需要被替换的关键字
-
- $ontent_file1=[io.file]::ReadAllLines($file1);#读文件
- $ontent_file2=[io.file]::ReadAllText($file2);#读文件
-
- $result='';$n=0;$lenKey=$key.Length;#变量初始化
-
- while(1)
- {
- $i=$ontent_file2.IndexOf($key);#查询关键字的首位置
- if(($i -ne -1) -and ($ontent_file1[$n])){
- $result+=$ontent_file2.Substring(0,$i)+$ontent_file1[$n];#替换关键字
- $ontent_file2=$ontent_file2.Substring($i+$lenKey);#截取文本
- } else {$result+=$ontent_file2;break;}#不含关键字或数据文本结束,则跳出循环
- $n++;
- }
- $result>'结果.TXT'
复制代码
作者: xczxczxcz 时间: 2018-12-18 21:12
凑个热闹- $Arr=gc 1.txt #1为纯数字文件;2为待替换文件,会读取整个文档内容。
- $Array=(((gc 2.txt) -join "`r`n").replace(',AA,',",AA,`t").split("`t"))
- (0..($Arr.count -1))|%{$Array[$_]=$Array[$_].Replace(',AA,',",$($Arr[$_]),")}
- $str=-join $Array
- $str|sc .\2.txt
复制代码
作者: 523066680 时间: 2018-12-18 21:25
本帖最后由 523066680 于 2018-12-19 08:05 编辑
- use File::Slurp;
- my @t1 = read_file("1.txt");
- my $t2 = read_file("2.txt");
- grep { chomp } @t1;
- $t2=~s/,AA,/",".(shift @t1).","/ge;
- print $t2;
复制代码
作者: tigerpower 时间: 2018-12-19 09:31
下载busybox- 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
- 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 |