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

[已解决]求解批处理如何提取指定内容?

本帖最后由 pcl_test 于 2016-1-11 02:08 编辑

文档由于过大,已上传至百度网盘,地址如下:http://yun.baidu.com/share/link? ... 6&uk=2400164940

我有一个文档,需要提取一下红色标注部分,下面列出的是其中一种药物;文档中有10000+种;提取出来存到另一个文档中,如果某种药物没有Target的信息,就存为~;格式如下
Entry                     Target
D09878                HSA:1234,HSA:729230
D09899                ~


非常感谢!!!!!

%%
ENTRY       D09878                      Drug
NAME        Cenicriviroc (USAN/INN)
FORMULA     C41H52N4O4S
EXACT_MASS  696.3709
MOL_WEIGHT  696.941
ACTIVITY    Treatment of HIV infection and arthritis
REMARK      Drug group: DG01264
TARGET      chemokine receptor 5 (CCR5) antagonist [HSA:1234] [KO:K04180];
            chemokine receptor 2 (CCR2) antagonist [HSA:729230] [KO:K04177]
BRITE       Target-based classification of drugs [BR:br08310]
             Cytokine receptors
              Chemokine receptors
               chemokine receptor 2 (CCR2)
                Cenicriviroc
                 D09878  Cenicriviroc (USAN/INN)
               chemokine receptor 5 (CCR5)
                Cenicriviroc
                 D09878  Cenicriviroc (USAN/INN)
            Antiinfectives [BR:br08307]
             Antivirals
              Anti-HIV agents
               Entry / fusion inhibitor
                chemokine receptor 5 inhibitor(CCR5) antagonist
                 Cenicriviroc
                  D09878  Cenicriviroc (USAN/INN)
DBLINKS     CAS: 497223-25-3
            PubChem: 135626631
            LigandBox: D09878
ATOM        50
            1   C2x C    24.9900  -26.6700
            2   C2y C    26.3900  -26.6700
            3   C1x C    27.3700  -25.6900
            4   C1x C    27.3700  -24.2900
            5   C1x C    26.3900  -23.3100
            6   N1y N    24.9900  -23.3100
            7   C8y C    24.0100  -24.2900
            8   C8y C    24.0100  -25.6900
            9   C5a C    26.3900  -28.0700
            10  N1b N    27.5800  -28.7700
            11  C8y C    28.7700  -28.0700
            12  O5a O    25.2000  -28.7700
1

评分人数

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

TOP

@pcl_test

召唤大神

TOP

求解答~~~~都要被自己笨死了

TOP

本帖最后由 pcl_test 于 2015-8-4 11:18 编辑

保存为bat文件
  1. 1>1/* :
  2. @echo off
  3. cscript -nologo -e:jscript "%~0"
  4. echo;完成!
  5. pause & exit/b
  6. */
  7. var fso = new ActiveXObject("Scripting.FileSystemObject");
  8. var f1 = fso.OpenTextFile(".\\drug", 1);
  9. var f2 = fso.CreateTextFile(".\\结果.txt", 2);
  10. f2.WriteLine('Entry       Target');
  11. while(!f1.AtEndOfStream) {
  12.     var str = f1.ReadLine().replace(/^\s{1,6}([A-Z]+.*)/,'$1');
  13.     if (/^ENTRY\s+/.test(str)) {
  14.         var t = str.replace(/^ENTRY\s+/,'').split(' ');
  15.         var s = '';
  16.         var def1 = '';
  17.         var def2 = '';
  18.     }
  19.     if (/^TARGET\s+/.test(str)) {
  20.         def1 = 1;
  21.         s = s+str;
  22.     }
  23.     var u = /^[A-Z]+/.test(str);
  24.     if (def1&&!u){
  25.         s = s+str;
  26.         def2 = 1;
  27.     }
  28.     if (def1&&def2&&u)def1 = '';
  29.     if (/^\/+/.test(str)){
  30.         var m = s.match(/\[HSA:[^\]]+\]/g);
  31.         if (m){
  32.             for (var i=0;i<m.length;i++) {
  33.                 var v = m[i].replace(/\[HSA:([^\]]+)\]/g, '$1').split(' ');
  34.                 for (var j=0;j<v.length;j++) {
  35.                     f2.WriteLine(t[0]+'      HSA:'+v[j]);
  36.                 }
  37.             }
  38.         }
  39.     }
  40. }
  41. f1.Close();
  42. f2.Close();
复制代码
1

评分人数

TOP

