2014-02-24 81 views
0

我想读取一个csv文件使用textscan。这些字段与','分隔。我用下面的代码,但它只读取一行数据到矩阵W.为什么textscan只能读一行

我也试过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; 
+0

嗨,大家好脏东西,感谢您的答案。我检查结果并发现textscan()读取所有字段,但将它们全部放入{1,1},它本身是{1,10 * numberOfFields}。所以textscan()不会识别行。 – gstar2002

+0

dlmread()或csvread()在内部使用dlmread(),也读取所有字段,但是在错误位置单独分隔行。 – gstar2002

+0

由于您只指定了一种模式以匹配:1'1%单元格数组,因此''%f''可以匹配。每行有10个数字吗?如果你想把它们分割成单独的单元格,那么你需要指定匹配的模式:''%f%f%f%f%f'f(是的,这有点尴尬。不,不能用'EndOfLine')。我不确定这是否真的是行尾问题,但您也可以尝试不包含该参数。 – horchler

回答

1

这个问题可能是如何行的结尾在文件中表示(见维基百科也this article)。虽然\r\n(回车符和换行符的组合)在Windows上很常见,但\n(只是换行符)是Linux和其他Unix系统上的标准。

但正如本文所说,csvread可能是一个更简单的方法如何读取文件。

1

你可能想尝试csvread,它应该做的伎俩。

或者你可以送花儿给人不喜欢

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