見出し画像

VB.NETでJVLinkからデータ取得 3 コーディング 1

JVLink入手
https://jra-van.jp/dlb/#tab5

DataLab.(データラボ) 会員サービス ソフト開発サポート
https://jra-van.jp/dlb/sdv/sdk.html

JRA-VAN Data Lab.開発ガイド(Ver.4.2.2)
https://jra-van.jp/dlb/sdv/sdk/DataLab422.pdf

JV-Data 仕様書PDF版(Ver.4.9.0)
https://jra-van.jp/dlb/sdv/sdk/JV-Data490.pdf

Microsoft Visual Studio Community 2019
https://visualstudio.microsoft.com/ja/vs/older-downloads/



前置きが長くなりましたがここからコーディングです。

コーディングの準備

Form1に表示されているButton1をダブルクリック

このボタンをWクリックすると下のエディターが立ち上がります

VB.NETではこのClassとEnd Classの中のSubとEnd Subの中にコードを書いていくことになります。

Private Subの下の空白の行に、以下のコードを貼りつけましょう。

        ' 取得したいレースIDを指定
        Dim raceNum As String = "2024030306020411"
        ' JVLinkからの戻り値を格納する変数を定義
        Dim retval As Long
        ' 定数としてretvalのバッファサイズを指定
        Const buffSize As Long = 1000

        ' JVLink初期化を実施
        Me.AxJVLink1.JVInit("UNKNOWN")
        ' 0B31からレースIDを引数にして人気オッズを読み込みを開始
        retval = Me.AxJVLink1.JVRTOpen("0B31", raceNum)


        ' retvalが負の値だと何かしらのエラーが発生しているので処理を中断
        If retval < 0 Then
            MsgBox("JVRTOpenエラー。RC=" & retval)
            Exit Sub
        End If


        ' JVRTOpenが成功した事をTextBoxにを表示
        TextBox1.AppendText("JVRTOpen成功。RC=" & retval & Environment.NewLine)

        ' データ読み込みのためのループを開始
        Do
            ' データを格納するためのバッファを準備
            Dim rawRaceData As String = New String(vbNullChar, buffSize)
            ' JVLinkからデータを読み込む
            retval = AxJVLink1.JVRead(rawRaceData, buffSize, Nothing)

            If retval = -1 Then ' データの終端に達したらループを終了
                Exit Do
            ElseIf retval < 0 Then ' JVReadエラー処理
                MessageBox.Show("JVReadエラー。RC=" & retval)
                Exit Do
            ElseIf retval > 0 Then ' データが正常に読み込まれたら表示変換を行う
                '↓↓↓
                ' 必要なデータのみを抽出するためのロジック
                '  "O" 以降のデータを抽出する
                'Dim datastartindex As Integer = rawRaceData.IndexOf("O"c) + 1
                'If datastartindex > 0 Then
                '    Dim validdata As String = rawRaceData.Substring(datastartindex).Trim()
                '    ' 空白文字が出現する位置を見つける
                '    Dim endindex As Integer = validdata.IndexOf(" "c)
                '    If endindex > 0 Then
                '        validdata = validdata.Substring(0, endindex)
                '    End If
                '    TextBox1.AppendText("抽出データ: " & validdata & Environment.NewLine)
                'End If
                '↑↑↑
                ' ※※※ ↓この1行は生の取得データを確認したらコメントアウトし、上の矢印内のコメントアウトを解除する
                TextBox1.AppendText("取得データ: " & rawRaceData & Environment.NewLine)
            End If
        Loop While retval <> 0
        ' JVCloseを呼び出してセッションを終了
        Me.AxJVLink1.JVClose()

貼り付け開始位置はここです。合わないとインデントエラーになるかもしれません。

キーボードのTabキーとBackSpaceキーで貼り付け開始位置は調節可能です。


貼り付けたらデザインタブを選択します

次に、上部のメニューのビルドを選んでソリューションのビルドを選択

ビルドからソリューションのビルドを選択し、隣のデバッグを選択し、デバッグなしで開始を選択

Form1が立ち上がるので、Button1をクリックしたらTextBox内にバイナリデータが表示されます。
※現在このコードを実行するとエラーになります。理由と解説は次の記事にて。

本来このようなバイナリデータが表示されます

手順としてはここまでOKでしょうか。

次はエラー対処です。
そして、その先はこのバイナリーデータを意味のあるデータとして扱えるようにしていきます。
ここからわかりやすさに極振りしていきますので、開発ガイドから大きくそれて行きます。

ガイドにあるような構造体を通すような便利機能を使っての実装まではやりませんので、そちらをお望みの方はこの先の記事は不要となります。

次の記事


この記事が気に入ったらサポートをしてみませんか?