Lesson-5:コード変換を行う
当コーナーでは、Microsoft Visual Basic 2022 Professional Edition(以下VB 2022 と省略)で「JRA-VAN Data Lab.」サービス対応の競馬ソフトを作成していく過程をステップアップ形式で解説していきます。
前回までで、実際にJV-Dataをダウンロードして内容を表示する簡単な仕組みを実装しました。今回は、JRA-VANで提供されているプログラミングパーツを利用してコード変換を行い、取得したJV-Dataを見て分かる情報として表示してみましょう。
【 今回の目標 】
JRA-VANで提供されているプログラミングパーツ「コード変換クラス」を利用して、取得したJV-Dataをコード変換して表示する。
具体的には、取得した情報の中の競馬場コードを競馬場名に変換して表示エリアに表示します。
JV-Linkに実装されている以下のメソッドの使い方を理解する。
JVSkipメソッドで不要なデータを読み飛ばす。
【 やってみよう 】
① JRA-VAN Data Lab.サイトにアクセスし、「ソフト開発コーナー」→「プログラミングパーツ提供コーナー」から、コード変換クラスの中の「Microsoft Visual Basic 2019」版をダウンロードし、解凍しておきます。
[ ワンポイントメモ ]
ダウンロードファイルを解凍した際に生成される「README.TXT」は、必ずご一読ください。
② Lesson-4までを実装したフォーム(frmMain)を含むプロジェクトを開きます。
(前回のレッスンの続きから開始するのであれば、この作業は必要ありません。)
③ ①で解凍したフォルダの中から「CodeTable.csv」を作成中のプログラムフォルダにコピーします。(例では \Visual Studio Projects\WindowsApplication1\bin\Debug フォルダにコピーしています。)
④ ソリューションエクスプローラーより右クリックにて「追加(D)」→「既存の項目(G)」を選択してダイアログを表示します。このダイアログで「コード変換クラス」の解凍後ディレクトリの下の「コード変換クラスVisualBasic2019」にある「clsCodeConv.vb」を選択して「追加」をクリックします。
⑤ ソリューションエクスプローラーに「clsCodeConv.vb」が追加されます。
⑥ コードエディタウィンドウを開き、frmMainでコード変換インスタンスを宣言します。
[ソースコード007-01]
Private objCodeConv As Object ''コード変換インスタンス
⑦ コードエディタウィンドウで、frmMain_Loadメソッドに以下のコードを追加します。(**部分は前回コーディング済み)。
[ソースコード007-02]
*Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load*
* Dim sid As String*
* Dim lReturnCode As Long*
* '引数設定*
* sid = "Test"*
* ' JVLink初期化*
* lReturnCode = Class1.AxJVLink.JVInit(sid)*
* 'エラー判定*
* If lReturnCode <> 0 Then*
* MsgBox("JVInitエラー コード:" & lReturnCode & ":", MessageBoxIcon.Error)*
* Me.Cursor = System.Windows.Forms.Cursors.Default*
* Exit Sub*
* End If*
'コード変換インスタンス生成
objCodeConv = New clsCodeConv
'パスを指定し、コードファイルを読込む
objCodeConv.FileName = Application.StartupPath & "\CodeTable.csv"
*End Sub*
このコードは、プログラム起動時にコード変換クラスのインスタンスを生成し、コード表を読み込む処理を行います。
⑧ JV-Data読込時の処理に修正を加えます。
[ソースコード007-03]
(前省略)
*Select Case lReturnCode*
* Case 0 ' 全ファイル読み込み終了*
* prgJVRead.Value = prgJVRead.Maximum '進捗表示*
* Exit Do*
* Case -1 ' ファイル切り替わり*
* prgJVRead.Value = prgJVRead.Value + 1*
* Case -3 ' ダウンロード中*
* Case -201 ' Initされてない*
* MsgBox("JVInitが行われていません。")*
* Exit Do*
* Case -203 ' Openされてない*
* MsgBox("JVOpenが行われていません。")*
* Exit Do*
* Case -503 ' ファイルがない*
* MsgBox(strFileName & "が存在しません。")*
* Exit Do*
* Case Is > 0 ' 正常読み込み*
* 'レコード種別IDの識別*
* If Mid(strBuff, 1, 2) = "RA" Then*
* 'レース詳細のみ処理*
* 'レース詳細構造体への展開*
* RaceInfo.SetData(strBuff)*
* 'データ表示* ***Point1***
* rtbData.AppendText( _*
* "年:" & RaceInfo.id.Year & _*
* " 月日:" & RaceInfo.id.MonthDay & _*
" 場:" & objCodeConv.GetCodeName("2001", RaceInfo.id.JyoCD, "3") & _
* " 回次:" & RaceInfo.id.Kaiji & _*
* " 日次:" & RaceInfo.id.Nichiji & _*
* " R:" & RaceInfo.id.RaceNum & _*
* " レース名:" & RaceInfo.RaceInfo.Ryakusyo10 & vbCrLf)*
Else
'レース詳細以外は読み飛ばす ***Point2***
Call Class1.AxJVLink.JVSkip()
* End If*
*End Select*
(後省略)
・Point1
取得した場コードに対応する競馬場名(2文字略称)を表示するために、メソッドGetCodeNameを使用します。引数には、競馬場コードに対応するコード番号(2001)とコード、および表示する列(「CodeTable.csv」の何列目に対応させるか)を指定します。「CodeTable.csv」では、行ごとに「コード番号,コード,列1,列2,…」となっており、このファイルを修正することにより変換後の文字列を設定することができます。
なお、コード番号については、JV-Data仕様書をご覧ください。
・Point2
JVSkipメソッドを使用し、レース詳細(RA)以外のレコードはまとめて読み飛ばします。詳しくは、JV-Linkインターフェース仕様書をご覧ください。
【 確認しよう 】
それでは、実際に動かしてみましょう。
① メニューから「デバッグ」→「デバッグ開始」を選択し、プログラムを実行します。エラーが発生した場合は、タスク一覧にエラーメッセージが表示されるので、正しく修正してエラーが無くなるまでビルドします。
② JV-Linkを使用するための「利用キー」を設定していない場合は、メインフォーム上のメニューから「設定」→「JV-Linkの設定」を選択し、「利用キー」を設定します(詳細はLesson-1を参照)。
③ フォームの「データ取得」ボタンをクリックすると、メッセージボックスがポップアップします。メッセージボックスには、リターンコードや読み込みファイル数、ダウンロードファイル数、最新読み込みファイルのタイムスタンプが表示されます。
これらの数値は、実行するタイミングによって異なります。詳しくは、Lesson-2をご覧下さい。
④ メッセージボックスを「OK」で閉じると、レース詳細情報のうち「開催年、開催月日、競馬場名、開催回、開催日目、レース番号、競走名略称10文字」が表示されます。
JV-Dataのダウンロード進捗状況や読み込み進捗状況は上下のプログレスバーで確認することができます。
[ ワンポイントメモ ]
メソッドGetCodeNameの第3引数を変化させて、競馬場名を色々な形式(1文字略称や正式名称など)で表示してみましょう。




