user547550
user547550

Reputation:

MATLAB missorting structure array when using dir command

I have a bunch of Excel data, called "1.xls", "2.xls"... until "15.xls", each with 141x44 sets of data. I am using the dir function to import the data into MATLAB.

Here I am importing the first and second columns from each file into A and B matrix.

  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

My problem is, when I use the dir command, for some reason MATLAB missorts the data, in that the ascending order of the prob15 structure array will be "1.xls", "10.xls", "11.xls"... instead of normal ascending numerical order ("1.xls", "2.xls, ...). Anyone know how I could fix this? Thanks.

Upvotes: 0

Views: 911

Answers (1)

engineerC
engineerC

Reputation: 2868

The order you are seeing is called ascii-betical order and is the normal sorting order for all kinds of utilities, and evidently your OS directory listing program as well, since matlab just farms this command out to the OS.

If you want a numerical sort, you can convert the filename strings to numbers and sort those. Before I wrote it myself some light googling yielded this which you can easily adapt to your problem:

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);

Upvotes: 3

Related Questions