0

私はこれについて完全な初心者ですが、すべての助けに感謝します。このスクリプトを実行して、特定のシーケンスに一致する日付付きサブディレクトリ内の文字列を検索し、結果を新しいファイルに出力しています。サブディレクトリの名前は「20110101」、「20110102」、「20110103」などです。文字列はうまく検出されますが、新しいファイルに出力するときに順序が乱れます。20110107 の前に 20110129 を出力します。これを修正して、サブディレクトリにある順序で文字列を出力するにはどうすればよいですか? 助けてくれてありがとう。

use strict;
use warnings;
use File::Find;

my $starting_path = "/d2/aschwa/test";

open my $output, '>>', 'KDUX_METARS.txt' or die $!; #open file to write data

print STDOUT "Finding METAR files\n";

find(

    sub {
        return unless -e -f;
        if ( open my $infile, '<', $_ ) {
            while ( my $line = <$infile> ) {
                print $output $line if $line =~ m/(KDUX ....05Z|KDUX ....55Z)/;
           }
        }
        else {
            warn "$_ couldn't be opened: $!";
        }
    },
    $starting_path
);
close $output or die $!;
4

1 に答える 1

3
perl -E 'use File::Find; find({wanted => sub {say $File::Find::name}, preprocess => sub { reverse sort @_} }, ".")'
.
./20110129
./20110107
./20110101

perl -E 'use File::Find; find({wanted => sub {say $File::Find::name}, preprocess => sub { sort @_} }, ".")'
.
./20110101
./20110107
./20110129

File::Find::find 関数を find(\%opts, @dirs); のように呼び出すことができます。

$opts{wanted} == すべての要素に対して実行されるアクション ( find(\&sub, @dirs) が呼び出されたときの &sub と同等)

$opts{preprocess} == リスト全体に対するアクション

于 2013-10-25T20:55:41.960 に答える