MATLAB: How to sort filenames containing text and numbers in numerical order in MATLAB

dirnatural sortsorting routinestext manipulation

I have a series of .png files in a folder whose names are the following;
(A)Test_Nom_BAUD1.png
(A)Test_Nom_BAUD7.png
(A)Test_Nom_BAUD8.png
(A)Test_Nom_BAUD10.png
(A)Test_Nom_BAUD11.png
In reading the MATLAB documentation, I understand the dir function sorts strings in ASCII dictionary order. And since the files I'm using have no leading zeros, this is a problem. This is exactly what I'm seeing when I use the dir function:
A = dir('*.png');
(A)Test_Nom_BAUD1.png
(A)Test_Nom_BAUD10.png
(A)Test_Nom_BAUD11png
(A)Test_Nom_BAUD7.png
(A)Test_Nom_BAUD8.png
But what I need is this;
A = dir('*.png');
(A)Test_Nom_BAUD1.png
(A)Test_Nom_BAUD7.png
(A)Test_Nom_BAUD8.png
(A)Test_Nom_BAUD10.png
(A)Test_Nom_BAUD11.png
I know this can be done if the filenames contain only numbers.
But is it possible to sort these filenames (in numerical order) using existing text manipulation and sorting routines in MATLAB? If so, how?

Best Answer

If, for any reason, you cannot install this function, you can sort your filenames as follows:
[~, reindex] = sort( str2double( regexp( {A.name}, '\d+', 'match', 'once' )))
A = A(reindex) ;
Note that it assumes that all files have the same base name. If you have to deal with various base names, then you need the function mentioned in the other answers, or to work a little more on the sorting.