gpt4 book ai didi

arrays - 需要帮助根据文件名中的时间戳对文件列表进行排序

转载 作者:行者123 更新时间:2023-12-02 09:13:24 24 4
gpt4 key购买 nike

未排序的数据

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 并尝试将其用作引用,但我没有取得任何可用的进展,所以我放弃了这个想法。

最佳答案

这会产生您想要的输出。它将下划线或句点上的每一行拆分为一个列表,然后仅按照您想要的顺序保留您想要的“列”。它保留年份,后跟月份、日期等。然后它将列表元素连接到一个新的日期字符串中,然后根据日期对行进行排序。

use warnings;
use strict;

my @list;
while (<DATA>) {
chomp;
push @list, $_;
}

my @sorted = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, join '', (split /[_.]/)[3,1,2,4,5,6] ] }
@list;

__DATA__
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

我相信您的代码失败了,因为它按照列表中出现的顺序(即月、日等)返回列表。

关于arrays - 需要帮助根据文件名中的时间戳对文件列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com