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

A 回答 (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;

改行除去は必要に応じて行ってください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/17 09:10

単純に考えて、例えば $x = <IN>; をループで回しながら x 行目と n 行目の


場合のみ必要な処理を行い、それ以外を捨てる、というのではダメなのでしょうか?

この回答への補足

レスありがとうございます。
最初青らくだ本などを読んで、
----------------------
open(IN, $file);
$. == $x and $line = $_ while <IN>;
close(IN);
print $line;
----------------------
というようにしてみたのですが
これだとx行目は処理できますがn行目を指定できないので
困ってしまい質問しました。
よろしくお願いします。

また@arrayだと一度格納してしまえば
配列を空にしてしまうまで$array[$x]のように参照できるのに、
上記のものでは処理をおこなう度に、
毎回ファイルをオープンしなければならないのですが
本当にこれで配列に格納した場合より
メモリが節約されているのでしょうか…?

補足日時:2001/08/16 13:47
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/17 09:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング