kbsTk.pl の 使いかた

JVデータを処理・出力します。


  1. 動作環境
  2. はじめに
  3. 使いかた
  4. 改造は
  5. その他の注意点
  6. 注:
  7. 更新履歴
  8. 参考
  9. ホームページ

-- ここでの記事は適宜、加筆修正の予定です。項目リンクが間違えていました。恥; --


1.  動作環境  

  Windows XP/2000
  Perl 5.8 がインストールされている。( ActivePerl 5.8 推奨 )
  主な使用モジュールは、Tk と Win32::OLE です。
  上記の環境では入っていると思われますが、ない場合は適宜 PPM などで入手。

  また、JVデータ(DATA Lab..)がないと、このスクリプトは役に立ちません。。
  JVDOPT または JVDTXT 以外で入手したテキストファイルの場合は、rename が必要。




2.  はじめに  

テキストで保存した JVData を、検討用の出馬表等の Format で出力。
データから無限の想像力を引き出せるかもしれないツールです。

ただし、障害レースに関してのデータを出力することはできません。

今後は、検索出力データを多用する予定なので TARGET JV も必須。
WEB からの検索データ情報に関しては、検討中。

使い始めるには、(★最重要)
まず、同梱のkbcfg.ini をエディタなどで書き換えます。
以下の内容は、Ver. によって全く異なる場合があります。
その都度、適宜読み替えて処理してください。

[default]
# テキストWindow テスト 出力なら⇒ 1 非出力なら⇒ 0 (0)
dance=0
# 過去の成績は何日以上前なら対象外に
# 前年好走実績を除外しても影響は少ない (400)
itumade=400
# 同条件での能力値対象レース数制限 (3)
syukep=3
# レースレベルを決めるのに何番目まで加算するか? (4)
kasanp=4
[pass]
# \ は / を使う。以下必ず設定 ★★★
# 非蓄積系(今週)データのパス(要・実在)。
thisweek=h:/TDAT
# 速報系データのパス。
rtime=h:/RTD
# オッズ用パス。
odds=h:/ODDS
# 日別一括出力ファイル保存用パス。
aday=
[base]
# h:/DATA/bbsa_n.dat なら h:\DATA フォルダ内の bbsa_n.dat
# trackid=h:/DATA/bbsa_n.dat
# スクリプトと同じフォルダ内なら、ファイル名のみでOK
# トラック変数 (bbsa_n.dat)
trackid=bbsa_n.dat
# コース別設定タイム (settime.dat)
settime=settime.dat
# 騎手補完データ (kshyk2.dat)
kishu=kshyk2.dat
# 単オッズ対応・騎手用 (add_kt.dat)
kstan=add_kt.dat
# 単オッズ対応・厩舎用 (add_qt.dat)
qstan=add_qt.dat
#

出力ファイル用のパスが指定されていなければ、スクリプトと同じ場所に生成されます。



3.  使い方  

まず、レース日を指定すると、その日のデータを読み込みに行きます。
環境によって読み込み時間が異なります。
読み込みが終わると、選択できるレース場名だけが濃い色で残ります。

起動すれば、Windowsの常識の範囲内で動くと思います。
通常は、レースナンバーの指定がスイッチになっています。

ファイルに出力するときは、メニューの [FILE] から [GET!] を選んでください。
レース日が指定されていれば、その日の対象レースを出力します。
レース日を指定し忘れていれば、最新のレース日の対象レースを出力します。
障害レースは最初から除外してあります。
他に(例えば新馬戦のような)除外したいレースがあれば、スクリプト内を調べて書き換え
てください。


参考になるかどうか分かりませんが、表示内容に関する説明が以下にあります。

kbsTk の基本情報

kbsTk の過去3走、戦績集計、オッズ

Ver. 0024 以降では、戦績集計の部分が血統参照になっています。
該当記事項目を参照してください。


 画面の設定 

表示は原則として、コマンドプロンプト画面に出力されます。
設定すれば見易くなります。
コマンドプロンプト画面の設定をするときは

1. 上部の枠にカーソルを置いて右クリックしてプロパティを選択。
2. プロパティの画面の色では、背景色と文字色を指定。
3. 同じく、レイアウトでは画面の大きさや位置などを指定。
4. 同じく、フォントで見やすいサイズ等を指定。
5. 同じく、オプションでは、表示オプションでウィンドウ表示に。
  編集オプションはチェックを外しておいてください。
  フリーズ等のトラブルが避けられるので安全です。

