根据复杂文件名中的字符串日期对数组进行排序



我有一组字符串:

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包含字符串。如果它包含其他内容,则需要解释。 它在排序键的末尾保留文档版本,因此这将断开联系。

最新更新