我有一堆Excel数据,称为“1.xls”,“2.xls”......直到“15.xls”,每个都有141x44组数据。我正在使用dir函数将数据导入MATLAB。
这里我将每个文件的第一列和第二列导入A和B矩阵。
prob15 = dir(fullfile('C:\Users\Bo Sun\Documents\MATLAB\prob15'),'.xls');
global A B
A=zeros(141,length(prob15));
B=zeros(141,length(prob15));
for i=1:length(prob15)
A(:,i) = xlsread(prob15(i).name,'A:A');
B(:,i) = xlsread(prob15(i).name,'B:B');
end
我的问题是,当我使用dir命令时,出于某种原因,MATLAB会错过数据,因为prob15结构数组的升序将是“1.xls”,“10.xls”,“11.xls “...而不是正常的升序数字顺序(”1.xls“,”2.xls,......)。任何人都知道如何解决这个问题?谢谢。
答案 0 :(得分:3)
您看到的顺序称为ascii-betical order,是所有类型实用程序的正常排序顺序,显然也是您的操作系统目录列表程序,因为matlab只是将此命令发送到操作系统。
如果需要数字排序,可以将文件名字符串转换为数字并对其进行排序。在我自己编写之前,一些轻微的谷歌搜索产生了this,您可以很容易地适应您的问题:
list = dir(fullfile(cd, '*.mat'));
name = {list.name};
str = sprintf('%s#', name{:});
num = sscanf(str, 'r_%d.mat#');
[dummy, index] = sort(num);
name = name(index);