标题: [文本处理] 多个标志行多次重复, 知道目标行与标志行的相对位置 希望得到目标行 [打印本页]
作者: lqxcsj 时间: 2011-11-28 12:04 标题: 多个标志行多次重复, 知道目标行与标志行的相对位置 希望得到目标行
原始文件为a.txt
标志行为b.txt
需要的结果为c.txt
现在只知道目标行与标志行(匹配行)的相对位置关系。
1、多个标志行多次重复
2、需要第一标志行的本身与其后的第二行
3、需要第二标志行的本身与其后的第二行、第三行
4、需要第三标志行的本身与其后的第三行、其后的第七行、其前的五行到二十行
更改为 4、需要第三标志行的本身、与其后的第二行、与其后的第三行、与其后的第六行
5、有空行,有带空格的空行
6、目标行都是变量,没有标志字符
作者: powerbat 时间: 2011-11-28 20:39
>>需要第三标志行的本身与其后的第三行、其后的第七行、其前的五行到二十行
你的结果c.txt与你的要求完全不符!
另外你说的“第二行”、“第三行”什么的有点不明确,不符合一般的人习惯。
作者: lqxcsj 时间: 2011-11-29 18:12
本帖最后由 lqxcsj 于 2011-11-29 18:14 编辑
回复 2# powerbat
1楼中的 4、需要第三标志行的本身与其后的第三行、其后的第七行、其前的五行到二十行
应更改为 4、需要第三标志行的本身、与其后的第二行、与其后的第三行、与其后的第六行
作者: powerbat 时间: 2011-11-29 21:46
- @set @n=0//&cscript.exe -e:jscript "%~f0"&pause&exit/b
-
- src = "a.txt";
- flg = "b.txt";
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- s = fso.OpenTextFile(src).ReadAll();
- flags = fso.OpenTextFile(flg).ReadAll();
- flags = flags.replace(/\\|\/|\||\(|\)|\[|\]|\{|\}|\^|\$|\.|\?|\*|\+/g, '\\$&');
- flags = flags.split('\r\n');
- c1 = flags[0]+'\r\n[^\r\n]*\r\n';
- c2 = flags[1]+'\r\n(?:[^\r\n]*\r\n){2}';
- c3 = flags[2]+'\r\n(?:[^\r\n]*\r\n){6}';
- result = '';
- re = new RegExp('^(?:'+c1+'|'+c2+'|'+c3+')', 'gm');
- s.replace(re, function(s){
- var a = s.split('\r\n');
- var len = a.length;
- if (3==len || 4==len) result += a.join('\r\n');
- else result += [a[0],a[1],a[2],a[6],''].join('\r\n');
- });
- fso.OpenTextFile('result.txt', 2, true).write(result);
复制代码
作者: lqxcsj 时间: 2011-11-30 09:38
回复 4# powerbat
A、代码运行完全正确,十分感谢。
B、如果现在的条件改为以下内容,代码应当怎么修改?
1、多个标志行多次重复,且多个标志行的顺序关系并不规律。
2、需要第一标志行的本身与其后的第n行
3、需要第二标志行的本身与其后的第m行、第k行
4、需要第三标志行的本身、与其后的第h行、与其后的第g行、与其后的第f行
5、有空行,有带空格的空行
6、目标行都是变量,没有标志字符
作者: lqxcsj 时间: 2011-12-6 17:59
我改了一个代码,如下,可以实现5楼的功能,很满意。
不过就是效率太低了。
哪位大侠帮忙改进一下。
作者: lqxcsj 时间: 2011-12-14 14:38
哪位大侠帮忙改进一下。
作者: lqxcsj 时间: 2011-12-27 14:53
哪位大侠帮忙改进一下,谢谢了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |