2010-06-16 40 views
0

我有一個文本文件,我想將其製作成列表。我最近問了兩個關於這個話題的問題。我一直遇到的問題是,我想解析文本文件,但部分的長度不同。因此,我不能使用在Matlab中解析文本文件的問題,有沒有辦法讓字段有多行?

textscan(FID, '%S%S%S')

因爲每個基因的長度變化。我在使用字段時也遇到了麻煩,因爲當我使用代碼設置字段時,它只允許在每個字段中爲第一個基因中的「note」字段設置一行,我希望能夠在一個字段中使用多行一個能夠閱讀他們英寸目前我得到有關索引超過矩陣尺寸的錯誤。 fieldname = regexp(line {1},'/(。+)=','tokens','once');

值=正則表達式(線{1}, '= 「[+)」$(^]?「?', '標記', '一次');

另一種可能的方式我看到這個工作是使用某種isLineEmpty可以將基因劃分爲它們之間的空行 有沒有一種方法可以在我的字段條目中有多行,以便我可以獲取與「筆記」相關的所有信息?還是有辦法使用isLineEmpty和使用領域跳過?

gene   218705..219367 
       /locus_tag="Rv0187" 
       /db_xref="GeneID:886779" 
CDS    218705..219367 
       /locus_tag="Rv0187" 
       /EC_number="2.1.1.-" 
       /function="THOUGHT TO BE INVOLVED IN TRANSFER OF METHYL 
       GROUP." 
       /note="Rv0187, (MTCI28.26), len: 220 aa. Probable 
       O-methyltransferase (EC 2.1.1.-), similar to many e.g. 
       AB93458.1|AL357591 putative O-methyltransferase from 
       Streptomyces coelicolor (223 aa); MDMC_STRMY|Q00719 
       O-methyltransferase from Streptomyces mycarofaciens (221 
       aa), FASTA scores: opt: 327, E(): 2.4e-17, (35.9% identity 
       in 192 aa overlap). Also similar to Rv1703c, Rv1220c from 
       Mycobacterium tuberculosis." 
       /codon_start=1 
       /transl_table=11 
       /product="O-methyltransferase" 
       /protein_id="NP_214701.1" 
       /db_xref="GI:15607328" 
       /db_xref="GeneID:886779" 

gene   219486..219917 
       /locus_tag="Rv0188" 
       /db_xref="GeneID:886776" 
CDS    219486..219917 
       /locus_tag="Rv0188" 
       /function="UNKNOWN" 
       /experiment="experimental evidence, no additional details 
       recorded" 
       /codon_start=1 
       /transl_table=11 
       /product="transmembrane protein" 
       /protein_id="NP_214702.1" 
       /db_xref="GI:15607329" 

回答

2

我可能會考慮使用某種簡單的包裝功能的崩潰多行的字段成一行。舒美特hing喜歡:

function l = readlongline(fh) 
quotesSeen = 0; 
done  = false; 
l   = ''; 
while ~done 
    tline = fgetl(fh); 
    if ~ischar(tline) 
     % Hit EOF 
     l = tline; 
     return 
    end 
    quotesSeen = quotesSeen + length(strfind(tline, '"')); 
    % Break if we've seen 0 or 2 quotes 
    done = any(quotesSeen == [0 2]); 
    l = [l, tline]; 
end 
end 

這是爲了替代fgetl。

相關問題