設定が終わったら、OK。

ショートカットから起動する場合は
「このウィンドウを起動したショートカットを変更する」にチェック
直接、pl から起動する場合は
「同じタイトルのウィンドウに適用する」にチェック

してOKです。




4.  改造は  

Data Lab. JVData は固定長なので、スクリプト言語で扱うのにも適しています。
ここでは Perl を利用しています。

メニューそのほか、まだ埋まっていないところがタクサンあり、改造すればもっと、
いくらでも良くなることに気がつくと思います。

以下の、これまでの改造の経緯などを参考にして自分独自のツールにしてください。

スクリプトを改造(1)

スクリプトを改造(2)

スクリプトを改造(3)

スクリプトを改造(4)

スクリプトを改造(5)




5.  その他の注意点  

** 単なる夢を見るためのツールです。
スクリプトはどんどん書き換えて、使いやすいツールにしてください。
注意点は、別にありません。

気分としては、これを最終版にしたいのですが、どうなんでしょう、、
自分で使っているほうは、いつのまにかコレとは全然違うものになりそうですが、
それがスクリプトのよさでもあります。

まぁミスなどに気がついたら、自分で直してください。
楽しんでください。


とりあえず、同梱のファイルは、現在のスクリプトには必要なファイルです。
本体の(kbsTk.pl)だけでは動きません。付属ファイルがなければ 適宜、入手してください。
スクリプトを書き換えればナンとでも出来ます。参考ファイルと考えて下さい。

0023 のファイル構成
 kbsTk.pl
 kbsub.pl
 kbcfg.ini
 kshyk2.dat
 settime.dat
 bbsa_n.dat
 add_kt.dat
 add_qt.dat

0025 のファイル構成2005.12.23
 kbsTk.pl
 kbsub.pl
 kbcfg.ini
 kshyk2.dat
 settime.dat
 bbsa_n.dat
 test_k.dat
 他、暫定でBOXフォルダ内に参照ファイル添付




6.  注:  

何度でも言いますが分からないことは、検索、立ち読み、検索、読書。。です。

そこまでやってもダメなら諦めるという男らしい選択肢が最近少ないようで 嘆かわしい。
分からないのは、バカなのか勘違いしてるのかドッチかだというというところまで行って、
何回でも立ち直る。そんな応援したくなるような生き方する人も少ない?のかな。

伝言版や Mail での問い合わせで期待されても、それ以上の答えは多分出せません。

逆に、間違いの指摘や改善のヒントなどをいただいた時は sSeia にとってはうれしい限
りです。
いつも心より感謝しております。


再現の難しいバグがあるようです。
何日分か連続検証しているときに起きるようで、表示内容がおかしくなるとのこと。
調査中です。そうした使い方を深く考えていなかった。
配列やハッシュを初期化すればいいだけの話だと思うので、

中央10場以外では騎手コードが元データに入っていないので、騎手ポイントが 0 となります。
その場合の継続・乗替りなどの処理は騎手名でやれば可能なのですが、面倒なのでやって
いません。




7.  更新履歴  

⇒重要な変更はココに書くかもしれません。

存在しないレースナンバーを指定するとフリーズに対応。
この件は、Ver.No. 0022 を変更せずに差し替えしました。

何日分か連続検証しているときに起きる、表示内容がおかしくなるバグに対応。
Ver. 0023 で直したつもり。

以下、修正してください (2005.10.08) 10/3配布分では修正済み
    {
        my $soto = '' ;
        $soto = '外' if $tr == ( 12 or 14 or 16 or 18 or 19 or 22 ) ;
        $soto = '直' if $tr == 10 ;
        $t_dz .= $soto ;
    }
外回りコースで、タイトル行に「外」が表示されていませんでした。
    {
        my $soto = '' ;
        $soto = '外' if $tr =~ /12|13|16|18|19|22/ ;
        $soto = '直' if $tr == 10 ;
        $t_dz .= $soto ;
    }

前日発売があるときなどに、ファイル出力するとオッズ表示がおかしくなるとの 報告がありました。
その修正方法です。該当部分をさがして修正してください。
サブルーチン get_tan の最初に以下の行を追加します。

    @odds_tan = () ;

中止順延などの場合、開催スケジュールからの読み込みをしているため、場選択が出来な くなります。
サブルーチン hrt_jyo の書き換えが必要です。(2006.01.23)
金曜日に日曜の重賞などの枠順が発表されているときの対応は青字部分。 (2006.03.24追加)

