4

我正在尝试将大 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','#' 选项,我需要标记为 '#' 的注释,每第二行读取为单个字符串:/

有任何想法吗?

4

1 回答 1

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 '
    ''
    ''
    ''
    ''
    ''
于 2013-07-03T10:28:39.537 回答