我试图将大的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','#'选项,我需要标有'#'的注释被读作单个字符串:/
任何想法?
答案 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 '
''
''
''
''
''