Rearranging filenames with extension .number (Ordering)
    5 views (last 30 days)
  
       Show older comments
    
I've got batches of data that end in MRDC.number (MRA slices e.g. i3078011.MRDC.205) and I want to order them by filename extensions i.e. MRDC.20,MRDC.21,MRDC.22,MRDC.23
Trouble is sort_nat for example reads the initial numbers not the extension
They go from MRDC.1 to MRDC.200ish ,but may vary
I've attached a typical filename cell array.
Cheers
Accepted Answer
More Answers (2)
  Ingrid
      
 on 24 Apr 2015
        if all your filenames have the same length (which seem to be the case for the file in attachment) you could do this
fin = cellfun(@(x) x(15:end),filen,'UniformOutput',false);
fin = str2double(fin);
[~,idx] = sort(fin);
sortedFileNames = filen(idx);
1 Comment
  Ingrid
      
 on 24 Apr 2015
				alternativaly, if the size of the filename is not the same for all files you could use this
fin = cellfun(@(x) regexp(x,'\.','split'),filen,'UniformOutput',false);
fin = cellfun(@(x) x{end},fin,'UniformOutput',false);
fin = str2double(fin);
[~,idx] = sort(fin);
sortedFileNames = filen(idx);
  Stephen23
      
      
 on 24 Apr 2015
        
      Edited: Stephen23
      
      
 on 24 Apr 2015
  
      There are several natural order sorting functions on MATLAB File Exchange, and they often use file-names in their examples... but they all suffer from the same problem: that extension separator character just keeps getting in the way!
To avoid this problem I created natsortfiles, which sorts the file-names and file-extensions separately. Take a look at the code and you will find it easy to adapt for your purposes.
It never occurred to me that someone might want to sort only by file-extension, but that would be a useful option to add...
Alternatively, because the extensions consist entirely of digits, simply split these from the names and sort them numerically:
>> load('filenames.mat')
>> [pth,nam,ext] = cellfun(@fileparts,filen,'UniformOutput',false);
>> [~,idx] = sort(cellfun(@(s)sscanf(s,'.%i'),ext));
0 Comments
See Also
Categories
				Find more on Live Scripts and Functions in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

