Board logo

标题: [文本处理] 批处理如何删除指定文本中特定文字区域内的重复行(只保留一个),并替换特定行内容 [打印本页]

作者: 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的批处理里修改,甚至去重也是
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"1.txt"&pause&exit
  2. function uniq(str){
  3.     var t=str.split(/\r?\n/),a={},s='';
  4.     for(var i=0;i<t.length;i++){
  5.         var r=t[i].replace(/^\s*|\s*$/g,'');
  6.         if(r!='无'){if(!a[r]){s+=r+'\r\n';a[r]=1}}else s+=r+'\r\n';
  7.     }
  8.     return s.replace(/\s*$/,'');
  9. }
  10. var text = WSH.StdIn.ReadAll().replace(/ECHO 处于关闭状态。/g,'无')
  11.     .replace(/(^[\s\S]+?\*+规格\*+)([\s\S]+?)(\*+金额\*+[\s\S]+?$)/,
  12.         function(a,b,c,d){return uniq(b)+c+uniq(d);});
  13. 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://bbs.bathome.net/) Powered by Discuz! 7.2