我有一组字符串:
20120160323001.z1.xml
20120160324001.z1.xml
20120160322001.z1.xml# 文件格式为 XXXYYYYMMDDVVV.z1.xml其中 XXX 是
# 医疗代码,YYYYMMDD 是日期,VVV 是文档
# 版本号
我想根据日期降序对字符串进行排序。因此,排序后的上述字符串将是:
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)
但它对日期排序功能没有那么有用。在日期排序功能中,我不知道比较日期字符串是否有效?
您要按与日期部分匹配的子字符串进行排序:
sub rev_by_date {
substr($b, 3, 8) <=> substr($a, 3, 8);
}
my @sorted_files = sort rev_by_date @files;
。只要文件名与您描述的格式匹配即可。
尝试
sort { substr($b, 3) cmp substr($a, 3) } @files;
这假定@files
包含字符串。如果它包含其他内容,则需要解释。 它在排序键的末尾保留文档版本,因此这将断开联系。