続・競馬であそぶ 2

 日本には文化なんてあるのか考えちぅ〜 




3.騎手&厩舎のコード

TARGET を使っていない人、及び殆どの人に必要のない 項かも。
TARGET のインデックスファイルから騎手&厩舎のコードを入手します。
勿論、マスタファイルからは各騎手の戦績も入手できますが、そこまでは、、、

JVData の非蓄積系の騎手マスタでは、今週騎乗する騎手は外していないのです
が短期免許での期限後など、非登録になると抹消して提供されます。

過去の戦績のチェックや、特に騎手名などで表示に欠落が生じることがあるので
少なくとも、騎手名(or 調教師名)とコードくらいは常時準備しておきたいところで
す。必要な人より必要ない人のほうが多いでしょうが、一応スクリプトを

一応、kqcode.pl としてありますが、スクリプト名は好きなように、
コピペして使ってください。
いつも通り、html ファイルのソースでは、<> を 書き換えてあります。


#!/usr/bin/perl
# 
# 騎手&厩舎のコードが必要になることがあります。
# Usage:     perl kqcode.pl
# $Id: $
use strict;
my $qsdata = 'h:/DATA/TFJ_CHOK.IDX';            # TARGET 厩舎データ ★
my $ksdata = 'h:/DATA/TFJ_KISI.IDX';            # TARGET 騎手データ ★

my $qscode = '全調教師cd.dat';              # 出力ファイル
my $kscode = '全騎手cd.dat';                # 出力ファイル

my @szok = ( '  ', '東', '西', '地', '外' ) ;
################### ファイル出力・年月日 ###################################
my ( $sec, $min, $hour, $ddl, $mml, $yyl, $rem ) = localtime( time );
my $outtime = (time ) ;     # これはエポック数、使ってない
++$mml;     $yyl += 1900;
my $ymdd = sprintf "%d.%d.%d %2d:%02d", $yyl, $mml, $ddl, $hour, $min ;
############################################################################
open QD, $qsdata or die " 厩舎データ? $qsdata がない?:$!\n";
open OUQ, ">$qscode" ;
print OUQ "---\[ $ymdd \]\n-------------  調教師コード  --------------- \n";
############################################################################
my @data = () ;
while( <QD> ) {
    chomp ;
    my ( $qcd, $flag, $qna, $kubun ) = unpack
        '@11 A5 @16 A1 @105 A8 @194 A1', $_ ;
    ##### 以下の除外条件は用途によって変更すること #####
    next if $flag > 0 ;
    next if $kubun == 0 or $kubun > 2 ;
    my $szk = $szok[$kubun] ;
    my $qdat = join ':', $qna, $qcd ;
#   my $qdat = join ': ', $qna, $qcd, $szk ;
    print OUQ "$qdat\n" ;
}
close OUQ ;
close QD ;
#######################################################################
open KD, $ksdata or die " 騎手データ? $ksdata がない?:$!\n";
open OUK, ">$kscode" ;
print OUK "---\[ $ymdd \]\n------------- 騎手コード  --------------- \n";
while( <KD> ) {
    chomp;
    my ( $mashou, $masjiki ) = unpack '@16 A1 @25 A4', $_ ;
    # 一時免許等で抹消などの例外もあり、2003年以前に抹消された騎手はスキップ
    next if $mashou == 1 and $masjiki < 2003 ;
    my ( $kscd, $kname, $minar, $szkbun ) =
        unpack '@11 A5 @139 A8 @229 A1 @230 A1', $_ ;
    $szkbun < 3 or next ;
    my $szk = $szok[$szkbun] ;
    my $kdat = join ':', $kname, $kscd ;
#   my $kdat = join ': ', $kname, $kscd, $szk ;
    print OUK "$kdat\n" ;
}
close OUK ;
close KD ;

地方、海外騎手も全て出力するときは、以下の行をコメントアウト。一応、念のため。

#   $szkbun < 3 or next ;




4. JVData コード

JVdata のコードについて、少し書いておきます。
encoding を使っている場合と使っていない場合、下記のように異なります。

※競争記号コード

3桁ありますが、この中では特に2バイト目の性別制限に注目します。
レースデータ(RAファイル)から使う場合の例 (JVData コード表参照)

kbsTk.pl の場合 use encoding "cp932" ;

    $sexgentei = substr( $_, 510, 1 ) ;     # 2 は牝馬限定
#   $kyskigocd = substr( $_, 509, 3 ) ;     # 競争記号コード


kb_out.pl の場合

    $sexgentei = substr( $_, 619, 1 ) ;     # 2 は牝馬限定
#   $kyskigocd = substr( $_, 618, 3 ) ;     # 競争記号コード

天皇賞の結果を見ると、牝馬恐るべしという感じなので、牝馬限定のレースはレベル
が低いというのは考え違いなのかもしれません。
斤量差で収束しているなら、この部分は考える必要はないのですがどうなんでしょう。
しばらくはマイル以上のレースで、ランクを落としたまま様子をみることにします。

※馬場のコース区分

コード表にはありませんが、見逃しやすい部分なのでとりあげます。

芝コース保護 ( or 先行馬優遇? ) のため、仮柵を移動することで競馬場の形態がかなり
変ることがあります。

直線にグリーンベルトが出来ることだけに目が行きがちですが、他にも直線やコーナーの
距離が変更されます。詳細については検索等で調べてください。
レースにどの程度影響するのか、あるいは無視できるのかを考える必要はありそうです。

コース変更はスケジュール通りに行われるので、前もって知ることができます。
レースデータ(RAファイル)にコース区分があります。(例)

kbsTk.pl の場合 use encoding "cp932" ;

    $ckubun = substr( $_, 570, 1 ) ;
#   $ckubun = substr( $_, 570, 2 ) ;    # 2002年以前


kb_out.pl の場合

    $ckubun = substr( $_, 709, 1 ) ;
#   $ckubun = substr( $_, 709, 2 ) ;    # 2002年以前

710文字目です。( 注:2002年以前のコース区分は2文字 )


このあたり、あわてて?勘違いを連発していますが敢えて修正せずに行きます。
文字処理に関してはこれからも何回か出てくるはずなので、その時にでも軌道修正。


※その他のコードについて、なにかあればここに書き加えることにします。


INDEXへ トップページへ 次へ