こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2001-08-16 12:07:28

QNo.119371

困ってます

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

こんな感じでよいのでは?

 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;

改行除去は必要に応じて行ってください。

投稿日時 - 2001-08-16 14:33:46

お礼

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

投稿日時 - 2001-08-17 09:10:46

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

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

投稿日時 - 2001-08-16 12:23:08

補足

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

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

投稿日時 - 2001-08-16 13:47:16

お礼

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

投稿日時 - 2001-08-17 09:10:10