Board logo

标题: [文本处理] [已解决]批处理如何批量提取文本中的特定内容? [打印本页]

作者: sweet惜缘    时间: 2015-12-28 15:00     标题: [已解决]批处理如何批量提取文本中的特定内容?

如何提取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                                ...                                                ...                                          ...
...
...



灰常感谢!!!
作者: pcl_test    时间: 2015-12-28 23:04

  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);
复制代码

作者: sweet惜缘    时间: 2015-12-29 12:20

回复 2# pcl_test


    灰常感谢!!程序有效!
作者: sweet惜缘    时间: 2015-12-29 12:24

回复 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
作者: pcl_test    时间: 2015-12-29 13:37

回复 4# sweet惜缘

不是说了怎么改了吗
作者: sweet惜缘    时间: 2015-12-29 13:47

回复 5# pcl_test

汗~能否把括号里的数字去掉?我只需要后面的ID,不需要括号中的标号~~
灰常感谢!!
作者: sweet惜缘    时间: 2015-12-29 13:48

回复 5# pcl_test


    看到了 = = 我眼瞎了 感谢!!!!




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