年月日場の一行データ 

組織のなかで、人間であることを全うするのは難しいのか

-- Perl Scripts --

  1. ファイルの読込み
  2. 使い方の例
---------------------------------

トップページへ




0.  最初に 

下のレースレベルファイルのように
年月日・場コードの後、1〜12Rのレースレベルなどがずらり並んだファイルを
処理したいことがある。
おそらく自分専用のデータを作ると、こんな形になっていることが多いはずだ。

   〜〜
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,

上の例では、セパレータとして , ( カンマ )だけが使われている。
こういうデータは最初の項の後だけ : ( コロン )、などのようにセパレータが
複数が使われていることも多い。

どちらにしても、順序さえチャンとしていればデータとして成立している。
処理の方法はいろいろあるけれど、ここではリファレンスを使った簡単な例を、、




1.  ファイルの読込み  


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 ] ;  # キーごとハッシュに保存も一つの方法

では、保存する必要がない無駄な部分があるので、上と差替えました。
Perl って簡単ですね〜




2.  使い方の例  

ハッシュからデータを取り出す方法が分からなければ宝の持ち腐れです。
最初の例で具体的にいうと、最後の行は 2006061107 なので
2006年 6/11 の中京のデータということですね。
その日の9Rのデータは以下のようにして知ることが出来ます。

    my $rid = '2006061107' ;
    my $rn = 9 ;
    my $rlevel = $rlv{$rid}[$rn] ;

年月日・場コードとレースナンバーが分かればこのように該当するデータを
引っ張り出せるわけです。
このデータ部分は数字でなく当然、文字列でもOKです。

このやり方は効率がいいとは思いませんが、分かりやすい構造だと思います。
データ部分を工夫することで複雑な処理も可能になります。



戻る トップページへ