
标题: [文本处理] [已解决]批处理如何给数字前加指定字符 [打印本页]
作者: sweet惜缘 时间: 2015-8-3 17:36 标题: [已解决]求解批处理如何提取指定内容?
本帖最后由 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
作者: sweet惜缘 时间: 2015-8-3 17:38
@pcl_test
召唤大神
作者: sweet惜缘 时间: 2015-8-3 18:46
求解答~~~~都要被自己笨死了
作者: pcl_test 时间: 2015-8-3 20:17
本帖最后由 pcl_test 于 2015-8-4 11:18 编辑
保存为bat文件- 1>1/* :
- @echo off
- cscript -nologo -e:jscript "%~0"
- echo;完成!
- pause & exit/b
- */
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var f1 = fso.OpenTextFile(".\\drug", 1);
- var f2 = fso.CreateTextFile(".\\结果.txt", 2);
- f2.WriteLine('Entry Target');
- while(!f1.AtEndOfStream) {
- var str = f1.ReadLine().replace(/^\s{1,6}([A-Z]+.*)/,'$1');
- if (/^ENTRY\s+/.test(str)) {
- var t = str.replace(/^ENTRY\s+/,'').split(' ');
- var s = '';
- var def1 = '';
- var def2 = '';
- }
- if (/^TARGET\s+/.test(str)) {
- def1 = 1;
- s = s+str;
- }
- var u = /^[A-Z]+/.test(str);
- if (def1&&!u){
- s = s+str;
- def2 = 1;
- }
- if (def1&&def2&&u)def1 = '';
- if (/^\/+/.test(str)){
- var m = s.match(/\[HSA:[^\]]+\]/g);
- if (m){
- for (var i=0;i<m.length;i++) {
- var v = m[i].replace(/\[HSA:([^\]]+)\]/g, '$1').split(' ');
- for (var j=0;j<v.length;j++) {
- f2.WriteLine(t[0]+' HSA:'+v[j]);
- }
- }
- }
- }
- }
- f1.Close();
- f2.Close();
复制代码
作者: roddy 时间: 2015-8-3 23:11
哈哈,。你回复的这个冒失跟这个不匹配吧,就算不匹配也算了,你起码把如何使用告诉LZ,用批处理脚本创建一个JS脚本。
作者: 回家路上 时间: 2015-8-3 23:16
本帖最后由 回家路上 于 2015-8-3 23:18 编辑
回复 5# roddy
你应该好久没登论坛了吧,这个是这一年多兴起的Bat和JS混编。
像楼主这种复杂的匹配规则,用JS确实更简便、清晰。
在论坛搜索中输入【混编】会找到相关的技术贴。
作者: sweet惜缘 时间: 2015-8-4 09:22
回复 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
作者: 回家路上 时间: 2015-8-4 09:36
本帖最后由 回家路上 于 2015-8-4 09:40 编辑
回复 7# sweet惜缘
// 将代码中- if (/^\/+/.test(str)){
- var m = s.match(/\[HSA:[^\]+]+\]/g);
- if (m){
- f2.WriteLine(t[0]+' '+m);
- }else f2.WriteLine(t[0]+' '+'~');
- }
复制代码
// 换为- if (/^\/+/.test(str)){
- var m = s.match(/\[(HSA:[^\]+]+)\]/g);
- if (m){
- f2.WriteLine(t[0]+' '+RegExp.$1);
- }else f2.WriteLine(t[0]+' '+'~');
- }
复制代码
作者: sweet惜缘 时间: 2015-8-4 09:47
回复 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
作者: sweet惜缘 时间: 2015-8-4 10:25
回复 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
作者: sweet惜缘 时间: 2015-8-4 10:25
回复 8# 回家路上
您好!~我自己改好了~现在就只有一个问题~就是给数字前加HSA: ? 非常感谢
如何把
D00094 HSA:5914
D00094 5915
D00094 5916
D00095 HSA:155
改成
D00094 HSA:5914
D00094 HSA:5915
D00094 HSA:5916
D00095 HSA:155
作者: sweet惜缘 时间: 2015-8-4 10:39 标题: [已解决]批处理如何给数字前加指定字符
想请教一下,如何给数字前加HSA: ? 非常感谢
如何把
D00094 HSA:5914
D00094 5915
D00094 5916
D00095 HSA:155
改成
D00094 HSA:5914
D00094 HSA:5915
D00094 HSA:5916
D00095 HSA:155
作者: sweet惜缘 时间: 2015-8-4 10:58
@pcl_test
召唤大神!!
作者: sweet惜缘 时间: 2015-8-4 11:15
:'(:'(
求解答~~~~~
作者: pcl_test 时间: 2015-8-4 11:19
本帖最后由 pcl_test 于 2016-9-14 05:02 编辑
已修改,一步到位的
作者: pcl_test 时间: 2015-8-4 11:25
回复 7# sweet惜缘
4楼已改,一步到位的
作者: sweet惜缘 时间: 2015-8-4 11:39
回复 4# pcl_test
非常感谢!!!!有效!!
作者: 回家路上 时间: 2015-8-4 13:14
回复 11# sweet惜缘
试一试- @echo off & setlocal enabledelayedexpansion
- (for /f "tokens=1,* delims= " %%i in (NEW_DG.txt) do (
- set entry=%%i
- set target=%%j
- if "!target!" neq "~" (
- if "!target:~0,1!" equ "[" set target=!target:~1!
- if "!target:~-1!" equ "]" set target=!target:~,-1!
- if "!target:~0,3!" neq "HSA" set target=HSA:!target!
- if "!target: =!" neq "!target!" (
- for %%i in (!target!) do (
- set target=%%i
- if "!target:~0,3!" equ "HSA" (
- echo;!entry! %%i
- ) else (
- echo;!entry! HSA:%%i
- )
- )
- ) else (
- echo;!entry! !target!
- )
- ) else (
- echo;!entry! !target!
- )
- ))>222.txt
- pause & exit /b
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |