重新排列矢量Matlab中的所有字符串

时间:2017-03-10 18:14:24

标签: arrays string matlab vector ranking

我有一个大的单元格向量,包含使用

的目录中的文件名

listing = dir(['foldername','\*.xlsx'])

文件在名称中包含日期,但格式使得难以确定订单。例如,每个文件都称为dataDDMMYYY.xlsx,其中DDMMYYY是表示数据日期的数字。

我想获得一个排名从最新到最旧的文件的位置向量。一个建议是使用arrayfun删除"数据"和" xlsx"从字符串中重新排列到YYYYMMDD,使用new=[old(9:12), old(7:6), old(5:6)]之类的东西。 但是,我没有发现这些组合没有错误。 有没有一种优雅的方法来实现这一目标?

1 个答案:

答案 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 :)