Получить определенные данные из текстового файла и сохранить их в новом файле в MATLAB - PullRequest
0 голосов
/ 01 января 2012

Я пытаюсь извлечь определенные данные из текстового файла и хочу сохранить их в новом текстовом файле.

Вот пример данных, которые я хотел бы получить из текстового файла:

//
FORMAT CDDF1.0
DOMAIN 1cuk003
VERSION   3.1.0
VERDATE   20-Jan-2007
NAME   Ruva protein. Chain: null. Engineered: yes
SOURCE Escherichia coli. Strain: 12 bl21 (de3).  Expressed in: escherichia co
SOURCE li.
CATHCODE  1.10.8.10
CLASS  Mainly Alpha
ARCH   Orthogonal Bundle
TOPOL  Helicase, Ruva Protein; domain 3 
HOMOL  DNA helicase RuvA subunit, C-terminal domain
DLENGTH   48
DSEQH  >pdb|1cuk003
DSEQS  TDDAEQEAVARLVALGYKPQEASRMVSKIARPDASSETLIREALRAAL
NSEGMENTS 1
SEGMENT   1cuk003:1:1
SRANGE START=156  STOP=203
SLENGTH   48
SSEQH  >pdb|1cuk003:1:1
SSEQS  TDDAEQEAVARLVALGYKPQEASRMVSKIARPDASSETLIREALRAAL
ENDSEG
//

Из этих подробностей я пытаюсь получить "ДОМЕН, ПУСК И СТРАНИЦА СТОРОНЫ" , но я просто хотел бы выбрать информацию, а не заголовок имени файла.Например, DOMAIN - это 1cuk003, я просто хотел бы выбрать "1cuk003" .

Нужно ли хранить эти данные в массиве?Или есть какой-то другой способ, которым я мог бы использовать, чтобы решить эту проблему.Кроме того, у меня есть более 10000 записей больше этих данных с различными значениями.

Другая часть заключается в том, что, как только я восстановил эти данные, я бы хотел отформатировать данные, используя "sprintf", например.sprintf('INSERT INTO postgres VALUES %d,%d.',array1,array2);

Возможно ли это?

По сути, в конце я хотел бы получить текстовый файл, содержащий операторы SQL INSERT для всех сохраненных данных, в котором я могу просто легко выполнить их в PostgreSQL.

Я сделалтестовый код, в котором он открывает текстовый файл, реплицирует данные и сохраняет их в новом текстовом файле.

fid = fopen('sample.txt');    
readfile = fread(fid, '*char');    
fclose(fid);                        
output = fopen('output_sample.txt', 'wt');
fprintf(output,'%s \n', readfile);
fclose(output);

Спасибо.

1 Ответ

1 голос
/ 02 января 2012

Есть несколько функций MATLAB, которые пригодятся:

Вооружившись этим, основной рабочий процесс выглядит так:

domain = '';
start = '';
stop = '';
fin = fopen('sample.txt', 'r');
fout = fopen('output.txt', 'w');
% TODO: Add error check!
while true
    line = fgetl(fin); % Get the next line from the file
    if ~ischar(line)
        % End of file
        break;
    end
    [key, value] = strtok(line); % Split line at the first space
    switch key
        case 'DOMAIN'
           % Store domain
           domain = value;
        case 'SRANGE'
           % Retrieve start and stop values
           m = regexp(value, 'START=(\d+)\s*STOP=(\d+)', 'tokens');
           start = m{1};
           stop = m{2};

           % Print result
           fprintf(fout, 'INSERT INTO postgres VALUES %s, %s, %s.\n', domain, start, stop);
    end
end
fclose(fin);
fclose(fout);

В настоящее время у меня нет доступа к установке MATLAB, поэтому приведенный выше код не тестируется. Это должно привести вас в движение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...