※ ChatGPTを利用し、要約された質問です(原文:Perlでのファイルの扱いでつまづいております。)
Perlでのファイルの扱いでつまづいております。
このQ&Aのポイント
Perlでのファイルの扱いについて相談です。具体的には、ファイルAを読み取り、ファイルBに処理を施したものを書き込みたいです。また、ファイルBの書き込みと同時に読み取り、条件にマッチした文を書き換えたいです。しかし、ファイルの容量が大きいため、ループを避けたいです。どのような方法がありますか?
Perlでファイルの扱い方についての質問です。具体的な要件は、ファイルAから内容を読み取り、それを加工したものをファイルBに書き込みたいというものです。また、書き込みと同時に読み取りを行い、ある条件にマッチした場合に文を書き換えたいです。ただし、ファイルの容量が大きいため、効率的な方法を知りたいです。
Perlのファイル処理に関する問題です。ファイルAから読み取り、それを処理してファイルBに書き込みたいです。さらに、書き込みと同時にファイルBを読み取り、条件にマッチした文を書き換えたいです。ただし、ファイルの容量が大きいので、効率的な方法を教えてください。
やりたいことは、"ファイルAを読み取り、その内容に処理を施したものをファイルBに書き込むという処理"です。
その上で、"ファイルBに書き込んだ内容を書き込みと同時に読み取り、
その上である条件にマッチした文を書き換える"といったことを実現したいです。
もともとのファイルの容量が非常に大きいので、何度もループを使うといったことはなるべく避けたいため、
ファイルBの書き込み・読み込み・書き換えを同時に行いたいのですが、
そもそもそういったことは可能なのでしょうか。
※また、もともとのファイルの容量が非常に大きいので配列を使わず行う、
ということが前提条件としてあります。
現在のスクリプトの簡略化したものが以下となります。
open LOGFILE,"< /○○/ファイルA" || die("die");
open NEWLOG,"+< /△△/ファイルB" || die("die");
$new = <NEWLOG>;
while($yomitori = <LOGFILE>){
if(ある条件1){
print NEWLOG "$kakikomi\n";
}
if(ある条件2){
ファイルBの書き換えの処理
$new =~s/\n/ $kakikae\n/;
print NEWLOG "$new";
}
}
close(NEWLOG);
close(LOGFILE);
上記スクリプトで、ファイルAからファイルBへの書き込み、ファイルBの読み取りまではできておりますが、
ファイルBの書き換えは実現しておりません。
以上、お詳しい方がいらっしゃいましたら宜しくお願い致します。
お礼
>my $new = <$NEWLOG>;# ファイルB、先頭の1行しか読んでませんが本当にいいん>でしょうか・・? 実際にはwhileを使い、順繰り読み込むようにしていました、惑わせてしまいすみません。 >排他処理は書き込みを行うルーチンだけでなく、読み込み専用のルーチンにも入れておか>ないといけません 注意していただくまでは、排他処理を考えておりませんでした。 ありがとうございます。 全体を通して、初心者にもわかりやすいよう丁寧に教えていただき、感謝いたします。 お陰で、現時点でファイルCに希望とするログに近いものを書き出すことができるようになりました。 あとはちょっとした修正と、処理速度を上げていくだけです。 本当にありがとうございました!