Perl でファイル名のリストを並べ替える方法を見つけようとしています。
各ファイルは、Perl の PDF::Reuse を使用して単一の pdf にマージしている PDF ファイルです。
各 PDF ファイル名には 2 つの一意の識別子があります。1) はアカウント ID、2) レポートの種類です。
例:
C1234.lfs.pdf
C1234 = アカウント ID lfs = レポート タイプ。
各アカウントには、特定の順序にする必要がある複数のレポートが含まれる場合があります。
レポートの種類の順序を指定するにはどうすればよいですか? 1 つの pdf ファイルにマージする前に、スクリプトが各アカウント レポートを並べ替える順序を確認する構成ファイルを使用したいと考えています。希望する注文は次のとおりです。
AcctId.lau.pdf AcctId.lsm.pdf AcctId.lad.pdf AcctId.lfs.pdf AcctId.lbe.pdf
@PDFS = (<*l*.pdf>);
@REVERSED_LIST = reverse(@PDFS);
prFile($OutPut);
for my $pdf (@REVERSED_LIST) {
next if($pdf eq $OutPut);
&Logit("Adding $pdf to $OutPut");
prDoc($pdf);
}
prEnd();
これを正しく説明していない場合は申し訳ありませんが、助けや提案をいただければ幸いです。
テスト中の新しいコードが正しい順序を示していません。
@PDFS = (<*l*.pdf>);
my %lsfOrder = (lua=>0, lsm=>1, lfw=>2);
@SORTED = map { $_->[0] } # Take just the original file name
sort {
$a->[1] cmp $b->[1] ?
$a->[1] cmp $b->[1] : # compare by account id if different
$lsfOrder{$a->[2]} <=> $lsfOrder{$b->[2]}
}
map {
[ $_, split('.', $_) ] # split into id/type once at the beginning
} @PDFS;
prFile($OutPut);
for my $pdf (@SORTED) {
next if($pdf eq $OutPut);
&Logit("Adding $pdf to $OutPut");
#print "Adding $pdf to $OutPut\n";
prDoc($pdf);
}
prEnd();