ソートされていないデータは
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
は基本的に私は、ネット:: SFTPがリモートサイトをオフにディレクトリ一覧を取得するよファイル名に日付スタンプに基づいてperlでファイルのリストをソートする助けが必要ローカルファイルリストと比較することができます。私は、ファイル名の日付でリストをソートしたいのですが、無視しなければならない文字列に他の情報があるため、問題が発生しています。
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を抽出し、参照として使用しようと考えましたが、使用可能な進路を作っていないので、私はそのアイデアを拭いました。
私の解決策よりもかなりプレティアです! – Andrey
ありがとう!シンプルなソリューションは、要求通りに正確に働きました。なぜ私が違和感を覚えていなかったかを見て、あなたの助けに感謝します。 – frozenthorn