2012-01-01 57 views
0

我試圖從txt文件中檢索特定數據,並希望將其保存在新的txt文件中。從文本文件中檢索特定數據並將其保存在MATLAB中的新文件中

這裏,我想從文本文件以檢索數據的樣本:

// 
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啓動和停止」,但我只想選擇信息,而不是文件名稱的標題。例如,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

有它派上用場的幾個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安裝,這樣上面的代碼沒有進行測試。它應該讓你去,但。

+0

非常感謝您的解釋。但是,我目前正在解決正則表達式的未定義變量'remain'。那是一個字符串類型?如果是這樣,它並沒有被調用到任何地方。 – Jeiman 2012-01-02 18:40:33

+1

啊,應該是'價值'而不是。我修正了上面的代碼示例。 – 2012-01-02 19:20:30

+1

我不應該在晚上發佈答案:)'代幣'應該是'm'。我修正了上面的代碼。對不起,我已經說過,我現在沒有權限訪問MATLAB。感謝您報告錯誤! – 2012-01-02 19:40:23

相關問題