• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • Home
  • 日記
  • 競馬でプログラミング
    • JV-LinkをC#で使ってみる(WinForms版)
    • JV-LinkをC#で使ってみる(Console版)
  • このはとウェブログ
    • JavaScriptの話
    • WordPressの話
  • 私のバヌーシー出資馬について

sae-suki-blog.

  • メール
  • Instagram
  • RSS
  • Twitter

JV-LinkをC#で使ってみる(WinForms版) ~3.JV-Dataの内容を読み出す~

2018-10-18 by さえきさん

目次

  • 参考
    • 前回記事
    • 今回のソースコード
  • 開発環境
  • フォームの編集
    • データ表示エリアの作成
  • コードの編集
    • JV-Data構造体の使用方法
    • JV-Data構造体へのデータ読み込み

参考

競馬ソフト開発体験教室(https://jra-van.jp/dlb/sdv/trial.html)
Lesson.3 JV-Dataの内容を読み出す

注:上記の参考サイトを元にVBからC#へ移植する進めていきます。

前回記事

JV-LinkをC#で使ってみる(WinForms版) ~2.JV-Dataをダウンロードする~

今回のソースコード

source – JV-LinkをC#で使ってみる(WinForms版) ~3.JV-Dataの内容を読み出す~


開発環境

  • Windows7 64ビット版
  • Visual Studio Community 2017
  • JV-Link Ver.4.5.1

フォームの編集

データ表示エリアの作成

フォームデザイナーで[ツールボックス]から「RichTextBox」を貼り付けます。

「RichTextBox」の設定を以下のように変更します。

プロパティ 値
(Name) rtbData
Multiline True
WordWrap False

コードの編集

JV-Data構造体の使用方法

JRA-VAN Data Lab. SDK 内の「JVData_Struct.cs」をプロジェクトフォルダーにコピーします。

ソリューションエクスプローラーの[既存の項目を追加]から「JVData_Struct.cs」を追加します。

JV-Data構造体へのデータ読み込み

参考サイトのLesson.3のVBソースコードをC#へ移植します。

< サンプルを移植するにあたっての変更点 >

  • [lBuffSize]のconstキーワードを外します。 ([lBuffSize]をoutパラメーター付きで渡しますが、const宣言されているとエラーが発生します。)
  • do whileループのExit DoはVBのみでC#には存在しませんので、フラグ管理に変更します。
  • switchの正常読み込み部分case int ret when ret > 0:はC#のバージョンによっては動作しない可能性があります。

前回追加したbtnGetJVData_Click()関数に対して、72~76行目/101~158行目が追加になっています。

private void btnGetJVData_Click(object sender, EventArgs e)
{
    int nReturnCode;

    try
    {
        string strDataSpec;          // JVOpen: ファイル識別子
        string strFromTime;          // JVOpen: データ提供日付
        int nOption;                 // JVOpen: オプション
        int nReadCount;              // JVOpen: 戻り値
        int nDownloadCount;          // JVOpen: 総ダウンロードファイル数
        string strLastFileTimestamp; // JVOpen: 最新ファイルのタイムスタンプ

        int nBuffSize = 110000;      // JVRead: データ格納バッファサイズ
        int nNameSize = 256;         // JVRead: ファイル名サイズ
        string strBuff;              // JVRead: データ格納バッファ
        string strFileName;          // JVRead: ダウンロードファイル名
        JV_RA_RACE RaceInfo = new JV_RA_RACE();    // レース詳細情報構造体

        // 引数設定
        strDataSpec = "RACE";
        strFromTime = "20050301000000";
        nOption = 2;
        nReadCount = 0;
        nDownloadCount = 0;

        // JVLink ダウンロード処理
        nReturnCode = AxJVLink1.JVOpen(strDataSpec, strFromTime, nOption, ref nReadCount, ref nDownloadCount, out strLastFileTimestamp);

        // エラー判定
        if (nReturnCode != 0)
        {
            MessageBox.Show("JVOpen エラー:" + nReturnCode);
        }
        else
        {
            MessageBox.Show(
                "戻り値 : " + nReturnCode + "\n" +
                "読み込みファイル数 : " + nReadCount + "\n" +
                "ダウンロードファイル数 : " + nDownloadCount + "\n" +
                "タイムスタンプ : " + strLastFileTimestamp);

            if (nReadCount > 0)
            {
                bool flg_exit = false;
                do
                {
                    // バッファ作成
                    strBuff = new string('\0', nBuffSize);
                    strFileName = new string('\0', nNameSize);

                    // JVRead で1行読み込み
                    nReturnCode = AxJVLink1.JVRead(out strBuff, out nBuffSize, out strFileName);

                    // リターンコードにより処理を分枝
                    switch (nReturnCode)
                    {
                        case 0: // 全ファイル読み込み終了
                            flg_exit = true;
                            break;
                        case -1: // ファイル切り替わり
                            break;
                        case -3: // ダウンロード中
                            break;
                        case -201: // JVInit されてない
                            MessageBox.Show("JVInit が行われていません。");
                            flg_exit = true;
                            break;
                        case -203: // JVOpen されてない
                            MessageBox.Show("JVOpen が行われていません。");
                            flg_exit = true;
                            break;
                        case -503: // ファイルがない
                            MessageBox.Show(strFileName + "が存在しません。");
                            flg_exit = true;
                            break;
                        case int ret when ret > 0: // 正常読み込み
                                                    // レコード種別 ID の識別
                            if (strBuff.Substring(0, 2) == "RA")
                            {
                                // レース詳細のみ処理
                                // レース詳細構造体への展開
                                RaceInfo.SetDataB(ref strBuff);

                                // データ表示
                                rtbData.AppendText(
                                    "年:" + RaceInfo.id.Year +
                                    " 月日:" + RaceInfo.id.MonthDay +
                                    " 場:" + RaceInfo.id.JyoCD +
                                    " 回次:" + RaceInfo.id.Kaiji +
                                    " 日次:" + RaceInfo.id.Nichiji +
                                    " R:" + RaceInfo.id.RaceNum +
                                    " レース名:" + RaceInfo.RaceInfo.Ryakusyo10 +
                                    "\n");
                            }
                            break;
                    }
                }
                while (!flg_exit);
            }
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
        return;
    }

    // JVLink 終了処理
    nReturnCode = AxJVLink1.JVClose();
    if (nReturnCode != 0)
    {
        MessageBox.Show("JVClose エラー:" + nReturnCode);
    }
}

コードの修正が完了したらプログラムを実行し、データ取得ボタンを選択して動作を確認します。

以上で、 JV-Data のデータ読み込みが完了となります。


ただし、現段階ではデータをテキスト表示しているだけなので実用性がありません。

Filed Under: JV-LinkをC#で使ってみる(WinForms版), 競馬でプログラミング 関連タグ:C#, JRA-VAN, 競馬

最初のサイドバー

More to See

csvファイルの配列化がおかしい、、、

2020-09-11 By さえきさん

エターナルハートが転厩するのはまあいいとして、、、

2020-09-09 By さえきさん

フォルダー構成のみなおしがメンドイ( 一一)

2020-09-09 By さえきさん

Tags

C# ConoHa WING CSS Genesis JavaScript JRA-VAN Magazine Pro THE THOR WordPress エターナルハート ギエナー2019 バヌーシー フランクエトワール 競馬

Categories

  • このはとウェブログ (3)
    • JavaScriptの話 (2)
    • WordPressの話 (1)
  • 日記 (17)
  • 競馬でプログラミング (14)
    • JV-LinkをC#で使ってみる(Console版) (6)
    • JV-LinkをC#で使ってみる(WinForms版) (7)

Footer

Profile

avatar
初音ミクが大好きな40代のおじさんです。
最近、バヌーシーで一口馬主を始めました。

Search

Copyright © 2021 · Magazine Pro on Genesis Framework · WordPress