0

a01.dat、a02.dat... a51.dat という形式で名前が付けられた ".dat" の番号付きシーケンスを MATLAB にロードしようとしています。以下のコードで eval() 関数を使用しました。

%% 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 を読み取り、次に a01.dat、a02.dat の代わりに a10.dat と a11.dat を読み取ります。各ファイルの内容は符号付きの数値です。一部はコンマ区切りの単一列で、これは均等に分割されています。したがって、a01.dat のコンテンツはカンマ区切りで、a02.dat のコンテンツは 1 つの列にあります。

どうすればこれを処理できますか?

4

1 に答える 1

1

あなたの問題はファイルのソートにあるようです。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
于 2013-03-17T19:07:04.633 に答える