- 締切済み
perlで、後ろの行を読んで、前の行に書き込むには?
perl初心者です。 後ろの行を読んで、戻って、指定の行に、書き込む方法が、よくわかりません。 下記のようなファイルを読み込んで ---------------------------- アルファベット= 1A 2B 3C アルファベット= 1A 2B アルファベット= 1A 2B 3C 4D 5E 6F ------------------------------ 下記のように、「アルファベット=」にアルファベットを入れるには、どうしたらいいでしょうか? ------------------------------ アルファベット=ABC 1A 2B 3C アルファベット=AB 1A 2B アルファベット=ABCDEF 1A 2B 3C 4D 5E 6F -------------------------------- よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kumoz
- ベストアンサー率64% (120/185)
後の行のデータを前の行の末尾に追加するには、1行毎の処理ができませんので、 一時的な配列を利用する等になるかと思います。以下は、簡単なコード例です。 use strict; my @block = (); while (my $line = <DATA>) { if ($line =~ /^アルファベット/) { print "$block[0]\n", @block[1 .. $#block] if @block; chomp $line; @block = ($line); } else { $block[0] .= substr($line, 1, 1); push @block, $line; } print "$block[0]\n", @block[1 .. $#block] if eof; } __DATA__ アルファベット= 1A 2B 3C アルファベット= 1A 2B アルファベット= 1A 2B 3C 4D 5E 6F
- zxcv0000
- ベストアンサー率56% (111/196)
すでにあるファイルの末尾にデータ(文字)の追加はできますが、末尾以外への挿入は Perlの入出力機能では出来ません。 普通は、No.1さんのおっしゃる様にファイル全部を読み込んで変更してファイル全部を書き戻す処理になるでしょう。 処理速度を上げたいなら工夫の余地はありますが、プログラミングの初心者さんがトライすべきテーマでは無いと思います。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
> 後ろの行を読んで、戻って、指定の行に、書き込む方法 そのままのアルゴリズムで。 書き込むときに1行分のlengthを変数に取っておき、 書き直したい行を発見したらseekで戻る。
- lv4u
- ベストアンサー率27% (1862/6715)
とりあえずお手軽に処理するなら、 ※メモリに全てを読み込んで処理をしたあと、メモリから元のファイルに上書きする。 って方法があります。最近のPCはメモリーも大きいですし、仮想記憶の機能もあるので、そうとう大きなファイルをメモリーで処理しても、問題ないでしょう。 なお、一発でうまくいくとは限らないので、とりあえず別ファイルに書き出し、OKになったらリネームする方法がいいかもしれません。