我有一组字符串:
20120160323001.z1.xml
20120160324001.z1.xml
20120160322001.z1.xml#文件格式为XXXYYYYMMDDVVV.z1.xml,其中XXX为
#medical code,YYYYMMDD是日期,VVV是文件
#version number
我想按照降序排列日期对字符串进行排序。因此,排序后的上述字符串将为:
20120160324001.z1.xml
20120160323001.z1.xml
20120160322001.z1.xml
我知道如何在Perl中对数组进行排序,但考虑到复杂的文件名,我很困惑如何按日期对这些字符串进行排序?有可能吗?
# The below sort function is not going to work for these filenames
sub rev_by_date {
$b->[9+1] <=> $a->[9+1]
}
my @sorted_files = sort rev_by_date @files;
编辑我使用此正则表达式来查找这些文件:(?^:^201.*.z1.xml)
但它对日期排序功能没有用处。在日期排序功能中,我不知道比较日期字符串是否会起作用?
答案 0 :(得分:3)
您希望按照与日期部分匹配的子字符串进行排序:
sub rev_by_date {
substr($b, 3, 8) <=> substr($a, 3, 8);
}
my @sorted_files = sort rev_by_date @files;
...只要文件名与您描述的格式匹配。
答案 1 :(得分:0)
尝试
sort { substr($b, 3) cmp substr($a, 3) } @files;
这假设@files
包含字符串。如果它包含其他内容,您需要解释它。它将文档版本保留在排序键的末尾,因此这将破坏关系。