2010-06-16 14 views
0

J'ai un fichier texte que je veux faire une liste. J'ai posé deux questions récemment sur ce sujet. Le problème que je continue à rencontrer est que je veux analyser le fichier texte, mais les sections sont de longueur différente. Je ne peux pas utiliserproblèmes lors de l'analyse du fichier texte dans Matlab, existe-t-il un moyen de permettre aux champs d'avoir plusieurs lignes?

textscan (fid, '% s% s% s')

parce que la longueur de chaque gène varie. J'ai aussi eu du mal à utiliser les champs parce que lorsque j'utilise le code pour configurer les champs, il ne permet qu'une seule ligne dans chaque champ pour le champ "note" ci-dessous dans le premier gène. Je voudrais pouvoir plusieurs lignes dans un champ être en mesure de les lire. Actuellement, je reçois des erreurs sur l'indice dépasse les dimensions de la matrice. Fieldname = regexp (ligne {1}, '/ (. +) =', 'Jetons', 'une fois');

valeur = regexp (ligne {1}, '= "[+)" $ (^]?"?', 'Jetons', 'une fois'),

Une autre façon possible, je vois ce travail est utiliser une sorte d'isLineEmpty pour pouvoir diviser les gènes soit la ligne vide qui est entre eux Existe-t-il un moyen d'avoir plusieurs lignes dans mon entrée de champ afin que je puisse obtenir toutes les informations associées à "note" ? ou un moyen d'utiliser un isLineEmpty et ne pas utiliser les champs?

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" 

Répondre

2

Je probablement envisager d'utiliser une sorte de fonction simple wrapper pour replier les champs à plusieurs lignes en une seule ligne. Somet hing like:

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 

Ceci est destiné à remplacer fgetl.