• ベストアンサー

入れ子で検索

初心者です。 $time,$number,$data(実験回数、データ番号、データ) という3列のデータを、実験回数毎に同じデータ番号のデータを出力するプログラムを組もうとしています。データ数は回数、データ番号毎に同数あり、データ番号は実験毎に1から振られています。 出力結果としては↓の様にしたいと思っています。 実験回数、データ番号、データ、データ、データ しかし、データ数が多すぎて、データをpushして配列にしすぎたり、データ番号をハッシュにするとPCがメモリ不足になるため、forの入れ子にして、毎回データを読む様にしました。 for(my $time_n = 1; $time_n <= $input; ++$time_n){ #$inputは最大実験回数 for(my $n = $data_num * ($time_n - 1) + 1 ; $nn <= ($data_num * $time_n) ; ++$nn){ #$data_numは実験1回分のデータ番号数、 @array = (); while ($line = <FILE>) { chomp $line; ($time,$number,$data) = split /,/, $line; if($number == $n){ push @array, $data; } } print OUT3 "$time_n,$array[0],$array[1],$array[2]\n"; } } これでやってみると、実験回数1回目しかうまく出ません。なぜでしょうか? どなたか教えて下さい。 宜しくお願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

そりゃ当然でしょう. 内側の while ループを抜けたあとで FILE から読めるってのも変でしょ? FILE をオープンしなおすか seek FILE, 0, 0; が必要じゃないですかね.

その他の回答 (1)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

$n か $nn か、タイポがあるみたいです。 use strict; use warnings; をプログラムの先頭にいれると、このようなタイポを見つけやすいですよ。

noemo91
質問者

補足

$n と$nnと申し訳ありません。質問用に作り直したので、おかしくなってます。本当はすべて$nということにしてください。 もうひとつ補足です。 ”データ番号は実験毎に1から振られています” とありますが、実験回数1回目からの通し番号です。 文法的には間違っていないと考えているのですが、何がいけないのでしょうか?

関連するQ&A