ファイル操作

[上に] [前に] [次に]
初心者 1999/08/22(日) 00:04:03
Perlでファイルから1レコードづつ読み込んで、
あるレコードを書き換えたいのですが
どのようにすれば書き換えられるかわかりません
申し訳ありませんが、教えて頂けないでしょうか?

きふね 1999/08/22(日) 02:17:11
open(IN, "$logfile");
@lines = <IN>;
close(IN);

$lines[数字] = $nanika;

@lines書き込み

でどうですか?
(意味取り違えてたらすみません)

ふじ 1999/08/22(日) 09:28:21
1レコード1行、というファイルなら、

open (IN, "< $logfile") or die $!;
open (OUT, "> $logfile.tmp") or die $!;
while(<IN>){
  if(書き換えたいレコードなら){
    print OUT 書き換えたデータ;
  }else{
    print OUT;
  }
}
close IN;
close OUT;
rename $logfile , "$logfile.bak";
rename "$logfile.tmp" , $logfile;

とか。いったんテンポラリファイルに書き出して、リネームする。


ところで、サイズが大きくなる可能性のあるファイルに対して
> @lines = <IN>;
これはお勧めしません。

特定の一行を書き換えたい時にこうするのはメモリの無駄(余計な負荷)
でしかないので、注意しましょう。

きふね 1999/08/22(日) 10:55:53
なるほど、勉強になりました。(^^)

初心者 1999/08/22(日) 19:06:48
[[解決]]
きふねさん、ふじさん
ありがとうございました。
実現方法が分かりました。
勉強になりました。

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