标题: [文本处理] 批处理如何删除指定文本中特定文字区域内的重复行(只保留一个),并替换特定行内容 [打印本页]
作者: xiaomu 时间: 2016-8-20 22:06 标题: 批处理如何删除指定文本中特定文字区域内的重复行(只保留一个),并替换特定行内容
本帖最后由 pcl_test 于 2016-8-21 10:15 编辑
批处理对指定文本文件去除重复的行,并删除“ECHO处理关闭状态”
1.bat 和1.txt处于同目录下。
1.txt文本示例:
***********订单编号***********
XSDD-20160726-0001
XSDD-20160726-0001
XSDD-20160726-0001
***********客户姓名***********
陈大人
陈大人
陈大人
*************地址*************
大星村
大星村
大星村
***********商品名称***********
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]
*************规格*************
32型号
32型号
ECHO 处于关闭状态。
*************型号*************
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
*************金额*************
300.0000
300.0000
300.0000
***********订单状态***********
红冲
红冲
红冲
要求:运行1.bat后
① 对1.txt中行内容为“ECHO处于关闭状态。”的该行内容替换为“无”
② 对从“订单编号”该行到“规格”该行,以及“金额”该行至文末,判断每行内容是否重复,对内容重复的行,清空内容并删除该行。(注:若重复内容为“无”,则不进行替换)
处理后的文本内容,覆盖写入1.txt即可
最终文本示例:
***********订单编号***********
XSDD-20160726-0001
***********客户姓名***********
陈大人
*************地址*************
大星村
***********商品名称***********
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]
*************规格*************
32型号
32型号
无
*************型号*************
无
无
无
*************金额*************
300.0000
***********订单状态***********
红冲
作者: pcl_test 时间: 2016-8-20 23:09
只想说对“ECHO处于关闭状态。”的处理可直接在生成txt的批处理里修改,甚至去重也是- //&cls&cscript -nologo -e:jscript "%~f0"<"1.txt"&pause&exit
- function uniq(str){
- var t=str.split(/\r?\n/),a={},s='';
- for(var i=0;i<t.length;i++){
- var r=t[i].replace(/^\s*|\s*$/g,'');
- if(r!='无'){if(!a[r]){s+=r+'\r\n';a[r]=1}}else s+=r+'\r\n';
- }
- return s.replace(/\s*$/,'');
- }
- var text = WSH.StdIn.ReadAll().replace(/ECHO 处于关闭状态。/g,'无')
- .replace(/(^[\s\S]+?\*+规格\*+)([\s\S]+?)(\*+金额\*+[\s\S]+?$)/,
- function(a,b,c,d){return uniq(b)+c+uniq(d);});
- WSH.echo(text);
复制代码
作者: xiaomu 时间: 2016-8-21 00:52
回复 2# pcl_test
谢谢版主大大的答复。
我是纯新手。有劳版主大大日后多多帮忙了。。。
再次感谢!
作者: xiaomu 时间: 2016-8-21 13:17
回复 2# pcl_test
版主大哥。能不能将最终的文本内容覆盖到1.txt
作者: GNU 时间: 2016-8-22 16:58
回复 4# xiaomu
把第一行改成这样试试:
//&cls&cscript -nologo -e:jscript "%~f0"<"1.txt">"2.txt"&pause&move /y "2.txt" "1.txt"&exit
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |