我有一个大的单元格向量,包含使用
的目录中的文件名 listing = dir(['foldername','\*.xlsx'])
。
文件在名称中包含日期,但格式使得难以确定订单。例如,每个文件都称为dataDDMMYYY.xlsx,其中DDMMYYY是表示数据日期的数字。
我想获得一个排名从最新到最旧的文件的位置向量。一个建议是使用arrayfun
删除"数据"和" xlsx"从字符串中重新排列到YYYYMMDD,使用new=[old(9:12), old(7:6), old(5:6)]
之类的东西。
但是,我没有发现这些组合没有错误。
有没有一种优雅的方法来实现这一目标?
答案 0 :(得分:2)
您可以根据指定的格式(在您的情况下为datenum
)使用为每个日期输出数字(较小=较旧,较大=较新)的函数ddmmyyyy
。然后,您可以使用这些数字对日期进行排序。此方法假定所有文件都是.xls
或.xlsx
,并且其名称在实际日期之前以data
开头:
listing = dir(['fildername','\*.xls*']); % list all xls and xlsx files in directory
names = {listing.name}; % cell array with names only
[~,dates,~] = cellfun(@fileparts, names, 'uni', 0); % apply fileparts to every cell
dates = cell2mat(dates'); % convert to char matrix (all the string have to be equally long)
dates = dates(:,5:end); % remove 'data' from each string
new_dates = datenum(dates, 'ddmmyyyy'); % extract date number
[sorted_new_dates, index] = sort(new_dates, 'descend'); % sort from newest to oldest
然后,您可以使用index
处理从最新到最旧的原始文件。
listing(index).name % print sorted filenames :)