从文本文件中检索特定数据并将其保存在MATLAB中的新文件中

时间:2012-01-01 19:42:28

标签: postgresql matlab insert printf

我正在尝试从txt文件中检索特定数据,并希望将其保存在新的txt文件中。

以下是我想从文本文件中检索的数据示例:

//
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,SRANGE START AND STOP”,但我只想选择信息,而不是文件名的标题。例如,DOMAIN是1cuk003,我只想从中选择“1cuk003”

我是否需要将此数据存储在数组中?或者有什么其他方法可以用来解决这个问题。此外,我有超过10,000个使用不同值的更多这些数据。

另一部分是,一旦我重新获得这些数据,我就会想要使用“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 个答案:

答案 0 :(得分:1)

有几个MATLAB函数可以派上用场:

  • fgetl:从文件中读取一行
  • strtok:拆分字符串
  • switch:从不同的行动中选择
  • regexp:匹配正则表达式

有了这些,基本的工作流程就是这样:

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安装,因此上述代码未经过测试。不过,它应该让你去。