2014-02-24 111 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