找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24507|回复: 6

[文本处理] [已解决]批处理如何批量提取文本中的特定内容?

[复制链接]
发表于 2015-12-28 15:00:01 | 显示全部楼层 |阅读模式
如何提取drugnbank.txt中每个drug的Drug_Target_ID信息,(有的dug_target信息不止下面3个,可能多达几十个),由于附件太大,已上传至百度网盘,链接如下:http://pan.baidu.com/s/1numNLLf
这个是网盘附件中一个drug信息的txt.)

# Drug_Target_1_ID:
3819

# Drug_Target_1_Locus:
11p11-q12

# Drug_Target_1_Molecular_Weight:
70037

# Drug_Target_1_Name:
Prothrombin

# Drug_Target_1_Number_of_Residues:
622

# Drug_Target_1_PDB_ID:
1HAG

# Drug_Target_2_ID:
54

最后希望得到的out_target.txt内容如下(有的没有target的信息就空着):
BEGIN_DRUGCARD                 Drug_Target_1_ID                         Drug_Target_2_ID                   Drug_Target_3_ID     .....
DB00001                                3819                                            54                                          ...
DB00002                                ...                                                ...                                          ...
...
...



灰常感谢!!!
发表于 2015-12-28 23:04:32 | 显示全部楼层
  1. 1>1/* :
  2. @echo off
  3. cscript -nologo -e:jscript "%~f0" "drugbank.txt">"out.txt"
  4. echo;完成
  5. pause & exit/b
  6. */

  7. var txt ='';
  8. var fso = new ActiveXObject('Scripting.FileSystemObject');
  9. var f = fso.OpenTextFile(WScript.Arguments(0));
  10. while(!f.AtEndOfStream) {
  11.     var str = f.ReadLine();
  12.     if(/^\s*$/.test(str))var id=null;
  13.     if(id){
  14.         map[id]=str;
  15.         arr.push(id);
  16.     }
  17.     if(/^#\s?BEGIN_DRUGCARD/.test(str)){
  18.         var tmp='', arr=[], map={};
  19.         tmp+=str.replace(/^.+\s/,'');
  20.     }
  21.     if(/^# Drug_Target_(\d+)_ID:/.test(str)){var id=RegExp.$1;}
  22.     if(/^#\s?END_DRUGCARD/.test(str)){
  23.         arr.sort(function(a,b){return a-b});
  24.         for(var i=0; i<arr.length;i++){
  25.             tmp+='  ('+arr[i]+')'+map[arr[i]];
  26.             //不显示序号,上句改为tmp+='  '+map[arr[i]];
  27.         }
  28.         txt+=tmp+'\r\n'
  29.         map=null;
  30.     }
  31. }
  32. WSH.Echo(txt);
复制代码
 楼主| 发表于 2015-12-29 12:20:57 | 显示全部楼层
回复 2# pcl_test


    灰常感谢!!程序有效!
 楼主| 发表于 2015-12-29 12:24:29 | 显示全部楼层
回复 2# pcl_test

大神。有一个问题,能否把括号内的数字去掉?
DB00001        (1)54                                                                                                       
DB00002        (1)844        (2)1102        (3)3814        (4)3815        (5)3816        (6)3817        (7)3818        (8)2782        (9)784        (10)3819        (11)3820        (12)3821               
DB00003        (1)874                                                                                                       
DB00004        (1)724        (2)717        (3)3823                                                                                       
DB00005        (1)777        (2)1269        (3)784        (4)3818        (5)3819        (6)3820        (7)3821        (8)1789        (9)1102        (10)2782        (11)3814        (12)3815        (13)3816        (14)3817
希望得到的如下:
DB00001        54                                                                                                       
DB00002        844        1102        3814        3815        3816        3817        3818        2782        784        3819        3820        3821
发表于 2015-12-29 13:37:49 | 显示全部楼层
回复 4# sweet惜缘

不是说了怎么改了吗
 楼主| 发表于 2015-12-29 13:47:41 | 显示全部楼层
回复 5# pcl_test

汗~能否把括号里的数字去掉?我只需要后面的ID,不需要括号中的标号~~
灰常感谢!!
 楼主| 发表于 2015-12-29 13:48:16 | 显示全部楼层
回复 5# pcl_test


    看到了 = = 我眼瞎了 感谢!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 21:55 , Processed in 0.018108 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表