2006/02/25

perl:読み書きを同時に行う

perlを勉強中です。
んで、メモ・・・。

メモ帳でやるような書き換えと同じ動作をさせるにはどうするか、というのを考えてみました。
print A B;によるファイルへの書き込みはバッファされる(closeを行うまで実際には書き込まれない)ため、書き込み位置と読み込み位置を別々に記憶し、seekコマンドによってそれぞれ別々の位置を指定する。みたいな。

open FILE,"+<$_" or warn "can't open $_: $!"; my $line_write=0;#最初の書き込み位置を指定
while (my $line=<file>){
$line=;#ここで何らかの操作を行う。置換とか。
my $line_read=tell(FILE);
seek FILE,"$line_write",0;#書き込み位置を指定するために行先頭まで戻る
print FILE"$line";
seek FILE,"$line_read",0;#読み込み位置が狂わないようにポインタの位置を戻す
$line_write += length($line)+1;
}
close FILE;#ここでprint FILEの部分が実際に書き込まれる

0 件のコメント:

コメントを投稿