标题: [文本处理] 【已解决】批处理怎样从txt文本或者htm文件里提取特定内容? [打印本页]
作者: tbjx138 时间: 2014-11-2 23:35 标题: 【已解决】批处理怎样从txt文本或者htm文件里提取特定内容?
例如: <div><a href="Detail.mvc?sys=dlib&type=1&restype=2&cult=CN&resid=m.20140704-ZLZX-889-0379&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)- @if(0)==(0) echo off
- for %%a in (*.htm) do CScript.exe //NoLogo //E:JScript "%~f0" "%%a">%%~na.txt
- pause & exit
- @end
- function WriteCenterLogs(a,b,c,d,e,f,g,h,i) {WScript.Echo(a + '\t' + b + '\t' + c + '\t' + d + '\t' + e+ '\t' + g)}
-
- function adoLoadText(filename, charset) {
- var stream, text;
- stream = new ActiveXObject("ADODB.Stream");
- stream.type = 2;
- stream.charset = charset;
- stream.open();
- stream.loadFromFile(filename);
- text = stream.readText(-1);
- stream.close();
- return text;
- }
-
- var file = WScript.Arguments.Item(0);
- var next = adoLoadText(file ,'UTF-8');
- var html = new ActiveXObject("htmlfile");
- html.write(next);
- var d = html.getElementsByTagName("dd");
- var len = d.length;
- for (var i = 0; i < len; i++) {
- var s = d[i].getElementsByTagName("div");
- s = s[0].getElementsByTagName('a')[0].onclick;
- s();
- }
复制代码
废了对象 还是直接正则获取 这样试下
发现正则有点问题- @if(0)==(0) echo off
- dir /b *.htm | CScript.exe //NoLogo //E:JScript "%~f0"
- pause & exit
- @end
-
- function adoLoadText(filename, charset) {
- var stream, text;
- stream = new ActiveXObject("ADODB.Stream");
- stream.type = 2;
- stream.charset = charset;
- stream.open();
- stream.loadFromFile(filename);
- text = stream.readText();
- stream.close();
- return text;
- }
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var re = new RegExp('<dd>[^(]+\\((.+)\\);\" target=','img')
- while (!WScript.StdIn.AtEndOfStream){
- var file = WScript.StdIn.Readline();
- var name = file.replace(/(.+?)(\.[^\.]*?)$/gi,'$1.txt');
- var next = adoLoadText(file ,'UTF-8');
- var arr = getarr(next);
- fso.CreateTextFile(name, true).Write(arr.join('\r\n'))
- }
-
- function getarr(next) {
- var f = next.match(re),arr = [];
- if (f){
- var len = f.length;
- for (var i = 0; i < len; i++){
- var str = f[i];
- str = str.replace(re,'$1');
- var tar = str.replace(/^'|'$/g,'').replace(/\t/g,' ').split(/','/);
- tar.splice(5, 1)
- arr[i] = tar.join('\t')
- }
- return arr;
- }
- }
复制代码
作者: 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 |