• 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#で使ってみる(Console版) ~5.コード変換を行う~

2018-10-19 by さえきさん

目次

  • 参考
    • 前回記事
    • WinForms版
    • 今回のソースコード
  • 開発環境
  • はじめに
  • コーディング
    • コード変換クラスの作成
      • コンストラクタ
      • 「FileOpen()」関数
      • インデクサ(対象データのみ返す)
      • インデクサ(対象データの配列を返す)
    • メインプログラムの修正
  • 動作確認

参考

前回記事

JV-LinkをC#で使ってみる(Console版) ~4.JV-Dataのダウンロード/読み込み進捗状況を表示する~

WinForms版

JV-LinkをC#で使ってみる(WinForms版) ~5.コード変換を行う~

今回のソースコード

source – JV-LinkをC#で使ってみる(Console版) ~5.コード変換を行う~


開発環境

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

はじめに

前回、「コード変換クラス」をVBからC#に移植しました。正直言って、よく分からない変数が大量に並んでいてほとんど理解せずに移植しました。あのサンプルを見てすぐに内容が把握できる人を素直に「凄い!」と思います。ですので、そんな自分でもわかるように一から作り直してみました。


コーディング

コード変換クラスの作成

コンストラクタ

public CodeConv()
{
    fileName = "";
    fileOpen = -1;
    code = new Dictionary<Tuple<string, string>, string[]>();
}

変数の初期化を行います。Key1とKey2は文字列として、Valueは文字列配列として作成しています。

「FileOpen()」関数

public int FileOpen(string filename)
{
    code.Clear();
    try
    {
        using (StreamReader sr = new StreamReader(filename, System.Text.Encoding.GetEncoding("shift_jis")))
        {
            string[] strlist;
            while ((strlist = sr.ReadLine().Split(',')) != null)
            {
                code[Tuple.Create(strlist[0], strlist[1])] = strlist;
            }
        }
        fileName = filename;
        fileOpen = 0;
        return fileOpen;
    }
    catch (Exception)
    {
        fileName = "";
        fileOpen = -1;
        return fileOpen;
    }
}

VBサンプルではプロパティに名前を設定することでファイルを読み込んでいましたが、個人的にはファイルをオープンしていると分かる関数のほうが良いと思います。

  1. StreamReaderを使ってファイルを開きます。
  2. ReadLine()関数でテキストファイル(CSV)を1行読み込みます。この関数は1行分の文字列をstringで返します。
  3. Split()関数で文字列をカンマ区切りの文字列リストにしています。
  4. 文字列リストの先頭2要素をKey1とKey2のペアとして新たなKeyとし、文字列リストをDictionaryに保存します。

例外処理を除くと、大まかにはこのような処理となっていますが、この部分だけでVBサンプルのSetLine()関数とSetData()関数とFileNameプロパティの3つを網羅しています。前回作成したVBサンプル移植版と比較するとだいぶ短く見やすいかと思います。

インデクサ(対象データのみ返す)

public string this[string key1, string key2, int n]
{
    get
    {
        try
        {
            return code[Tuple.Create(key1, key2)][n + 1];
        }
        catch (Exception)
        {
            return null;
        }
    }
}

インデクサは作成したオブジェクトを配列やリストのように扱う機能です。オブジェクトにkey1,key2,nを指定すると、対象のデータを返します。VBサンプルではGetCodeName()関数の部分に対応します。

インデクサ(対象データの配列を返す)

public string[] this[string key1, string key2]
{
    get
    {
        try
        {
            return code[Tuple.Create(key1, key2)];
        }
        catch (Exception)
        {
            return null;
        }
    }
}

VBサンプルにはありませんが、key1,key2を指定すると対象のデータの配列を返す関数です。処理自体は、Dictionaryにキーを渡して値を返しているだけです。

メインプログラムの修正

前回からの修正点はとても少ないです。

var cv = new CodeConv();
cv.FileOpen("CodeTable.csv");

コード変換クラスのオブジェクトのインスタンスを作成し、ファイルを読み込みます。

// レース詳細を画面表示
Console.WriteLine(
    "年:" + raceInfo.id.Year +
    " 月日:" + raceInfo.id.MonthDay +
    // " 場:" + raceInfo.id.JyoCD +
    " 場:" + cv["2001", raceInfo.id.JyoCD, 3] +
    " 回次:" + raceInfo.id.Kaiji +
    " 日次:" + raceInfo.id.Nichiji +
    " R:" + raceInfo.id.RaceNum +
    " レース名:" + raceInfo.RaceInfo.Ryakusyo10 +
    "\n"
    );

コード変換クラスのオブジェクトからデータを読み込みます。 (変更は115,116行目のみ)


動作確認

コードの編集が完了したらプログラムを実行して動作を確認します。


以上で、コード変換クラスの作成が完了となります。

Filed Under: JV-LinkをC#で使ってみる(Console版), 競馬でプログラミング 関連タグ: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