• ベストアンサー

<IN>のx行目を操作したい

open(IN, $FILE);した時に、 <IN>のx行目とn行目だけを取り出したいと思っています。 これまでは@array=<IN>;としてきたのですが ファイルが大きくなると非常に遅くなってしまいます。 @arrayに<IN>を格納することなく処理をする事は出来るのでしょうか。 よい方法がありましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.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; 改行除去は必要に応じて行ってください。

ryogoku
質問者

お礼

解決することが出来ました。 ありがとうございました。

その他の回答 (1)

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.1

単純に考えて、例えば $x = <IN>; をループで回しながら x 行目と n 行目の 場合のみ必要な処理を行い、それ以外を捨てる、というのではダメなのでしょうか?

ryogoku
質問者

お礼

解決することが出来ました。 ありがとうございました。

ryogoku
質問者

補足

レスありがとうございます。 最初青らくだ本などを読んで、 ---------------------- open(IN, $file); $. == $x and $line = $_ while <IN>; close(IN); print $line; ---------------------- というようにしてみたのですが これだとx行目は処理できますがn行目を指定できないので 困ってしまい質問しました。 よろしくお願いします。 また@arrayだと一度格納してしまえば 配列を空にしてしまうまで$array[$x]のように参照できるのに、 上記のものでは処理をおこなう度に、 毎回ファイルをオープンしなければならないのですが 本当にこれで配列に格納した場合より メモリが節約されているのでしょうか…?