标题: [文本处理] [已解决] 批处理如何提取出文件中的所需内容并加以整理? [打印本页]
作者: sweet惜缘 时间: 2011-11-27 22:43 标题: [已解决] 批处理如何提取出文件中的所需内容并加以整理?
我有很多年文件(其中之一见附件,其余的文件内容形式一样),文件的一部分内容如下:
Molecule: ZINC14523708 Molecule: ZINC14545359
Elapsed time for docking: 20 seconds Elapsed time for docking: 5 second
Anchors: 1 Anchors: 1
Orientations: 500 Orientations: 500
Conformations: 28 Conformations: 34
Grid Score: -37.959953 Grid Score: -26.402323
Grid_vdw: -29.829193 Grid_vdw: -26.094517
Grid_es: -8.130760 Grid_es: -0.307807
Int_energy: 13.028586 Int_energy: 10.723193
需要把这些内容整理成如下形式:
Molecule Anchors Orientation Conformations Grid Score Grid_vdw Grid_es Int_energy
ZINC14523708 1 500 28 -37.959953 -29.829193 -8.130760 13.028586
ZINC14545359 1 500 34 -26.402323 -26.094517 -0.307807 10.723193
··········
也就是把所有的相同项整理到一起,结果可以保存成txt格式,或输出到excle表。
谢谢!
补充:附件中的文件格式比较特殊,需要用UltraEdit软件才能打开。可以转化成txt文件,但转化后看起来比较乱。
作者: powerbat 时间: 2011-11-28 01:20
- @set @n=0//&cscript.exe -e:jscript "%~f0"&exit /b
-
- folder = ".out文件所在文件夹";
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- fc = new Enumerator(fso.GetFolder(folder).files);
- files = [];
- for (i=0; !fc.atEnd(); fc.moveNext()) {
- fp = fc.item().Path;
- if (/\.out$/i.test(fp)) files[i++] = fp;
- }
-
- r = "Molecule,Elapsed time for docking,Anchors,Orientations,Conformations,Grid Score,Grid_vdw,Grid_es,Int_energy\r\n";
- for (i=0; i<files.length; i++)
- {
- s = fso.OpenTextFile(files[i]).ReadAll();
- s = s.match(/^Molecule:[\s\S]+?-----------------------------------/gim);
- if (!s) continue;
- s = s.join('\r\n');
- s = s.split(/\s*(Molecule|Elapsed time for docking|Anchors|Orientations|Conformations|Grid Score|Grid_vdw|Grid_es|Int_energy):\s*/);
- s = s.join(',').replace(/\s+-{2,},?/g,'\r\n');
- r += s;
- }
- fso.OpenTextFile('result.csv', 2, true).write(r);
复制代码
作者: sweet惜缘 时间: 2011-11-28 22:48
麻烦问一下,是在啥环境下运行啊?我在bat下运行没结果,是不是要在其他编译器下编译啊?
谢谢!
作者: powerbat 时间: 2011-11-28 22:53
就是保存为bat,直接双击或在cmd中运行,会生成一个result.csv,就是处理结果。
作者: sweet惜缘 时间: 2011-11-29 00:52
试了好多次,cmd或bat窗口都快速闪过,我加了pause也快速闪过,也没有result.csv文件;我不知道是哪出错了,麻烦再给我点意见。
谢谢!
作者: sweet惜缘 时间: 2011-11-29 16:30
我知道问题出哪了:@set @n=0//&cscript.exe -e:jscript "%~f0"&exit /b 最后少个“;”
改后成功了。但有点小问题,就是每个out文件的最后一个Molecule内容不能显示,其余正常,能不能解决这一问题呢?
谢谢!
作者: powerbat 时间: 2011-11-29 19:32
@5楼
如果你真是在cmd中运行这个bat,窗口不可能快速闪过就关闭,而是会仍然保留,你可以将其中的出错信息复制出来。而不要光是嚷嚷不行,但一点有用的信息都不提供,别人怎么知道问题在哪里?
@6楼
不可能是少“;”的问题,你肯定没有原样复制代码(只需将其中的“.out文件所在文件夹”换成实际文件夹名称),而是有不正确的修改。
如果你所有的文件都是附件那样的格式,不可能有漏网之鱼。应该是你最后一个Molecule后面没有“-----------------------------------”结尾。批处理的关键是找规律,如果规律不同了,结果肯定就不同了。请提供完整样式。
作者: sweet惜缘 时间: 2011-11-29 22:51
由于原样文件太大,不能添加成附件形式,我就删了一部分。的确是最后一个Molecule后面没有以“-----------------------------------”结尾。那么现在怎么解决这个问题?不好意思,让您费心了!
作者: powerbat 时间: 2011-11-29 23:02
在16行
s = fso.OpenTextFile(files[i]).ReadAll();
下面加一行:
s += '\r\n-----------------------------------';
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |