テキストファイルを繰り返し処理するときにperlでperlでどのように行を戻すことができるか教えてください。たとえば、テキストがラインに表示されていると認識し、特定のパターンとして認識されている場合は前の行に戻っていくつかのことを行い、さらに進んでください。perlで1行戻す方法
ありがとうございます。通常
テキストファイルを繰り返し処理するときにperlでperlでどのように行を戻すことができるか教えてください。たとえば、テキストがラインに表示されていると認識し、特定のパターンとして認識されている場合は前の行に戻っていくつかのことを行い、さらに進んでください。perlで1行戻す方法
ありがとうございます。通常
あなたは、戻っていないあなただけの前の行を追跡:
my $previous; # contents of previous line
while (my $line = <$fh>) {
if ($line =~ /pattern/) {
# do something with $previous
}
...
} continue {
$previous = $line;
}
あなたがの一部をバイパスしてもコピーが作成されることをcontinue
ブロック保証の利用ループボディnext
を介して。
あなたが本当にあなたがseek
とtell
でそれを行うことができます巻き戻ししたいが、それは面倒だ場合:
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;
}
my $prevline = '';
for my $line (<INFILE>) {
# do something with the $line and have $prevline at your disposal
$prevline = $line;
}
これは実際には 'continue'ブロックのために良いの使用であるかもしれません。 –