private int RunJvReadMasterFunc(JVData_Struct.JV_UM_UMA UmaMaster) { JvRaceDataMasterStructures tmp = new JvRaceDataMasterStructures(); if (tmpRaceData.id.Bamei == null || UmaMaster.head.RecordSpec == null) { return(RESULT_NG); } else if (tmpRaceData.id.Bamei.Equals(UmaMaster.Bamei)) { tmpRaceData.Blood.fHorse = UmaMaster.Ketto3Info[0].Bamei; tmpRaceData.Blood.mHours = UmaMaster.Ketto3Info[1].Bamei; tmpRaceData.Blood.BMS = UmaMaster.Ketto3Info[4].Bamei; tmpRaceData.Blood.BMS1 = UmaMaster.Ketto3Info[12].Bamei; return(RESULT_OK); } return(RESULT_NG); }
/* JvReadのラッパー関数 */ private int RunJvReadFunc(out String buff, out int buffSize, out String fName, int funcNumber) { int ret; int boolStatus = 0; Boolean eof = false; int racecnt = 0; int skipCount = 0; do { ret = JvMain.ReadJv(out buff, out buffSize, out fName); if (ret == -1) { /* ファイルの切り替え */ if (eof == true) { skipCount++; break; } //2日分の開催データ取得完了 eof = true; JvMain.SkipJv(); } else if (buff == null) { break; //エラー } else if (ret == 0) { if (eof == true) { /* ファイル読み込みの終了 */ break; } else { skipCount++; //3回以上スキップしたら終了する。 JvMain.SkipJv(); } } else if (ret < 0) { /* -2以下の場合はエラー*/ boolStatus = -1; } else { /* 正常のデータ */ eof = false; JVData_Struct.RECORD_ID rec = new JVData_Struct.RECORD_ID(); String RecordSpec = buff.Substring(0, 2); switch (RecordSpec) { case "RA": /* レース情報詳細 */ /*JVData_Struct.JV_RA_RACE RaceData = new JVData_Struct.JV_RA_RACE();*/ RaceData.SetDataB(ref buff); RunJvReadFuncToRAData(RaceData, funcNumber); // MessageBox.Show(RaceData.RaceInfo.Hondai); break; case "SE": /* 馬毎レース情報 */ RaceUmaData.SetDataB(ref buff); tmpRaceData.id.Waku = Int32.Parse(RaceUmaData.Wakuban); tmpRaceData.id.Umaban = Int32.Parse(RaceUmaData.Umaban); tmpRaceData.id.Bamei = RaceUmaData.Bamei; tmpRaceData.id.Jokkey = RaceUmaData.KisyuRyakusyo; tmpRaceData.id.Omosa = Double.Parse(RaceUmaData.Futan); tmpRaceData.Kyakushitu = RaceUmaData.KyakusituKubun; tmpRaceData.sex = Func.ChgSexCdToString(RaceUmaData.SexCD); tmpRaceData.Year = Int32.Parse(RaceUmaData.Barei); ArrayRaceData.Add(tmpRaceData); break; /* 競走馬マスタ取得 → dataspecをRCOVで指定するときに処理される */ case "UM": JVData_Struct.JV_UM_UMA UmaMaster = new JVData_Struct.JV_UM_UMA(); UmaMaster.SetDataB(ref buff); RunJvReadMasterFunc(UmaMaster); break; default: JvMain.SkipJv(); break; } } } while (boolStatus == 0 && skipCount < 3); if (boolStatus == -1) { CheckErrorCode(ret); } return(ret); }
private int JvReadFuncToRCOVData() { String buff = null; int buffsize = 2000; String fName = null; int skipCount = 0; int boolStatus = 0; Boolean eof = false; do { int ret = JvMain.ReadJv(out buff, out buffsize, out fName); if (ret == -1) { /* ファイルの切り替え */ if (eof == true) { break; } //2日分の開催データ取得完了 JvMain.SkipJv(); } else if (buff == null) { break; //エラー } else if (ret == 0) { if (eof == true) { /* ファイル読み込みの終了 */ break; } else { skipCount++; //3回以上スキップしたら終了する。 JvMain.SkipJv(); continue; } } if (buff == null) { JvMain.SkipJv(); continue; } JvRaceDataMasterStructures MasterDataSe = new JvRaceDataMasterStructures(); switch (buff.Substring(0, 2)) { case "SE": /* 相手馬 */ JVData_Struct.JV_SE_RACE_UMA Se = new JVData_Struct.JV_SE_RACE_UMA(); Se.SetDataB(ref buff); MasterDataSe.Common.Waku = Int32.Parse(Se.Wakuban); MasterDataSe.Common.Umaban = Int32.Parse(Se.Umaban); MasterDataSe.Common.Bamei = Se.Bamei; MasterDataSe.Common.Jokkey = Se.KisyuRyakusyo; MasterDataSe.Common.Omosa = Int32.Parse(Se.Futan); MasterDataSe.Rank = Se.KakuteiJyuni; if (Se.KakuteiJyuni.Equals("01")) { MasterDataSe.AiteUma = "(" + Se.ChakuUmaInfo[0].Bamei + ")"; } else { MasterDataSe.AiteUma = Se.ChakuUmaInfo[0].Bamei; } MasterDataSe.Bataiju = Se.BaTaijyu; MasterDataSe.Zougen = Se.ZogenFugo; /* + - */ MasterDataSe.BataijuDiff = Se.ZogenSa; MasterDataSe.final3F = Se.HaronTimeL3; MasterDataSe.DiffTime = Se.TimeDiff; MasterDataSe.Conner.conner1 = Int32.Parse(Se.Jyuni1c); MasterDataSe.Conner.conner2 = Int32.Parse(Se.Jyuni2c); MasterDataSe.Conner.conner3 = Int32.Parse(Se.Jyuni3c); MasterDataSe.Conner.conner4 = Int32.Parse(Se.Jyuni4c); MasterDataSe.Time = Se.Time; tmpFormPerfomanceSE.Add(MasterDataSe); break; case "RA": /* 頭数・馬場状態 */ JVData_Struct.JV_RA_RACE Race = new JVData_Struct.JV_RA_RACE(); Race.SetDataB(ref buff); String TrackCD = Race.TenkoBaba.SibaBabaCD + Race.TenkoBaba.DirtBabaCD; MasterDataSe.SyusouTosu = Int32.Parse(Race.SyussoTosu); MasterDataSe.BabaJotai = TrackCD; tmpFormPerfomanceRA.Add(MasterDataSe); break; case "UM": JVData_Struct.JV_UM_UMA Uma = new JVData_Struct.JV_UM_UMA(); JvRaceDataMasterStructures MasterData = new JvRaceDataMasterStructures(); Uma.SetDataB(ref buff); MasterDataSe.Common.Bamei = Uma.Bamei; MasterDataSe.Blood.fHorse = Uma.Ketto3Info[0].Bamei; MasterDataSe.Blood.mHours = Uma.Ketto3Info[1].Bamei; MasterDataSe.Blood.BMS = Uma.Ketto3Info[4].Bamei; MasterDataSe.Blood.BMS1 = Uma.Ketto3Info[12].Bamei; tmpFormPerfomance.Add(MasterDataSe); break; } }while (boolStatus == 0 && skipCount < 10); /* 結合処理を加える */ // JointmpFormPerfomanceData(); return(0); }
/// <summary> /// JVUmaReadWriting処理 /// </summary> public static void JVUmaReadWriting() { bool reading = true; int nCount = 0; object buffObj = new byte[0]; int buffsize = 110000; string timeStamp; string buffname; DataTable umaDataTable = new DataTable(); DataTable raceDataTable = new DataTable(); DataTable raceUmaDataTable = new DataTable(); // 初期化時 if (JVRelayClass.Option == (int)JVRelayClass.eJVOpenFlag.SetupSkipDialog) { using (SQLiteCommand command = DbConn.CreateCommand()) { command.CommandText = "DELETE FROM uma"; command.ExecuteNonQuery(); } } using (SQLiteCommand command = DbConn.CreateCommand()) { command.CommandText = "SELECT * FROM uma"; using (SQLiteDataAdapter da = new SQLiteDataAdapter(command)) { da.Fill(umaDataTable); } } raceDataTable.Columns.Add("RaceKey", typeof(string)); raceDataTable.Columns.Add("RaceDate", typeof(string)); raceDataTable.Columns.Add("DataKubun", typeof(string)); raceDataTable.Columns.Add("GradeCD", typeof(string)); raceDataTable.Columns.Add("SyubetuCD", typeof(string)); raceUmaDataTable.Columns.Add("RaceKey", typeof(string)); raceUmaDataTable.Columns.Add("RaceDate", typeof(string)); raceUmaDataTable.Columns.Add("KettoNum", typeof(string)); raceUmaDataTable.Columns.Add("KakuteiJyuni", typeof(string)); if (umaDataTable.PrimaryKey.Length == 0) { umaDataTable.PrimaryKey = new[] { umaDataTable.Columns["KettoNum"] }; } if (raceDataTable.PrimaryKey.Length == 0) { raceDataTable.PrimaryKey = new[] { raceDataTable.Columns["RaceKey"] }; } if (raceUmaDataTable.PrimaryKey.Length == 0) { raceUmaDataTable.PrimaryKey = new[] { raceUmaDataTable.Columns["RaceKey"], raceUmaDataTable.Columns["KettoNum"] }; } ProgressUserState.Maxinum = ReadCount; ProgressUserState.Value = 0; ProgressUserState.Text = "データ読み込み中..."; MainBackgroundWorker.ReportProgress(0, ProgressUserState); do { //--------------------- // JVLink読込み処理 //--------------------- buffObj = new byte[0]; int nRet = AxJVLink.JVGets(ref buffObj, buffsize, out buffname); timeStamp = AxJVLink.m_CurrentFileTimeStamp; byte[] buff = (byte[])buffObj; string buffStr = System.Text.Encoding.GetEncoding(932).GetString(buff); // 正常 if (0 < nRet) { string recordSpec = JVData_Struct.MidB2S(ref buff, 1, 2); buffObj = new byte[0]; buff = new byte[0]; switch (recordSpec) { case "UM": { JVData_Struct.JV_UM_UMA uma = new JVData_Struct.JV_UM_UMA(); uma.SetDataB(ref buffStr); WriteDbUmaData(eOutput.Umanushi, uma, umaDataTable); } break; case "RA": { JVData_Struct.JV_RA_RACE race = new JVData_Struct.JV_RA_RACE(); race.SetDataB(ref buffStr); WriteDbRaceData(eOutput.Umanushi, race, raceDataTable); } break; case "SE": { JVData_Struct.JV_SE_RACE_UMA raceUma = new JVData_Struct.JV_SE_RACE_UMA(); raceUma.SetDataB(ref buffStr); WriteDbRaceUmaData(eOutput.Umanushi, raceUma, raceUmaDataTable); } break; default: // 対象外recspecのファイルをスキップする。 AxJVLink.JVSkip(); nCount++; ProgressUserState.Value = nCount; ProgressUserState.Text = "データ読み込み中..."; MainBackgroundWorker.ReportProgress(0, ProgressUserState); break; } } // ファイルの切れ目 else if (-1 == nRet) { nCount++; ProgressUserState.Value = nCount; ProgressUserState.Text = "データ読み込み中..."; MainBackgroundWorker.ReportProgress(0, ProgressUserState); } // 全レコード読込み終了(EOF) else if (0 == nRet) { ProgressUserState.Value = ProgressUserState.Maxinum; ProgressUserState.Text = "データ読み込み完了"; MainBackgroundWorker.ReportProgress(0, ProgressUserState); reading = false; } // エラー else if (-1 > nRet) { // エラーファイルをスキップする。 AxJVLink.JVSkip(); nCount++; ProgressUserState.Value = nCount; ProgressUserState.Text = "データ読み込み中..."; MainBackgroundWorker.ReportProgress(0, ProgressUserState); } System.Threading.Thread.Sleep(10); } while (true == reading); // データ整備 if (raceUmaDataTable.Rows.Count > 0) { foreach (DataRow raceUmaDataRow in raceUmaDataTable.Select("", "RaceDate")) { DataRow raceDataRow = raceDataTable.Rows.Find(raceUmaDataRow["RaceKey"]); DataRow umaDataRow = umaDataTable.Rows.Find(raceUmaDataRow["KettoNum"]); if (raceDataRow != null && umaDataRow != null) { string raceDate = umaDataRow["RaceDate"].ToString(); if ("" == raceDate || 0 > raceDate.CompareTo(raceUmaDataRow["RaceDate"].ToString())) { if (raceDataRow["DataKubun"].ToString() != "9" && raceDataRow["DataKubun"].ToString() != "0") { // レースを追加 umaDataRow["BeforeUmaClass"] = umaDataRow["UmaClass"]; umaDataRow["BeforeRaceDate"] = umaDataRow["RaceDate"]; umaDataRow["BeforeRaceDataKubun"] = umaDataRow["RaceDataKubun"]; umaDataRow["BeforeRaceGradeCD"] = umaDataRow["RaceGradeCD"]; umaDataRow["BeforeRaceSyubetuCD"] = umaDataRow["RaceSyubetuCD"]; umaDataRow["BeforeRaceKakuteiJyuni"] = umaDataRow["RaceKakuteiJyuni"]; umaDataRow["RaceDate"] = raceUmaDataRow["RaceDate"]; umaDataRow["RaceDataKubun"] = raceDataRow["DataKubun"]; umaDataRow["RaceGradeCD"] = raceDataRow["GradeCD"]; umaDataRow["RaceSyubetuCD"] = raceDataRow["SyubetuCD"]; umaDataRow["RaceKakuteiJyuni"] = raceUmaDataRow["KakuteiJyuni"]; umaDataRow["UmaClass"] = GetUmaClass(umaDataRow); } } else if (0 == raceDate.CompareTo(raceUmaDataRow["RaceDate"].ToString())) { if (raceDataRow["DataKubun"].ToString() == "9" || raceDataRow["DataKubun"].ToString() == "0") { // レース中止、データ削除のため戻す umaDataRow["UmaClass"] = umaDataRow["BeforeUmaClass"]; umaDataRow["RaceDate"] = umaDataRow["BeforeRaceDate"]; umaDataRow["RaceDataKubun"] = umaDataRow["BeforeRaceDataKubun"]; umaDataRow["RaceGradeCD"] = umaDataRow["BeforeRaceGradeCD"]; umaDataRow["RaceSyubetuCD"] = umaDataRow["BeforeRaceSyubetuCD"]; umaDataRow["RaceKakuteiJyuni"] = umaDataRow["BeforeRaceKakuteiJyuni"]; umaDataRow["BeforeUmaClass"] = null; umaDataRow["BeforeRaceDate"] = null; umaDataRow["BeforeRaceDataKubun"] = null; umaDataRow["BeforeRaceGradeCD"] = null; umaDataRow["BeforeRaceSyubetuCD"] = null; umaDataRow["BeforeRaceKakuteiJyuni"] = null; } else { // レース結果の更新 if (umaDataRow["RaceDataKubun"].ToString() != raceDataRow["DataKubun"].ToString()) { umaDataRow["RaceDataKubun"] = raceDataRow["DataKubun"]; } if (umaDataRow["RaceGradeCD"].ToString() != raceDataRow["GradeCD"].ToString()) { umaDataRow["RaceGradeCD"] = raceDataRow["GradeCD"]; } if (umaDataRow["RaceSyubetuCD"].ToString() != raceDataRow["SyubetuCD"].ToString()) { umaDataRow["RaceSyubetuCD"] = raceDataRow["SyubetuCD"]; } if (umaDataRow["RaceKakuteiJyuni"].ToString() != raceUmaDataRow["KakuteiJyuni"].ToString()) { umaDataRow["RaceKakuteiJyuni"] = raceUmaDataRow["KakuteiJyuni"]; } if (umaDataRow["UmaClass"].ToString() != GetUmaClass(umaDataRow)) { umaDataRow["UmaClass"] = GetUmaClass(umaDataRow); } } } } } } // データ更新 using (SQLiteTransaction tran = DbConn.BeginTransaction()) { using (SQLiteCommand command = DbConn.CreateCommand()) { command.Transaction = tran; command.CommandText = "SELECT * FROM uma"; using (SQLiteDataAdapter da = new SQLiteDataAdapter(command)) using (SQLiteCommandBuilder cb = new SQLiteCommandBuilder(da)) { cb.SetAllValues = false; cb.ConflictOption = ConflictOption.OverwriteChanges; da.UpdateCommand = cb.GetUpdateCommand(); da.InsertCommand = cb.GetInsertCommand(); da.DeleteCommand = cb.GetDeleteCommand(); da.Update(umaDataTable); } command.CommandText = "DELETE FROM uma WHERE BirthYear <= '" + DiscardBirthYear + "'"; command.ExecuteNonQuery(); command.CommandText = "UPDATE timestamp SET date ='" + LastFileTimestamp + "'"; command.ExecuteNonQuery(); } tran.Commit(); JVRelayClass.DbTimeStamp = LastFileTimestamp; } }