Need an Elegant Sorting Solution for Directory File Names

2 vues (au cours des 30 derniers jours)
John Cruce
John Cruce le 9 Juil 2023
Modifié(e) : Voss le 9 Juil 2023
I have a directory of filenames, (within a files structure array) structured like this:
cdef2.20140101.pdef.txt
cdef2.20140102.pdef.txt
....
pdef.gdef.201300101-20130105.txt
pdef.gdef.201300106-20130110.txt
....
I need to reorder these (ascending order from oldest to newest) according to the dates embedded within these file names which are formatted like YYYYMMDD. I've explored several options, but I'm seeking an elegant solution without do loops. Any tips or suggestions would be appreciated.
  3 commentaires
John Cruce
John Cruce le 9 Juil 2023
Needing to sort by the first date in pdef.gdef.201300101-20130105.txt (i.e., 20130101). I considered running a shell script to rename the files but trying not to add another step.
Sandeep Mishra
Sandeep Mishra le 9 Juil 2023
Can we assume that there exist only two type of files?
One which starts with cdef2 and one which starts with pdef?

Connectez-vous pour commenter.

Réponse acceptée

Voss
Voss le 9 Juil 2023
Modifié(e) : Voss le 9 Juil 2023
filenames = { ...
'cdef2.20140101.pdef.txt'; ...
'cdef2.20140102.pdef.txt'; ...
'pdef.gdef.20130101-20130105.txt'; ...
'pdef.gdef.20130106-20130110.txt'}
filenames = 4×1 cell array
{'cdef2.20140101.pdef.txt' } {'cdef2.20140102.pdef.txt' } {'pdef.gdef.20130101-20130105.txt'} {'pdef.gdef.20130106-20130110.txt'}
dates = regexp(filenames,'\d{8}','match','once');
[~,idx] = sort(dates);
sorted_filenames = filenames(idx)
sorted_filenames = 4×1 cell array
{'pdef.gdef.20130101-20130105.txt'} {'pdef.gdef.20130106-20130110.txt'} {'cdef2.20140101.pdef.txt' } {'cdef2.20140102.pdef.txt' }

Plus de réponses (0)

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by