5

重複の可能性:
matlabのテキストファイルから特定のデータを見つける

次のコードを使用して、「gos.txt」というタイトルのテキスト ファイルを既に開いています。

s={}; 
fid = fopen('gos.txt'); 
tline = fgetl(fid); 
while ischar(tline) 
   s=[s;tline]; 
   tline = fgetl(fid); 
end

次のような結果が得られました: s =

'[Term]'    
'id: GO:0008150'
'name: biological_process'
'namespace: biological_process'
'alt_id: GO:0000004'
'alt_id: GO:0007582'
[1x243 char]
[1x445 char]
'subset: goslim_aspergillus'
'subset: goslim_candida'
'subset: goslim_yeast'
'subset: gosubset_prok'
'synonym: "biological process" EXACT []'
'synonym: "biological process unknown" NARROW []'
'synonym: "physiological process" EXACT []'
'xref: Wikipedia:Biological_process'
'[Term]'    
'id: GO:0016740'
'name: transferase activity'
'namespace: molecular_function'
[1x326 char]
'subset: goslim_aspergillus'
'subset: goslim_candida'
'subset: goslim_metagenomics'
'subset: goslim_pir'
'subset: goslim_plant'
'subset: gosubset_prok'
'xref: EC:2'
'xref: Reactome:REACT_25050 "Molybdenum ion transfer onto molybdopterin, Homo sapiens"'
'//is_a: GO:0003674 ! molecular_function'
'is_a: GO:0008150 ! molecular_function (added by Zaid, To be Removed Later)'
'//relationship: part_of GO:0008150 ! biological_process'
'[Term]'    
'id: GO:0016787'
'name: hydrolase activity'
'namespace: molecular_function'
[1x186 char]
'subset: goslim_aspergillus'
'subset: goslim_candida'
'subset: goslim_metagenomics'
'subset: goslim_plant'
'subset: gosubset_prok'
'xref: EC:3'
'//is_a: GO:0003674 ! molecular_function'
'is_a: GO:0016740 ! molecular_function (added by Zaid, to be removed later)'
'relationship: part_of GO:0008150 ! biological_process'
'[Term]'    
'id: GO:0006810'
'name: transport'
'namespace: biological_process'
'alt_id: GO:0015457'
'alt_id: GO:0015460'
[1x255 char]
'subset: goslim_aspergillus'
'subset: goslim_candida'
'synonym: "small molecule transport" NARROW []'
'synonym: "solute:solute exchange" NARROW []'
'synonym: "transport accessory protein activity" RELATED [GOC:mah]'
'is_a: GO:0016787 ! biological_process'
'relationship: part_of GO:0008150 ! biological_process'
.
.
.
.    

次のステップは、特定の文字を取得してベクトルに入れる方法です。たとえば、「id: GO:********」を含むすべての行を配置し、それらをベクトルに配置したいです。 'is_a: GO:*******' を vector に取得したいのですが、同じ行にその後の文字を入れたくないことに注意してください。

4

2 に答える 2

6

ここで簡単に使用できregexpます-セルに対して機能します:

matching_lines = s{~cellfun('isempty', regexp(s, '^id: GO'))}

ans =

 id: GO:0008150

ans =

 id: GO:0016740

で始まるすべての行を抽出しid: GOます。cellfun呼び出しだけで0/1のベクトルが得られます。ここで、1は、の文字​​列がクエリに一致sすることを意味します。

同様の行で、を含むものが見つかりますis_a: GO:。文字列から不要な文字を切り取るのも。で行うことができますregexp

文字列の一部の抽出は、次の'tokens'パラメータを使用して実行できますregexp

tok = regexp(s, '^id: (GO.*)', 'tokens');
idx = ~cellfun('isempty', tok);
v   = cellfun(@(x)x{1}, {tok{idx}});
sprintf('%s ', v{:})

ans =

 GO:0008150 GO:0016740 
于 2012-10-23T10:05:04.150 に答える
1

行の先頭にあるものだけを見つけたいと仮定すると、それは非常に簡単です。

found=[]
for i=1:length(s)
    temp = s{i};
    if strcmp('id: GO:',temp(1:min(7,end));
        found = [found i];
    end
end

id: GO: で始まる文字列のすべての場所を含むベクトルが含まれています。

現時点ではMatlabで試すことはできませんが、これはほぼ正しいはずです。

于 2012-10-23T09:52:28.630 に答える