ファイルの読み書き
[上に]
[前に]
[次に]
素人
2000/05/25(木) 23:29:06
最近perlを始めた者です。
ファイルの読み書きなのですが、同じファイルから同時に読み込む
という処理を見たことが無いのですが、メモリをたくさん消費する
とか、負荷が大きいとか、それ以前の問題があるのでしょうか?
例えば、ファイルの先頭にデータを追加する場合、事前に何らかの
方法でロックをかけておいて、
$value = 'hogehoge';
open( DB, "<$file" ) or die;
open( LOG, "+<$file" ) or die;
$tmp = <DB>;
seek( LOG, 0, 0 );
print LOG "$value\n$tmp";
while ( <DB> ) {
print LOG "$_";
}
close( LOG );
close( DB );
このような処理をする場合などです。(下手ですが)
やはり、普通に、@logdata = <IN> などとやってから、先頭に追加
した方が、よいのでしょうか?
謎の人
2000/05/26(金) 09:37:49
>普通に、@logdata = <IN> などとやってから〜
確かに、処理速度はメモリなので速くなりますが、資源が無い時にコケます。
しかし、捨て難いので、evalでエラーチェックして、エラー時は、行単位の
処理にするとか。
evalについては、ここで検索するとゴロゴロ出てきます。
バギンズ
2000/05/26(金) 11:55:32
メモリに読み込めない場合ですが、
例え1レコードの長さが同じでも(違う場合は問題外)
レコードを挿入するのに1つのファイルで行なうのは
あまりよくないと思います。
処理の途中で何らかの原因でこけたときにはアウトですしね。
一旦テンポラリファイルに書き出してから、
古いファイルを削除して、テンポラリファイルをリネーム
するようにした方がいいと思います。
素人
2000/05/26(金) 16:36:18
[[解決]]
謎の人さん、バギンズさん、大変参考になりました。
いろいろやってみることにします。ありがとうございました。
[上に]
[前に]
[次に]