- ベストアンサー
<IN>のx行目を操作したい
open(IN, $FILE);した時に、 <IN>のx行目とn行目だけを取り出したいと思っています。 これまでは@array=<IN>;としてきたのですが ファイルが大きくなると非常に遅くなってしまいます。 @arrayに<IN>を格納することなく処理をする事は出来るのでしょうか。 よい方法がありましたら教えて下さい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでよいのでは? open IN, $file or die; while (<IN>) { if ($. == $x) { chomp($line_x = $_); } elsif ($. == $n) { chomp($line_n = $_); } } close IN; print $line_x; print $line_n; 改行除去は必要に応じて行ってください。
その他の回答 (1)
- ysk6406
- ベストアンサー率40% (237/589)
単純に考えて、例えば $x = <IN>; をループで回しながら x 行目と n 行目の 場合のみ必要な処理を行い、それ以外を捨てる、というのではダメなのでしょうか?
お礼
解決することが出来ました。 ありがとうございました。
補足
レスありがとうございます。 最初青らくだ本などを読んで、 ---------------------- open(IN, $file); $. == $x and $line = $_ while <IN>; close(IN); print $line; ---------------------- というようにしてみたのですが これだとx行目は処理できますがn行目を指定できないので 困ってしまい質問しました。 よろしくお願いします。 また@arrayだと一度格納してしまえば 配列を空にしてしまうまで$array[$x]のように参照できるのに、 上記のものでは処理をおこなう度に、 毎回ファイルをオープンしなければならないのですが 本当にこれで配列に格納した場合より メモリが節約されているのでしょうか…?
お礼
解決することが出来ました。 ありがとうございました。