2014-10-12 271 views
1

如何在matlab中讀取包含以下文本的文本文件?Matlab-讀取不規則文本文件

B4070IC05.tif,11 
B4070IC06.tif,11,15,16,6,7 
B4070IC07.tif,13,14,4,18,9 
B4070IC08.tif,10,7 
B4070IC09.tif,4,22,7 
B4070IC10.tif,14,15,19,20,24,29,9 
B4070IC11.tif,10,11,20,21 
B4070IC12.tif,13,14,5,9 

我不知道文本的列數。

有沒有辦法將這些數據放入單元矩陣中?如何在數據加載後打印單元矩陣?

回答

1

您可以使用textscan。確保%f -s的數量足夠長以涵蓋文件中最長的一系列值。如果所有的數值都是整數,你也可以使用例如'%d'(更多細節見textscan)。

fid = fopen(filename); 
A = textscan(fid,'%s %f %f %f %f %f %f %f','delimiter',','); 
fclose(fid); 

其結果是一個單元陣列,與所述第一列中的字符串「blabla.tif」和第二到最後一列的數值。如果文件中沒有值,則它等於NaN

訪問第i列的第j個值由A{i}(j)完成。


順便說一句,該文件的最後一行沒有附加NaN,就像其他行一樣。這意味着將結果組合到單元陣列中並不是直接可能的:最後幾個陣列(可能)比第一個短。我沒有找到明顯的解決方法,所以我們必須手動完成:

idx = find(diff(arrayfun(@(idx)numel(A{idx}),1:numel(A)))); 
cA = [A{1} num2cell([horzcat(A{2:idx}) [horzcat(A{idx+1:end});nan(1,numel(A)-idx)]])];