[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 多个标志行多次重复, 知道目标行与标志行的相对位置 希望得到目标行

原始文件为a.txt
标志行为b.txt
需要的结果为c.txt


现在只知道目标行与标志行(匹配行)的相对位置关系。


1、多个标志行多次重复
2、需要第一标志行的本身与其后的第二行
3、需要第二标志行的本身与其后的第二行、第三行
4、需要第三标志行的本身与其后的第三行、其后的第七行、其前的五行到二十行
更改为 4、需要第三标志行的本身、与其后的第二行、与其后的第三行、与其后的第六行
5、有空行,有带空格的空行
6、目标行都是变量,没有标志字符

>>需要第三标志行的本身与其后的第三行、其后的第七行、其前的五行到二十行
你的结果c.txt与你的要求完全不符!
另外你说的“第二行”、“第三行”什么的有点不明确,不符合一般的人习惯。

TOP

本帖最后由 lqxcsj 于 2011-11-29 18:14 编辑

回复 2# powerbat


1楼中的    4、需要第三标志行的本身与其后的第三行、其后的第七行、其前的五行到二十行
应更改为 4、需要第三标志行的本身、与其后的第二行、与其后的第三行、与其后的第六行

TOP

  1. @set @n=0//&cscript.exe -e:jscript "%~f0"&pause&exit/b
  2. src = "a.txt";
  3. flg = "b.txt";
  4. fso = new ActiveXObject("Scripting.FileSystemObject");
  5. s = fso.OpenTextFile(src).ReadAll();
  6. flags = fso.OpenTextFile(flg).ReadAll();
  7. flags = flags.replace(/\\|\/|\||\(|\)|\[|\]|\{|\}|\^|\$|\.|\?|\*|\+/g, '\\$&');
  8. flags = flags.split('\r\n');
  9. c1 = flags[0]+'\r\n[^\r\n]*\r\n';
  10. c2 = flags[1]+'\r\n(?:[^\r\n]*\r\n){2}';
  11. c3 = flags[2]+'\r\n(?:[^\r\n]*\r\n){6}';
  12. result = '';
  13. re = new RegExp('^(?:'+c1+'|'+c2+'|'+c3+')', 'gm');
  14. s.replace(re, function(s){
  15.         var a = s.split('\r\n');
  16.         var len = a.length;
  17.         if (3==len || 4==len) result += a.join('\r\n');
  18.         else result += [a[0],a[1],a[2],a[6],''].join('\r\n');
  19.     });
  20. fso.OpenTextFile('result.txt', 2, true).write(result);
复制代码

TOP

回复 4# powerbat


A、代码运行完全正确,十分感谢。
   
B、如果现在的条件改为以下内容,代码应当怎么修改?

1、多个标志行多次重复,且多个标志行的顺序关系并不规律
2、需要第一标志行的本身与其后的第n行
3、需要第二标志行的本身与其后的第m行第k行
4、需要第三标志行的本身、与其后的第h行、与其后的第g行、与其后的第f行
5、有空行,有带空格的空行
6、目标行都是变量,没有标志字符

TOP

我改了一个代码,如下,可以实现5楼的功能,很满意。

不过就是效率太低了。

哪位大侠帮忙改进一下。

TOP

哪位大侠帮忙改进一下。

TOP

哪位大侠帮忙改进一下,谢谢了。

TOP

返回列表