2013-03-17 33 views
0

我正在嘗試將以.a.dat,a02.dat ... a51.dat形式命名的「.dat」的編號序列加載到MATLAB中。我用下面的代碼使用了eval()函數。如何將編號爲.dat文件的序列讀取到MATLAB中

%% To load each ".dat" file for the 51 attributes to an array. 

a = dir('*.dat'); 

for i = 1:length(a) 
eval(['load ' a(i).name ' -ascii']); 
end 

attributes = length(a); 

我遇到了問題,因爲我無法輕鬆操縱使用eval函數加載的數據。我發現社區強烈反對使用eval。我用下面的代碼使用了csvread()。

% Scan folder for number of ".dat" files 
datfiles = dir('*.dat'); 

% Count Number of ".dat" files 
numfiles = length(datfiles); 

% Read files in to MATLAB 
for i = 1:1:numfiles 
    A{i} = csvread(datfiles(i).name); 
end 

csvread()適用於我,但它讀取文件但在讀取文件時會擾亂順序。它首先讀取a01.dat,然後讀取a10.dat和a11.dat等,而不是a01.dat,a02.dat ...每個文件的內容都是帶符號的數字。有些是逗號分隔和單列,這是一個分裂。所以a01.dat的內容是用逗號分隔的,而a02.dat的內容在一個列中。

請問我該如何處理?

回答

1

你的問題似乎是文件的排序。借鑑了question on mathworks,這會幫助你:

datfiles = dir('*.mat'); 
name = {datfiles.name}; 
[~, index] = sort(name); 
name = name(index); 

然後可以循環只有name

% Read files in to MATLAB 
for i = 1:1:numfiles 
    A{i} = csvread(name{i}); 
end 
+0

感謝Dedek馬茲。這工作得很好。 – Ade 2013-03-17 19:27:09