将大文本文件导入matlab(包括注释;文本扫描)

时间:2013-07-03 08:42:05

标签: matlab textscan

我试图将大的txt文件(> 1gb)导入matlab。

这是数据结构:

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','#'选项,我需要标有'#'的注释被读作单个字符串:/

任何想法?

1 个答案:

答案 0 :(得分: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 '
    ''
    ''
    ''
    ''
    ''