sub hrt_jyo {	############## 開催場の配列 ##########
    @kaisai = () ;
#   my $schedF = "$pass\/YSNW${yyyy}9999\.dat" ;
#   open DAT, $schedF or die "?? $schedF ??:$!\n" ;
#   while ( <DAT> ) {
#       chomp ;
#       my ( $nngp, $jocd ) = unpack '@11A8@19A2', $_ ;
#       if ( $yymmdd == $nngp ) {
#           push @kaisai, $jocd ;
#       }
#       last if $yymmdd < $nngp ;
#   }
#   close DAT ;
    my $datRA = "${pass}/${yyyy}/RADW" . $yymmdd . '.DAT' ;
    -e $datRA or $datRA = "$pass/$yyyy/RABW" . $yymmdd . '.DAT'
                  or die "?? 出馬表データ RA〜 が見つからない ??:$!\n" ;
    open RAD, $datRA if -e $datRA ;
    my $bb = 0 ;
    while ( <RAD> )   {
        chomp ;
        my $jocd = substr( $_, 19, 2 ) ;
        next if $jocd == $bb ;
        push @kaisai, $jocd ;
        $bb = $jocd ;
    }
    close RAD ;
    &sep_k() ;
}

上のように書き換えてください。動作確認後、行頭#のコメント行は削除。

枠順確定前(PW)で表示する場合は、ココを含めて2、3箇所修正が必要ですが 考えてください。
但し、木曜夜8時の QWファイル の取得を待たないと、必要なデータが揃わないので 見ること
は出来ません。それでも、検討する時間的な余裕はできます。

確かにマルチバイトの呪いでは苦しんで、能力の限界と自分の無知を痛感しています。
但し、文字コードを変更するのは面白くもオカシクもないので全く考えていません。
この部分に関しては、本文の方で対策等を進める予定でココには書きません。

その他、あらためて見直すと結構ミスもありますが、指摘もなく実害もなさそうな場合など
は、原則放置です。
その理由は、自分で気付いて直しても直後には忘れる習性(歳ではな〜い!)だから。




8.  参考  

⇒参考になるような情報はココに書くかもしれません。
Perl/Tk に関してなら
M.Hiroi's Home Page の Perl/Tk memo がとても参考になります。


スクリプトの末尾にある ini_mini サブルーチン を少し使いやすくする方法。
「 ini ファイル読込み超簡易版」といっていますが、使いにくいので書き換え。

まず、ini ファイル内で現行では、
nahaha=ponpon
というように、key と value に隙間が開かないように書かないと作動しない。
nahaha = ponpon
とか、ここは自由に書きたいものです。

        if ( /=/ ) {
            s/\s//g ;    # この行を追加。
            my ( $key, $value ) = split /=/ ;
            $kandv{$key} = $value ;
        }

作業はコレだけです。ただ、空白をないものとして処理させているだけ。

但し、パスに Program Files などのように空白を挟むディレクトリの場合も考えると、
追加した行は要らなくなって、

        if ( /=/ ) {
            my ( $key, $value ) = split /=/ ;
            $key =~ s/(\S+)\s*$/$1/ ;
            $value =~ s/^\s*(.+)$/$1/ ;     # コッチが問題ですね
            $kandv{$key} = $value ;
        }

こちらは試していませんが多分、上のような処理になるはずです。

このサブルーチンは、ただメインから分離しただけの、いかさまサブルーチンです。
汎用にするには、ハッシュのリファレンスを返すようにすればいいわけで簡単です。
ただ、汎用で実際に使うには本体をチョット書き換える必要があります。

以下を参考にしてください。

### ini ファイル読込み超簡易汎用版 ###
# 使い方:
#  my $nanika = &ini_mini( INIファイル名 ) ;
#  my $value = $nanika->{ キー } ;        # 矢印演算子 -> を使う
sub ini_mini {
    my $inifile = shift ;
    my %ansh ;
    open DAT, $inifile or die "??? $inifile が無い。\n" ;
    while ( <DAT> ) {
        chomp ;
        s/^\s+// ;
        s/\s+$// ;
        next if /^[;#\[]/ ;
        next if /^$/ ;
        my ( $key, $value ) = split( /\s*=\s*/, $_, 2 ) ;
        $ansh{$key} = $value ;
    }
    close DAT ;
    \%ansh ;
}





9.  ホームページ  

充分ではありませんが、ホームページの他の情報も参照してください。
sSeia競馬



Copyright (c) 2004-2006 WinKB & sSeia