【发布时间】:2010-12-26 12:08:32
【问题描述】:
从文本文件导入数据时,MATLAB 是否将任何字符或字符组合解释为 cmets?当它在一行的开头检测到它时,会知道所有的行都被忽略了吗?
我在一个文件中有一组点,如下所示: 正如你所看到的,他似乎不太了解他们。除了 // 我可以使用 MATLAB 知道它可以忽略之外还有什么?
谢谢!
【问题讨论】:
标签: file matlab file-io import comments
从文本文件导入数据时,MATLAB 是否将任何字符或字符组合解释为 cmets?当它在一行的开头检测到它时,会知道所有的行都被忽略了吗?
我在一个文件中有一组点,如下所示: 正如你所看到的,他似乎不太了解他们。除了 // 我可以使用 MATLAB 知道它可以忽略之外还有什么?
谢谢!
【问题讨论】:
标签: file matlab file-io import comments
你试过%,MATLAB 中的默认注释字符吗?
正如 Amro 指出的那样,如果您使用 importdata 这将起作用。
【讨论】:
其实你的数据是不一致的,因为每行的列数必须相同。
除此之外,使用 '%' 作为 cmets 将被 importdata 正确识别:
%12 31
12 32
32 22
%abc
13 33
31 33
%ldddd
77 7
66 6
%33 33
12 31
31 23
data = importdata('file.dat')
否则使用 textscan 指定任意注释符号:
//12 31
12 32
32 22
//abc
13 33
31 33
//ldddd
77 7
66 6
//33 33
12 31
31 23
fid = fopen('file2.dat');
data = textscan(fid, '%f %f', 'CommentStyle','//', 'CollectOutput',true);
data = cell2mat(data);
fclose(fid);
【讨论】:
如果使用textscan函数,可以将CommentStyle参数设置为//或%。试试这样的:
fid = fopen('myfile.txt');
iRow = 1;
while (~feof(fid))
myData(iRow,:) = textscan(fid,'%f %f\n','CommentStyle','//');
iRow = iRow + 1;
end
fclose(fid);
如果每行有两个数字,这将起作用。我注意到在您的示例中,每行的数字数量有所不同。有些行只有一个数字。这代表您的数据吗?如果每行中的列数不一致,则必须以不同方式处理。
【讨论】: