2011-01-12 16 views
2

テキストファイルを繰り返し処理するときにperlでperlでどのように行を戻すことができるか教えてください。たとえば、テキストがラインに表示されていると認識し、特定のパターンとして認識されている場合は前の行に戻っていくつかのことを行い、さらに進んでください。perlで1行戻す方法

ありがとうございます。通常

答えて

13

あなたは、戻っていないあなただけの前の行を追跡:

my $previous; # contents of previous line 
while (my $line = <$fh>) { 
    if ($line =~ /pattern/) { 
     # do something with $previous 
    } 
    ... 
} continue { 
    $previous = $line; 
} 

あなたがの一部をバイパスしてもコピーが作成されることをcontinueブロック保証の利用ループボディnextを介して。

あなたが本当にあなたがseektellでそれを行うことができます巻き戻ししたいが、それは面倒だ場合:

my $previous = undef; # beginning of previous line 
my $current = tell $fh; # beginning of current line 
while (my $line = <$fh>) { 
    if ($line =~ /pattern/ && defined $previous) { 
     my $pos = tell $fh;  # save current position 
     seek $fh, $previous, 0; # seek to beginning of previous line (0 = SEEK_SET) 
     print scalar <$fh>;  # do something with previous line 
     seek $fh, $pos, 0;  # restore position 
    } 
    ... 
} continue { 
    $previous = $current; 
    $current = tell $fh; 
} 
7
my $prevline = ''; 
for my $line (<INFILE>) { 

    # do something with the $line and have $prevline at your disposal 

    $prevline = $line; 
} 
+2

これは実際には 'continue'ブロックのために良いの使用であるかもしれません。 –

関連する問題