哈哈,。你回复的这个冒失跟这个不匹配吧,就算不匹配也算了,你起码把如何使用告诉LZ,用批处理脚本创建一个JS脚本。

TOP

本帖最后由 回家路上 于 2015-8-3 23:18 编辑

回复 5# roddy


你应该好久没登论坛了吧,这个是这一年多兴起的Bat和JS混编。
像楼主这种复杂的匹配规则,用JS确实更简便、清晰。
在论坛搜索中输入【混编】会找到相关的技术贴。

TOP

回复 4# pcl_test


    大神,您好!能把我得到并且改好的NEW_DG.txt中target列的中括号去掉吗?把一对多的关系变成一对一?只有数字的加上hsa:?非常感谢!!!
格式改成这样的:

原本的:
D00011        [HSA:2741 2742 8001 2743]
D00058        2566
D00058        2567
D00058        2568
D00058        55879]
D00058        [HSA:2550
D00058        9568]
D00059        [HSA:1812]
D00059        [HSA:1813]
D00059        [HSA:1814]
D00059        [HSA:1815]


希望更改后的:
D00011        HSA:2741
D00011    HSA:2742
D00011    HSA:8001
D00011    HSA:2743
D00058        HSA:2566
D00058        HSA:2567
D00058        HSA:2568
D00058        HSA:55879
D00058        HSA:2550
D00058        HSA:9568
D00059        HSA:1812
D00059        HSA:1813
D00059        HSA:1814
D00059        HSA:1815

TOP

本帖最后由 回家路上 于 2015-8-4 09:40 编辑

回复 7# sweet惜缘

// 将代码中
  1. if (/^\/+/.test(str)){
  2. var m = s.match(/\[HSA:[^\]+]+\]/g);
  3. if (m){
  4. f2.WriteLine(t[0]+'      '+m);
  5. }else f2.WriteLine(t[0]+'      '+'~');
  6. }
复制代码
// 换为
  1. if (/^\/+/.test(str)){
  2. var m = s.match(/\[(HSA:[^\]+]+)\]/g);
  3. if (m){
  4. f2.WriteLine(t[0]+'      '+RegExp.$1);
  5. }else f2.WriteLine(t[0]+'      '+'~');
  6. }
复制代码

TOP

回复 8# 回家路上




    您好!能把我得到并且改好的NEW_DG.txt中target列的中括号去掉吗?把一对多的关系变成一对一?只有数字的加上hsa:?非常感谢!!!
格式改成这样的:

原本的:
D00011        [HSA:2741 2742 8001 2743]
D00058        2566
D00058        2567
D00058        2568
D00058        55879]
D00058        [HSA:2550
D00058        9568]
D00059        [HSA:1812]
D00059        [HSA:1813]
D00059        [HSA:1814]
D00059        [HSA:1815]


希望更改后的:
D00011        HSA:2741
D00011    HSA:2742
D00011    HSA:8001
D00011    HSA:2743
D00058        HSA:2566
D00058        HSA:2567
D00058        HSA:2568
D00058        HSA:55879
D00058        HSA:2550
D00058        HSA:9568
D00059        HSA:1812
D00059        HSA:1813
D00059        HSA:1814
D00059        HSA:1815

TOP

回复 4# pcl_test


    大神~我自己改好了~现在就只有一个问题~就是给数字前加HSA:  ?  非常感谢
    如何把
D00094        HSA:5914
D00094        5915
D00094        5916
D00095        HSA:155
改成
D00094        HSA:5914
D00094        HSA:5915
D00094        HSA:5916
D00095        HSA:155

TOP

回复 8# 回家路上


    您好!~我自己改好了~现在就只有一个问题~就是给数字前加HSA:  ?  非常感谢
    如何把
D00094        HSA:5914
D00094        5915
D00094        5916
D00095        HSA:155
改成
D00094        HSA:5914
D00094        HSA:5915
D00094        HSA:5916
D00095        HSA:155

TOP

[文本处理] [已解决]批处理如何给数字前加指定字符

想请教一下,如何给数字前加HSA:  ?  非常感谢
  

如何把
D00094        HSA:5914
D00094        5915
D00094        5916
D00095        HSA:155
改成
D00094        HSA:5914
D00094        HSA:5915
D00094        HSA:5916
D00095        HSA:155

@pcl_test

召唤大神!!

TOP

:'(:'(
求解答~~~~~

TOP

本帖最后由 pcl_test 于 2016-9-14 05:02 编辑

已修改,一步到位的
1

评分人数

TOP

返回列表