Lesson5で競馬場のコード変換がうまくできません。
過去ログを拝見して、csvファイルがゼロサプレスされているかもしれないということで、再度ダウンロードしたcsvファイルをコピーし直しましたが結果は変わりませんでした。
コピーしたcsvファイルをメモ帳で開いてみても、2001の次は、01、02,03のようにゼロが入っています。
ご利用の開発環境、言語等の情報提供をお願いできますでしょうか。またコード変換時のエラー情報やドキュメントのどの箇所がうまくいかないかといった情報を具体的に共有していただくことで、アドバイスをもらえたり、できることがあります。
ファイル欠損はないとのことでしたので、その他の原因の可能性があります。ファイルパスの指定は問題ないでしょうか?
ご返信ありがとうございます。
環境はWindows11、VisualStudio2002です。
コード変換がうまくいっていないのは、Lesson5の6ページの出力サンプルと同じく、月日:0720 場: 回次:01、と出力され、場:の次に何も場名が出力されていません。
csvファイルは、C:\Users\USER\source\repos\JVLinkTest3\JVLinkTest3\bin\x86\Debugにコピーしました。ちなみにbin\Debug配下にもコピーしました。
ソースの該当箇所はこんな感じです。
If lReadCount > 0 Then
Do
'バックグラウンドでの処理を実行
Application.DoEvents()
'バッファ作成
strBuff = New String(vbNullChar, lBuffSize)
strFileName = New String(vbNullChar, lNameSize)
'JVRead で1行読み込み
lReturnCode = Me.clsJVLink.JVRead(strBuff, lBuffSize, strFileName)
'リターンコードにより処理を分枝
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)
'データ表示
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
'レース詳細以外は読み飛ばす
Call clsJVLink.JVSkip()
End If
End Select
Loop While (1)
End If
'タイマ有効時は、無効化する
If tmrDownload.Enabled = True Then
tmrDownload.Enabled = False
prgDownload.Value = prgDownload.Maximum
End If
End If
Catch
Debug.WriteLine(Err.Description)
Exit Sub
End Try
'JVLink 終了処理
lReturnCode = Me.clsJVLink.JVClose()
If lReturnCode <> 0 Then
MsgBox("JVClose エラー:" & lReturnCode)
End If
End Sub
realone1022さん、こんばんは。
環境はVisual Studio 2022かと思います。Visual Basic使っている感じですが、もう2年程前にVB→C#してしまったので記憶は曖昧で、ただ、コードのCSVからの読込は当時止めて今もC#でもクラス定義して使ってるんですが、
public class clsCodeConv
{
string[][] CodeTable = {
new string[] {"2001","00","","","","","",""},
new string[] {"2001","01","札幌競馬場","札","札幌","札幌","SAPPORO",""},
new string[] {"2001","02","函館競馬場","函","函館","函館","HAKODATE",""},
new string[] {"2001","03","福島競馬場","福","福島","福島","FUKUSHIMA",""},
new string[] {"2001","04","新潟競馬場","新","新潟","新潟","NIIGATA",""},
new string[] {"2001","05","東京競馬場","東","東京","東京","TOKYO",""},
new string[] {"2001","06","中山競馬場","中","中山","中山","NAKAYAMA",""},
new string[] {"2001","07","中京競馬場","名","中京","中京","CHUKYO",""},
new string[] {"2001","08","京都競馬場","京","京都","京都","KYOTO",""},
new string[] {"2001","09","阪神競馬場","阪","阪神","阪神","HANSHIN",""},
new string[] {"2001","10","小倉競馬場","小","小倉","小倉","KOKURA",""},
new string[] {"2001","30","門別競馬場","門","門別","門別","MONBETSU",""},
...
new string[] {"2303","0","","","","","",""},
new string[] {"2303","1","☆","1Kg減","","","",""},
new string[] {"2303","2","△","2Kg減","","","",""},
new string[] {"2303","3","▲","3Kg減","","","",""},
new string[] {"2303","4","★","4Kg減","","","",""},
new string[] {"2303","9","◇","2Kg減","","","",""}
};
public string GetCodeName(string strCodeNo,string strCode,string strNo)
{
string strName = string.Empty;
for(int i = 0; i < CodeTable.Length; i++)
{
if ((CodeTable[i][0] == strCodeNo) && (CodeTable[i][1] == strCode))
{
strName = CodeTable[i][int.Parse(strNo)+1];
}
}
return strName;
}
public string GetNameCode(string strCodeNo, string strName, string strNo)
{
string strCode = string.Empty;
for (int i = 0; i < CodeTable.Length; i++)
{
if ((CodeTable[i][0] == strCodeNo) && (CodeTable[i][int.Parse(strNo) + 1] == strName))
{
strCode = CodeTable[i][1];
}
}
return strCode;
}
}
とCSVデータ元にテキスト編集してクラス定義して利用した方が楽かも? いや、あくまでもこんな方法もあるって話です。
ご返信ありがとうございます。
初心者には難しいみたいですね。
やりたいことは、コード変換というよりは、昔作成したエクセルVBAの競馬予想プログラムももう一度アップデートしたく、そのための元データが欲しいというものです。
(昔はCSVファイルで提供されていたので、それを使ったプログラムでした)
最終的に欲しいデータは、出走日、競馬場、芝/ダ区分、距離、レースNO、馬番、馬名、斤量、前走実績(出走日、競馬場、馬場状態、芝/ダ区分、距離、走破時間、斤量、上り3ハロン)、2走前実績(前走と同じ)、3走前実績(前走と同じ)です。
出走情報と実績は別ファイルでも、VBAで馬名をキーにVLOOKすればいいかと考えています。
それ以外に、3年分の成績実績データ(日、競馬場、馬場状態、距離、芝/ダ区分、着順、そ走破時間、斤量、あがり3ハロン時間)があればと考えています。
その目的でVBでほしいデータをゲットしたいと考えています。コード変換はVBA側でもいいかと考えています。
お忙しいところ申し訳ありません。前述のヒント、アドバイスを頂けると助かります。VBにもこだわりありません。VBAを使っていたのですこしは近いかなというレベルで選択しました。
realone1022さん、こんばんは。
状況は理解しました。自分自身エクセルも、まあ、現在もちょいちょい使うけどVBAまではって感じで(単に出勤管理で勤務先にって程度なので)、realone1022さんの問題に直感的にアドバイスは無理なので他の方に譲ります。
そもそも、既にVB自体離れて2年程度でどっぷりC#に浸かって忘れてますので、無事に目的達成出来る事を祈ってます ![]()