• 締切済み

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 -------------------------------- よろしくお願い致します。

みんなの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.4

後の行のデータを前の行の末尾に追加するには、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)
回答No.3

すでにあるファイルの末尾にデータ(文字)の追加はできますが、末尾以外への挿入は Perlの入出力機能では出来ません。 普通は、No.1さんのおっしゃる様にファイル全部を読み込んで変更してファイル全部を書き戻す処理になるでしょう。 処理速度を上げたいなら工夫の余地はありますが、プログラミングの初心者さんがトライすべきテーマでは無いと思います。

回答No.2

> 後ろの行を読んで、戻って、指定の行に、書き込む方法 そのままのアルゴリズムで。 書き込むときに1行分のlengthを変数に取っておき、 書き直したい行を発見したらseekで戻る。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

とりあえずお手軽に処理するなら、 ※メモリに全てを読み込んで処理をしたあと、メモリから元のファイルに上書きする。 って方法があります。最近のPCはメモリーも大きいですし、仮想記憶の機能もあるので、そうとう大きなファイルをメモリーで処理しても、問題ないでしょう。 なお、一発でうまくいくとは限らないので、とりあえず別ファイルに書き出し、OKになったらリネームする方法がいいかもしれません。

専門家に質問してみよう