ファイルの特定の箇所だけ書きかえるには?

[上に] [前に] [次に]
清4 1999/10/24(日) 03:51:56
PerlのCGIでの質問です。お願いします。
ファイルが例えば、

ドはドーナツ
レはレモン
ミはみんな

というのがあって、このうち2行目だけ書き換え、

ドはドーナツ
ファはファイト
ミはみんな

とかしたい場合、どうすればいいのでしょう?
seekかなんかではバイト数指定とありますし、
行で指定できる方法ありませんかね?

seea 1999/10/24(日) 06:13:30
全部読みこんでしまってから、行番号で指定して書き換えたのち
ファイル上書き、ではダメっすか?(^^;

巨大なファイルだと大変ですが seek()だと更に負荷が大きくなる
ことが多いです。

ふじ 1999/10/24(日) 10:19:58
何も全部読み込まなくても、

open IN, "< file";
open OUT, "> file.$$";
$line = 0;
while(<IN>){
$line ++;
if($line == 2){
print OUT, "この行は違うのよ";
}else{
print OUT $_;
}
}

close IN;
close OUT;
rename ("file", "file.bak");
rename ("file.$$", "file");

こうやって、一度別ファイルに書き出してからリネームすれば
よろしいのでは。
#巨大なファイルならなおさら。

清4 1999/10/24(日) 23:38:47
seeaさん、ふじさんありがとうございます。
勉強してみます。

[上に] [前に] [次に]