проблемы с синтаксическим анализом текстового файла в Matlab, есть ли способ, чтобы поля имели несколько строк? - PullRequest
0 голосов
/ 16 июня 2010

У меня есть текстовый файл, который я хочу добавить в список. Недавно я задал два вопроса на эту тему. Проблема, с которой я постоянно сталкиваюсь, заключается в том, что я хочу проанализировать текстовый файл, но разделы имеют разную длину. Поэтому я не могу использовать

текстовое сканирование (fid, '% s% s% s')

потому что длина каждого гена варьируется. У меня также были проблемы с использованием полей, потому что когда я использую код для настройки полей, он допускает только одну строку в каждом поле для поля «примечание» ниже в первом гене. Я хотел бы иметь возможность иметь несколько строк в одном поле. я могу прочитать их. В настоящее время я получаю ошибки об индексе, превышающем размеры матрицы.

fieldname = regexp (строка {1}, '/ (. +) =', 'Tokens', 'Once');

value = regexp (строка {1}, '= "? ([^"] +) "? $', 'Tokens', 'Once');

Другой возможный способ, которым я вижу эту работу, заключается в использовании некоторого вида 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"

1 Ответ

2 голосов
/ 17 июня 2010

Я бы, вероятно, подумал о том, чтобы использовать какую-то простую функцию-обертку для объединения многострочных полей в одну строку. Что-то вроде:

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.

...