- ベストアンサー
Perlで行をさかのぼって削除する方法を教えて下さい
ActivePerl5.8.4にて、以下の規則に従い、テキストファイルから複数行を削除しようとしています。 ・1つの行はアルファベットと数字から成っており、アルファベットはA,B,Cの順に出現する。A,B,Cの行で一かたまり。 ・数字部分が全く同じかたまりが出現すると、後で出現したかたまりを削除する。 ・数字部分が全く同じかたまりが出現するときは、必ず連続で出現する。 下のような感じです。(スペースの都合で「\n」をつけましたが、実際には改行までが1行に書かれているテキストファイルを読み込みます。) 【入力】 A 1\nB 2\nC 3\nA 1\nB 2\nC 3\nA 1\nB 2\nC 2[EOF] 【出力】 A 1\nB 2\nC 3\nA 1\nB 2\nC 2[EOF] すぐに思いついた方法はこんな感じです(まだ勉強不足のため、コードではあらわせません)。 1.ファイルの1行ずつ読み込む 2.A,B,Cをキーにして数字をハッシュに格納 3.2回目のCまで読み込んだところで1つ前のハッシュと比較 4.AからCの数字がすべて同じだった場合に、現在の行(2つめのCを読み込んでいる)とその前2行を削除(実際にはnextでprintを飛ばす) ところが、4の、さかのぼって行を削除する方法が思いつきません。 なにぶんperlの勉強を始めたばかりで突っ込み所満載のロジックだとは思いますが、解決策をぜひご教示ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- thatsthat
- ベストアンサー率55% (15/27)
回答No.4
- karumakaruma
- ベストアンサー率65% (65/100)
回答No.3
- tthe_mine
- ベストアンサー率46% (19/41)
回答No.1
お礼
ご回答をありがとうございました。この手の仕様が厄介だということすら、認識できていませんでした。ご回答の例は、大変わかりやすくてためになりました。活用させていただこうと思います。