JRA-VAN Datalab JV-Link のチュートリアルを見ながら Visual Studio 2019 C# に書き直す

 

 

JRA-VAN Datalab JV-Link を Visual Studio2019 C#で使用できるようになったので、実際にデータを取得してみる。

引き続き、開発ガイドのサンプルを見ながら。機能の確認をしたいだけなので、画面の作り込みはしない(プログレスバーとか)で、デバッグコンソールに結果を表示させるだけ。

結果が以下。

Jra van run

 

準備

データ構造体を、SDKから取込む

JRA-VAN Data Lab. SDK Ver4.5.1.5\Win\JV-Data構造体\C#版\JVData_Struct.cs

Jra van solution

ダウンロードされるデータが、Shift_JISなので、構造体定義の処理でコーデックの変換エラーが発生する。

System.ArgumentException: ”Shift_JIS’ is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. ‘

Encodeの拡張をNuGetからインストールする。

プロジェクト – NuGetパッケージの管理から、System .Text .Encoding.CodecPages をインストールし、

Cshart shift jis

以下のコードを、コンストラクタにでも書いておく。

using System.Text;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

 

データ取得ボタンのコード

 
private void btnGetData_Click(object sender, EventArgs e)
{
    // データ読み出し処理の一般的な流れ
    int returnCode = 0;
    int readCount = 0;
    int downloadCount = 0;
    
    try
    {
        // ①JVLinkノ初期化(JVInit)
        // JVLinkの初期化を行います。JVOpenを呼び出す前に最低1回呼び出す必要があります。 
        returnCode = this.jVLink.JVInit("UNKNOW");
        if (returnCode < 0)
        {
            MessageBox.Show($"JVInitエラー。 RC={returnCode}");
            return;
        }
    
        // ②JVDataノオープン(JVOpen) 
        // 要求に応じたデータを読み出せるように準備します。
        // 必要であればサーバーからデータをダウンロードする処理を起動します。
        // JVOpenからの戻りとしてダウンロードを行なう予定ファイル数が返されます。 
    
        string dataSpec = "RACE";               // データ種別に「レース情報」を設定
        string fromTime = "20201101000000";    // Fromタイムに2020年11月1日を設定
        int optionFlag = 2;                     // オプションに「今週データ」を設定
        returnCode = this.jVLink.JVOpen(dataSpec, fromTime, optionFlag, ref readCount, ref downloadCount, out string lastFileTimestamp);
        if (returnCode < 0)
        {
            MessageBox.Show($"JOpenエラー。 RC={returnCode}");
            return;
        }
    
        if (readCount == 0)
        {
            MessageBox.Show($"該当データがありません。");
            return;
        }
    
        // ③ダウンロード中のプログレスバー表示(JVStatus)
        // JVOpenはダウンロードスレッドを起動するとダウンロード完了前に呼び出し側に制御を返しますので、
        // 呼び出し側はJVStatusを使ってダウンロード処理の進行状況を監視する必要があります。
        // JVStatusはダウンロード済みのファイル数を返しますので、JVOpen時のダウンロード予定ファイル数と一致した場合にダウンロード処理の完了とします。 
    
        int count = 0;
        while((count = this.jVLink.JVStatus()) < downloadCount)
        {
            Debug.WriteLine($"count;{count} <= download count;{downloadCount}");
    
            System.Threading.Thread.Sleep(10000);
        }
    
        // ④JVDataノ読み出し(JVRead)
        // データを読み出します。ダウンロードスレッドがダウンロード実行中にJVReadを呼び出すとエラーとなります。
    
        string recordSpec = null;
        JVData_Struct.JV_SE_RACE_UMA uma = new JVData_Struct.JV_SE_RACE_UMA();
        string buff = null;
        int buffSize = 1500;
        string fName = null;
    
        buff = new string('\0', buffSize);
        if (readCount > 0)
        {
            while ((returnCode = this.jVLink.JVRead(out buff, out buffSize, out fName)) != 0)
            {
    
                if (returnCode > 0)
                {
                    recordSpec = buff.Substring(0, 2);
                    if (recordSpec == "SE")
                    {
                        uma.SetDataB(ref buff);
                        Debug.WriteLine($"開催年月日:{uma.id.Year}{uma.id.MonthDay} 競馬場:{uma.id.JyoCD} 開催回:{uma.id.Kaiji} 開催日目:{uma.id.Nichiji} R:{uma.id.RaceNum} 枠:{uma.Wakuban} 馬番:{uma.Umaban} 馬名:{uma.Bamei}");
                    }
                    else
                    {
                        //Debug.WriteLine($"SKIP:{recordSpec}");
    
                    }
                }
                else if (returnCode == -1)
                {
    
                }
                else
                {
                    MessageBox.Show($"読み込みエラー。 RC={returnCode}");
                    return;
                }
            }
        }
    
        // ⑤データ内容をテキストボックスに表示
        // 一般の競馬ソフトではこの処理の代わりにデータベースへデータを反映する処理が行なわれます。
    } 
    finally
    {
        // ⑥JVDataのクローズ(JVClose) 
        // JVOpenで確保されたリソースを開放します。
        this.jVLink.JVClose();
    }
}

以上。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です