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,然后读取 a10.dat 和 a11.dat 等等,而不是 a01.dat、a02.dat... 每个文件的内容都是带符号的数字。有些是逗号分隔的单列,这是一个偶数拆分。所以a01.dat 的内容是用逗号分隔的,a02.dat 的内容在一个列中。

请问我该如何处理?

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 回答