Matlab 为什么文本扫描只读取一行

Matlab 为什么文本扫描只读取一行,matlab,textscan,Matlab,Textscan,我正在尝试使用文本扫描读取csv文件。字段用“,”分隔。我使用了下面的代码,但它只将一行数据读入矩阵W 我还尝试了dlmread(),它得到了错误的字段数 该文件是在linux下构建的,matlab是在linux下构建的 file_id = fopen('H:\data\overlapmatrices\cos.mat.10'); W = textscan(file_id, '%f', 'delimiter', ',' , 'EndOfLine', '\r\n'); fclose(file_id)

我正在尝试使用文本扫描读取csv文件。字段用“,”分隔。我使用了下面的代码,但它只将一行数据读入矩阵W

我还尝试了dlmread(),它得到了错误的字段数

该文件是在linux下构建的,matlab是在linux下构建的

file_id = fopen('H:\data\overlapmatrices\cos.mat.10');
W = textscan(file_id, '%f', 'delimiter', ',' , 'EndOfLine', '\r\n');
fclose(file_id);
clear file_id;

问题可能在于文件中如何表示行尾(另请参见Wikipedia)。虽然
\r\n
(回车符和换行符的组合)在Windows上很常见,但
\n
(仅换行符)是Linux和其他Unix系统上的标准

但正如ben所说,这可能是一种更简单的读取文件的方法。

您可能想尝试一下,它应该可以做到这一点

或者你可以做一些肮脏的事情,比如

fid = fopen( filename );
tline = fgetl(fid);
while ischar(tline) %or some other check
    %sscanf(tline...
    tline = fgetl(fid);    
end

嗨,伙计们,谢谢你们的回答。我检查结果,发现textscan()读取所有字段,但将它们全部放在一个单元格{1,1}中,该单元格本身就是一个{1,10*numberOfFields}。因此,textscan()无法识别行。内部使用dlmread()的dlmread()或csvread()也会读取所有字段,但会将行分隔在错误的位置。由于您只指定了一个匹配模式,因此需要使用1×1单元格数组:
'%f'
。每行有10个号码吗?如果要将它们拆分为单独的单元格,则需要指定要匹配的模式:
'%f%f%f%f%f%f%f%f'
(是的,这有点尴尬;不,
'EndOfLine'
不能改用)。我不确定这是否真的是一个终端问题,但您也可以尝试不包括该参数。嗨,霍奇勒,谢谢您的回复。但仍有一些问题我不清楚。1.如果“EndOfLine”不是“row”的分隔符,那么它的用途是什么?2.所以textscan()将读取整个文件,使用“delimiter”将其拆分为字段,然后使用模式逐个对字段进行处理。是这样吗?