The problem about dir function
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
petter
el 28 de Mzo. de 2012
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 comentario
Respuesta aceptada
Jan
el 28 de Mzo. de 2012
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
Más respuestas (1)
David Young
el 28 de Mzo. de 2012
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})
Ver también
Categorías
Más información sobre File Operations en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!