〜〜 2006061007, 44, 48, 57, 51, 57, 39, 61, 65, 71, 83, 83, 72, 2006061105, 46, 39, 56, 57, 61, 67, 65, 63, 73, 75, 91, 76, 2006061107, 52, 54, 50,, 53, 68, 65, 72, 54, 81, 87, 76,上の例では、セパレータとして , ( カンマ )だけが使われている。
my %rlv ; # ハッシュにデータを取り込む。 my $filename = 'F:/data/rlevel.dat' ; # ファイルを指定 open DAT, $filename or die "?? $filename ??:$!\n" ; # ファイルを開く while ( <DAT> ) { chomp ; # 行末の改行をカット next unless /^\d+/ ; # 行頭が数字でなければ次の行へ my @hr = split /,/ ; # セパレータで区切って配列に変換 # 複数の場合は split /,|:|;/ など my $ky = shift @hr ; # 配列の最初の項をキーにして $rlv{ $ky } = [ '', @hr ] ; # 後で使うときのために、0 番目を追加して # 配列のリファレンスをハッシュに保存する } close DAT ;これで、年月日・場コードをキーにしたハッシュが出来た。
# $rlv{ $hr[0] } = [ @hr ] ; # キーごとハッシュに保存も一つの方法では、保存する必要がない無駄な部分があるので、上と差替えました。
my $rid = '2006061107' ; my $rn = 9 ; my $rlevel = $rlv{$rid}[$rn] ;年月日・場コードとレースナンバーが分かればこのように該当するデータを