hi every one:
when I use dir function to get the same type files of a file, (the file name is 10.png, 20.png, 50.png, 100.png, 200.png, 300.png, 1000.png), then I find the sequence is 10.png, 100.png, 1000.png, 20.png, 200.png.....
but what I want to get is the sequence like 10.png, 20.png, 50.png, 100.png, 200.png, 300.png, 1000.png
so please give me some suggestion or any help
thanks a lot

1 Kommentar

Stephen23
Stephen23 am 27 Mai 2015
Bearbeitet: Stephen23 am 18 Apr. 2021
A simple solution is to use my FEX submission natsortfiles
>> S = dir('*.txt');
>> S.name
ans =
'1.txt'
ans =
'10.txt'
ans =
'2.txt'
>> S = natsortfiles(S); % alphanumeric sort by filename
>> S.name
ans =
'1.txt'
ans =
'2.txt'
ans =
'10.txt'

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Jan
Jan am 28 Mär. 2012

1 Stimme

The most practical method is to use "0010" instead of "10". Then the numerical order equals the lexicographical order.
While there are some FEX submissions for "natural sorting", you can sort the names manually also:
List = dir('*.png');
Name = {List.name};
S = sprintf('%s,', Name{:}); % '10.png,100.png,1000.png,20.png, ...'
D = sscanf(S, '%d.png,'); % [10; 100, 1000; 20; ...]
[sortedD, sortIndex] = sort(D); % Sort numerically
sortedName = Name(sortIndex); % Apply sorting index to original names

1 Kommentar

petter
petter am 28 Mär. 2012
Thanks a lot
Indeed I use the practical method mentioned by you, and solve the problem
I can,t understand clearly the method that you introduce.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

David Young
David Young am 28 Mär. 2012

0 Stimmen

You could do something like this:
dstruct = dir('*.png');
names = {dstruct.name};
maxlen = max(cellfun(@length, names));
padname = @(s) sprintf(['%0' num2str(maxlen) 's'], s);
namesPadded = cellfun(padname, names, 'UniformOutput', false);
[~, sortOrder] = sort(namesPadded);
dstruct = dstruct(sortOrder);
The structure is now in the order you want. To see this, you can execute
disp({dstruct.name})

1 Kommentar

petter
petter am 28 Mär. 2012
Thanks to David
your method is so clever,I like it.
And I use it to absolutely solve my problem.
Thanks again.

Melden Sie sich an, um zu kommentieren.

Kategorien

Gefragt:

am 28 Mär. 2012

Bearbeitet:

am 18 Apr. 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by