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

[文本处理] [已解决] 批处理如何提取出文件中的所需内容并加以整理?

我有很多年文件(其中之一见附件,其余的文件内容形式一样),文件的一部分内容如下:
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文件,但转化后看起来比较乱。
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

在16行
s = fso.OpenTextFile(files[i]).ReadAll();
下面加一行:
s += '\r\n-----------------------------------';

TOP

由于原样文件太大,不能添加成附件形式,我就删了一部分。的确是最后一个Molecule后面没有以“-----------------------------------”结尾。那么现在怎么解决这个问题?不好意思,让您费心了!

TOP

@5楼
如果你真是在cmd中运行这个bat,窗口不可能快速闪过就关闭,而是会仍然保留,你可以将其中的出错信息复制出来。而不要光是嚷嚷不行,但一点有用的信息都不提供,别人怎么知道问题在哪里?

@6楼
不可能是少“;”的问题,你肯定没有原样复制代码(只需将其中的“.out文件所在文件夹”换成实际文件夹名称),而是有不正确的修改。
如果你所有的文件都是附件那样的格式,不可能有漏网之鱼。应该是你最后一个Molecule后面没有“-----------------------------------”结尾。批处理的关键是找规律,如果规律不同了,结果肯定就不同了。请提供完整样式。

TOP

我知道问题出哪了:@set @n=0//&cscript.exe -e:jscript "%~f0"&exit /b 最后少个“;”
改后成功了。但有点小问题,就是每个out文件的最后一个Molecule内容不能显示,其余正常,能不能解决这一问题呢?
谢谢!

TOP

试了好多次,cmd或bat窗口都快速闪过,我加了pause也快速闪过,也没有result.csv文件;我不知道是哪出错了,麻烦再给我点意见。
谢谢!

TOP

就是保存为bat,直接双击或在cmd中运行,会生成一个result.csv,就是处理结果。

TOP

麻烦问一下,是在啥环境下运行啊?我在bat下运行没结果,是不是要在其他编译器下编译啊?
谢谢!

TOP

  1. @set @n=0//&cscript.exe -e:jscript "%~f0"&exit /b
  2. folder = ".out文件所在文件夹";
  3. fso = new ActiveXObject("Scripting.FileSystemObject");
  4. fc = new Enumerator(fso.GetFolder(folder).files);
  5. files = [];
  6. for (i=0; !fc.atEnd(); fc.moveNext()) {
  7.     fp = fc.item().Path;
  8.     if (/\.out$/i.test(fp)) files[i++] = fp;
  9. }
  10. r = "Molecule,Elapsed time for docking,Anchors,Orientations,Conformations,Grid Score,Grid_vdw,Grid_es,Int_energy\r\n";
  11. for (i=0; i<files.length; i++)
  12. {
  13.     s = fso.OpenTextFile(files[i]).ReadAll();
  14.     s = s.match(/^Molecule:[\s\S]+?-----------------------------------/gim);
  15.     if (!s) continue;
  16.     s = s.join('\r\n');
  17.     s = s.split(/\s*(Molecule|Elapsed time for docking|Anchors|Orientations|Conformations|Grid Score|Grid_vdw|Grid_es|Int_energy):\s*/);
  18.     s = s.join(',').replace(/\s+-{2,},?/g,'\r\n');
  19.     r += s;
  20. }
  21. fso.OpenTextFile('result.csv', 2, true).write(r);
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

返回列表