Board logo

标题: [文本处理] 【已解决】批处理怎样从txt文本或者htm文件里提取特定内容? [打印本页]

作者: tbjx138    时间: 2014-11-2 23:35     标题: 【已解决】批处理怎样从txt文本或者htm文件里提取特定内容?

例如: <div><a href="Detail.mvc?sys=dlib&amp;type=1&amp;restype=2&amp;cult=CN&amp;resid=m.20140704-ZLZX-889-0379&amp;page=1" onclick="WriteCenterLogs(*m.20140704-ZLZX-889-0379*,*社会风尚与道德领域突出问题专项治理研究:基于文化视角的透析*,*高褔进, 闫成*,*上海人民出版社*,*2014*,*APABI_XKFL$$063,其他学科;CYFL2011$$009006,政治军事|中国政治;XXKC$$005003,课外阅读|社会科学类;ZXKC$$006003,课外阅读|社会科学类*,*978-7-208-12002-0*);" target="_blank">1</a></div>

这个我网页保存htm里的一段代码。有n个这样的htm,每个htm里有n个这样的一段代码,我想把n个这样的htm里所有这样的代码,批量转换成一个txt文本或excle里。附图,是我想要的格式,请高手大侠帮忙!!做成批处理或者vba代码都可以的!!先谢谢各位了!!

这个图是一个htm里应该提取的的内容,每个htm里有10个!!!
作者: 522235677    时间: 2014-11-3 09:27

最好打包几个htm文件发上来
作者: tbjx138    时间: 2014-11-3 09:46

回复
好的,我发几个htm您试试!!谢谢!

2#
522235677
,还有些这样不同的格式的htm,
作者: tbjx138    时间: 2014-11-4 16:06

请大神们帮忙!!谢谢了!!
作者: terse    时间: 2014-11-4 22:53

本帖最后由 terse 于 2014-11-6 12:28 编辑

最后结果正确不
我这里测 是可行的 (XP 和 WIN7)
  1. @if(0)==(0) echo off
  2. for %%a in (*.htm) do CScript.exe //NoLogo //E:JScript "%~f0" "%%a">%%~na.txt
  3. pause & exit
  4. @end
  5. function WriteCenterLogs(a,b,c,d,e,f,g,h,i) {WScript.Echo(a + '\t' + b + '\t' + c + '\t' + d + '\t' + e+ '\t' + g)}
  6. function adoLoadText(filename, charset) {
  7.     var stream, text;
  8.     stream = new ActiveXObject("ADODB.Stream");
  9.     stream.type = 2;
  10.     stream.charset = charset;
  11.     stream.open();
  12.     stream.loadFromFile(filename);
  13.     text = stream.readText(-1);
  14.     stream.close();
  15.     return text;
  16. }
  17.     var file = WScript.Arguments.Item(0);
  18.     var next = adoLoadText(file ,'UTF-8');
  19.     var html = new ActiveXObject("htmlfile");
  20.     html.write(next);
  21.     var d = html.getElementsByTagName("dd");
  22.     var len = d.length;
  23.     for (var i = 0; i < len; i++) {
  24.        var s = d[i].getElementsByTagName("div");
  25.        s = s[0].getElementsByTagName('a')[0].onclick;
  26.        s();
  27.     }
复制代码
废了对象 还是直接正则获取 这样试下
发现正则有点问题
  1. @if(0)==(0) echo off
  2. dir /b *.htm | CScript.exe //NoLogo //E:JScript "%~f0"
  3. pause & exit
  4. @end
  5. function adoLoadText(filename, charset) {
  6.     var stream, text;
  7.     stream = new ActiveXObject("ADODB.Stream");
  8.     stream.type = 2;
  9.     stream.charset = charset;
  10.     stream.open();
  11.     stream.loadFromFile(filename);
  12.     text = stream.readText();
  13.     stream.close();
  14.     return text;
  15. }
  16. var fso = new ActiveXObject("Scripting.FileSystemObject");
  17. var re = new RegExp('<dd>[^(]+\\((.+)\\);\" target=','img')
  18. while (!WScript.StdIn.AtEndOfStream){
  19.     var file = WScript.StdIn.Readline();
  20.     var name = file.replace(/(.+?)(\.[^\.]*?)$/gi,'$1.txt');
  21.     var next = adoLoadText(file ,'UTF-8');
  22.     var arr = getarr(next);
  23.     fso.CreateTextFile(name, true).Write(arr.join('\r\n'))
  24. }
  25. function getarr(next) {
  26.     var f = next.match(re),arr = [];
  27.     if (f){
  28.       var len = f.length;
  29.       for (var i = 0; i < len; i++){
  30.         var str = f[i];
  31.         str = str.replace(re,'$1');
  32.         var tar = str.replace(/^'|'$/g,'').replace(/\t/g,' ').split(/','/);
  33.         tar.splice(5, 1)
  34.         arr[i] = tar.join('\t')
  35.       }
  36.       return arr;
  37.     }
  38. }
复制代码

作者: ads350668398    时间: 2014-11-5 06:11

回复 5# terse

代码 加个注释 新手好学习啊 晕
作者: tbjx138    时间: 2014-11-5 07:30

本帖最后由 tbjx138 于 2014-11-5 07:37 编辑

回复 5# terse

感谢您的回复,我用您给的代码测试了2个htm,提取的txt是0kb,没用任何信息?不知道原因在哪!是不是我用的不对呢,我是用您的代码做个bat,放到htm文件夹里操作的。您如果您能加个注释就好了!!
您用我发的附件里htm,测试一下,是不是也和我一样的情况。再次感谢您的帮忙!!

作者: terse    时间: 2014-11-6 02:08

回复 7# tbjx138
上面代码 试下
作者: tbjx138    时间: 2014-11-6 07:42

最后结果正确不
我这里测 是可行的 (XP 和 WIN7)废了对象 还是直接正则获取 这样试下
terse 发表于 2014-11-4 22:53

太感谢terse大神的帮忙了!!完美提取出来了,您的技术非常棒!!批处理真是很强大!!以后还要和大神多学习!!
作者: Batcher    时间: 2014-11-27 08:24

回复 6# ads350668398


    哪里不懂就直接问吧
作者: 我来了    时间: 2016-9-30 05:11

回复 10# Batcher

正则经过三周的折腾,算是凑合能搞出想要的东西了。
RegexBuddy4.6 也被我去除校验和NAG,汉化成功了,控件上都被写上了正则例子了,用起来太爽了
就是不会用命令行,要学哪些才能结合使用呢???
作者: Batcher    时间: 2016-10-1 11:12

回复 11# 我来了


    每天坚持使用支持正则的命令(sed/awk/grep等)到各个技术论坛解决文本处理类的问题




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2