8

ファイルから読み取り、それを繰り返し処理し、その行を別のファイルに書き込む必要があります。行数がしきい値に達したら、出力ファイル ハンドルを閉じて、新しいファイル ハンドルを開きます。

以下のように、入力ファイルハンドルから行を読み取るたびに出力ファイルハンドルを開いたり閉じたりしないようにするにはどうすればよいですか?

use autodie qw(:all);

my $tot       = 0;
my $postfix   = 'A';
my $threshold = 100;

open my $fip, '<', 'input.txt';
LINE: while (my $line = <$fip>) {
    my $tot += substr( $line, 10, 5 );       
    open my $fop, '>>', 'output_' . $postfix; 
    if ( $tot < $threshold ) {
        print {$fop} $line;
    }
    else {
        $tot = 0;
        $postfix++;
        redo LINE;
    }
    close $fop;
}
close $fip;
4

1 に答える 1

11

を変更した場合にのみ、ファイルを再度開きます$postfix。また、もう少しシンプルにすることもできます。

use warnings;
use strict;
use autodie qw(:all);

my $tot       = 0;
my $postfix   = 'A';
my $threshold = 100;

open my $fop, '>>', 'output_' . $postfix; 
open my $fip, '<', 'input.txt';
while (my $line = <$fip>) {
    $tot += substr( $line, 10, 5 );       

    if ($tot >= $threshold) {
        $tot = 0;
        $postfix++;
        close $fop;
        open $fop, '>>', 'output_' . $postfix; 
    }
    print {$fop} $line;
}
close $fip;
close $fop;
于 2012-12-19T14:39:20.130 に答える