2013-07-03 96 views
4

我試圖導入大的txt文件(> 1GB)到MATLAB。將大文本文件導入到matlab(包括註釋; textscan)

這是數據結構:

667.55535 -0.00 0.000 0.0158 
667.5554 -0.01 -0.000 0.0158 
667.55545 -0.01 4.037 10.0000 
667.5555 -0.00 4.000 10.0000 #1 Trigger Camera 10 Hz #2 Trigger Camera 10 Hz 
667.55555 -0.00 4.000 10.0000 
667.5556 -0.01 4.000 10.0000 

我使用textscan函數:

segarray = textscan(file_id, '%f %f %f %f', blocksize, 'delimiter','\n', 'commentStyle', '#'); 

效果很好,但我需要打上「#」的意見,如果我改變格式字符串到'%f%f%f%f%s'並刪除'commentStyle','#'選項每隔一行讀作一個字符串:/

有什麼想法?

回答

5

您可以使用

segarray = textscan(fid, '%f %f %f %f %[^\n]'); 

達到你想要什麼(所以不帶任何選項來textscan())。最後一個格式字符表示textscan將匹配而不是換行符的任何結尾字符。

這導致:

test.txt

667.55535 -0.00 0.000 0.0158 
667.5554 -0.01 -0.000 0.0158 
667.55545 -0.01 4.037 10.0000 
667.5555 -0.00 4.000 10.0000 #1 Trigger Camera 10 Hz #2 Trigger Camera 10 Hz 
667.55555 -0.00 4.000 10.0000 
667.5556 -0.01 4.000 10.0000 
667.5555 -0.11 4.000 12.0000 #1 Trigger Camera 11 Hz #2 Trigger Camera 12 Hz 
667.5557 -0.00 4.000 10.0000 
667.556 -0.01 4.000 10.0000 
667.55855 -0.00 4.000 10.0000 
667.5596 -0.01 4.000 10.0000 
667.55105 -0.00 4.000 10.0000 
667.5511 -0.01 4.000 10.0000 

segarray{:}

[first three columns omitted for brevity] 

ans = 
    0.0158 
    0.0158 
    10.0000  
    ...  % fourth column abbreviated 
    10.0000 
    10.0000 

ans = 
    '' 
    '' 
    '' 
    '#1 Trigger Camera 10 Hz #2 Trigger Camera 10 Hz ' 
    '' 
    '' 
    '#1 Trigger Camera 11 Hz #2 Trigger Camera 12 Hz ' 
    '' 
    '' 
    '' 
    '' 
    '' 
+1

也就是說textscan的良好行爲來了解,謝謝。 –

+0

謝謝,我曾試過這個,但是我沒有刪除'delimiter'選項...現在效果很好! – user2545669

+0

@ user2545669:是的,我也在爲此苦苦掙扎,然後我想:「我不包括一個我*也用來分割線條的角色......那是不對的!」 :) –