【发布时间】:2018-03-29 12:18:45
【问题描述】:
未排序的数据
5CM00225_10_16_2017_10_54_42.xml
5CM10538_10_16_2017_11_04_18.xml
1ZM06004_10_16_2017_11_04_14.xml
5XM10010_10_17_2017_08_00_47.xml
5ZM05391_10_15_2017_08_51_07.xml
5ZM05388_10_17_2017_08_01_06.xml
5ZM00058_10_17_2017_08_00_49.xml
NMC00166_10_15_2017_08_51_06.xml
5CM10538_10_15_2017_08_51_06.xml
预期结果
NMC00166_10_15_2017_08_51_06.xml
5CM10538_10_15_2017_08_51_06.xml
5ZM05391_10_15_2017_08_51_07.xml
5CM00225_10_16_2017_10_54_42.xml
1ZM06004_10_16_2017_11_04_14.xml
5CM10538_10_16_2017_11_04_18.xml
5XM10010_10_17_2017_08_00_47.xml
5ZM00058_10_17_2017_08_00_49.xml
5ZM05388_10_17_2017_08_01_06.xml
我使用Net::SFTP 从远程站点获取目录列表并与本地文件列表进行比较。我想按文件名中的日期对列表进行排序,但由于字符串中存在我需要忽略的其他信息,我遇到了问题。
my $sftp = Net::SFTP->new( $host, %args);
my @list = $sftp->ls($path);
open(my $fh, '>', $file); # open a log file to save remote directory listing
my @sorted = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, $_=~/(\d{2})_(\d{2})_(\d{4})_(\d{2})_(\d{2})_(\d{2})/] } # unsuccessful sorting attempt
@list;
foreach my $item (@sorted) {
$i = ${item}->{filename};
print $fh "$1\n"; # prints each record to the open log file
}
close $fh;
我以前做过排序,也做过很多正则表达式,但从来没有同时进行过,而且我显然把它搞砸了,因为它没有对任何东西进行排序,也没有抛出任何错误。
我想过从每个字符串中提取 DD_MM_YYYY_hh_mm_ss 并尝试将其用作参考,但我没有取得任何可用的进展,所以我放弃了这个想法。
【问题讨论】: