public static int LibScsMain(String spec, ref String Buff, ref String Cource) { switch (spec) { case "YS": JVData_Struct.JV_YS_SCHEDULE JvSche = new JVData_Struct.JV_YS_SCHEDULE(); conv.JvConv JvConv = new conv.JvConv(); String res = ""; JvSche.SetDataB(ref Buff); if (JvConv.JvConvJyoCdToString(JvSche.id.JyoCD, ref res) == 0) { return(0); //競馬場コードが不明のときはエラー } Cource = res; return(1); case "RA": JVData_Struct.JV_RA_RACE JvRace = new JVData_Struct.JV_RA_RACE(); conv.JvConv JvConv1 = new conv.JvConv(); JvRace.SetDataB(ref Buff); String resRA = ""; if (JvConv1.JvConvJyoCdToString(JvRace.id.JyoCD, ref resRA) == 0) { return(0); //競馬場コードが不明のときはエラー } Cource = resRA; return(1); } return(1); }
//レース情報処理 public void RunRADataFunction(String buff) { //JvRaRace.Initialize(); SetDataBでInitializeが走るため不要 JvRaRace.SetDataB(ref buff); for (int idx = 0; idx < 2; idx++) { //場名をセット SyncData.setJomei(idx, toStr.ChgJyoCDtoString(JvRaRace.id.JyoCD)); } textBox1.AppendText(toStr.CngJyoNum(JvRaRace.id.JyoCD, JvRaRace.id.RaceNum) + ":" + JvRaRace.RaceInfo.Hondai.TrimEnd() + "(" + ")\n"); }
/// <summary> /// JVReading処理 /// </summary> /// <param name="endDate">終了日</param> public static void JVReading(string endDate) { bool reading = true; int nCount = 0; object buffObj = new byte[0]; int buffsize = 110000; string endTimeStamp = endDate + "235959"; string timeStamp; string buffname; if (JVDataAccessType == eJVDataAccessType.eRACE) { 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]; if (0 <= endTimeStamp.CompareTo(timeStamp)) { switch (recordSpec) { case "RA": JVData_Struct.JV_RA_RACE race = new JVData_Struct.JV_RA_RACE(); race.SetDataB(ref buffStr); OutputRaceData(eOutput.Umanushi, race); break; case "SE": JVData_Struct.JV_SE_RACE_UMA raceUma = new JVData_Struct.JV_SE_RACE_UMA(); raceUma.SetDataB(ref buffStr); OutputRaceUmaData(eOutput.Umanushi, raceUma); break; default: if (JVDataAccessType == eJVDataAccessType.eRACE) { // 対象外recspecのファイルをスキップする。 AxJVLink.JVSkip(); nCount++; ProgressUserState.Value = nCount; ProgressUserState.Text = "データ読み込み中..."; MainBackgroundWorker.ReportProgress(0, ProgressUserState); } break; } } else { // 対象外recspecのファイルをスキップする。 AxJVLink.JVSkip(); nCount++; ProgressUserState.Value = nCount; ProgressUserState.Text = "データ読み込み中..."; MainBackgroundWorker.ReportProgress(0, ProgressUserState); } } // ファイルの切れ目 else if (-1 == nRet) { if (JVDataAccessType == eJVDataAccessType.eRACE) { nCount++; ProgressUserState.Value = nCount; ProgressUserState.Text = "データ読み込み中..."; MainBackgroundWorker.ReportProgress(0, ProgressUserState); } } // 全レコード読込み終了(EOF) else if (0 == nRet) { if (JVDataAccessType == eJVDataAccessType.eRACE) { 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); }
bool getDbDataJvLink(DateTime datetimeTarg, List <string> listdbDate) { JVData_Struct.JV_RA_RACE jvRaRace = new JVData_Struct.JV_RA_RACE(); JVData_Struct.JV_SE_RACE_UMA jvSeRaceUma = new JVData_Struct.JV_SE_RACE_UMA(); string retbuff; long cntLoop = 0; bool isExistData = false; int size = 40000; int count = 256; int option; string strDate; double bunbo; DateTime DateTimeStart; if (listdbDate.Count > 0) { strDate = listdbDate[listdbDate.Count - 1]; DateTimeStart = DateTime.Parse(listdbDate[listdbDate.Count - 1].Insert(4, "/").Insert(7, "/")); option = 1; } else { TimeSpan timeSpan = new TimeSpan(365 * 4, 0, 0, 0); //365*4 strDate = (datetimeTarg - timeSpan).ToString("yyyyMMdd"); DateTimeStart = datetimeTarg - timeSpan; option = 4; } bunbo = (datetimeTarg - DateTimeStart).TotalDays; _form1.prgJVRead.Maximum = 100; _form1.prgJVRead.Value = 0; if (!cCommon.isJVOpen("RACE", strDate, option)) { return(false); } do { retbuff = cCommon.loopJVRead(size, count, true); if (retbuff == "" || retbuff == "END") { break; } if (retbuff.Substring(0, 2) == "RA") { jvRaRace.SetDataB(ref retbuff); // 中央競馬以外は除外 int intJyoCD; if (!int.TryParse(jvRaRace.id.JyoCD, out intJyoCD)) { continue; } else if (intJyoCD < 1 || intJyoCD > 10) { continue; } // プログレスバー更新 DateTime dateTimeJv = DateTime.Parse((retbuff.Substring(11, 8)).Insert(4, "/").Insert(7, "/")); if (dateTimeJv > datetimeTarg) { continue; } double bunshi = (dateTimeJv - DateTimeStart).TotalDays; if (bunshi < 0) { bunshi = 0; } _form1.prgJVRead.Value = (int)(bunshi / bunbo * 100); if (_form1.prgJVRead.Value < _form1.prgJVRead.Maximum) { _form1.prgJVRead.Value++; _form1.prgJVRead.Value--; } _form1.rtbData.Text = jvRaRace.id.Year + jvRaRace.id.MonthDay; _form1.rtbData.Refresh(); // DBにデータがある場合は除外 if (isExistDateList(listdbDate, jvRaRace.id.Year + jvRaRace.id.MonthDay)) { isExistData = true; //_form1.axJVLink1.JVSkip(); continue; } isExistData = false; // テキストボックス更新 string codeName = this.objCodeConv.GetCodeName("2001", jvRaRace.id.JyoCD, 1); _form1.rtbData.Text = jvRaRace.id.Year + jvRaRace.id.MonthDay + " " + codeName + " " + "取得中"; _form1.rtbData.Refresh(); listRaceInfo.Add(new clsDbInfo() { strdate = jvRaRace.id.Year + jvRaRace.id.MonthDay, nameJyo = codeName, racenum = jvRaRace.id.RaceNum, raceId = jvRaRace.id.Year + jvRaRace.id.MonthDay + jvRaRace.id.JyoCD + jvRaRace.id.RaceNum, }); } else if (retbuff.Substring(0, 2) == "SE") { if (isExistData) { _form1.axJVLink1.JVSkip(); continue; } jvSeRaceUma.SetDataB(ref retbuff); // 中央競馬以外は除外 int intJyoCD; if (!int.TryParse(jvSeRaceUma.id.JyoCD, out intJyoCD)) { continue; } else if (intJyoCD < 1 || intJyoCD > 10) { continue; } string codeName = objCodeConv.GetCodeName("2001", jvSeRaceUma.id.JyoCD, 1); foreach (clsDbInfo RaceInfo in listRaceInfo) { if (RaceInfo.strdate == jvSeRaceUma.id.Year + jvSeRaceUma.id.MonthDay && RaceInfo.nameJyo == codeName && RaceInfo.racenum == jvSeRaceUma.id.RaceNum) { listdbInfo.Add(new clsDbInfo() { strdate = RaceInfo.strdate, nameJyo = RaceInfo.nameJyo, racenum = RaceInfo.racenum, Bamei = jvSeRaceUma.Bamei.Trim(), Umaban = jvSeRaceUma.Umaban, raceId = RaceInfo.raceId, }); break; } } } else { _form1.axJVLink1.JVSkip(); } cntLoop++; }while (cntLoop <= 1000000); _form1.prgJVRead.Maximum++; _form1.prgJVRead.Value = _form1.prgJVRead.Maximum; _form1.prgJVRead.Maximum--; int retJVClose = _form1.axJVLink1.JVClose(); if (retJVClose != 0) { return(false); } return(true); }
private List <List <string> > GetRaceNumInfoX(DateTime datetimeTarg, string collplace) { List <List <string> > stringListList = new List <List <string> >(); List <string> stringList = new List <string>(); try { int size = 110000; int count = 256; JVData_Struct.JV_RA_RACE jvRaRace = new JVData_Struct.JV_RA_RACE(); this.tmrDownload.Enabled = false; this.prgJVRead.Value = 0; string dataspec = "RACE"; TimeSpan timeSpan = new TimeSpan(1, 0, 0, 0); string str = (datetimeTarg - timeSpan).ToString("yyyyMMdd"); int option = DateTime.Now > datetimeTarg.AddYears(1) ? 4 : 1; int readcount = 0; int downloadcount = 0; int num1 = this.AxJVLink1.JVOpen(dataspec, str + "000000", option, ref readcount, ref downloadcount, out string _); if (num1 != 0) { int num2 = (int)MessageBox.Show("JVOpen エラー:" + (object)num1); } else { this.prgJVRead.Maximum = readcount; if (readcount > 0) { bool flag1 = false; bool flag2 = false; do { System.Windows.Forms.Application.DoEvents(); string buff = new string(char.MinValue, size); string filename = new string(char.MinValue, count); switch (this.AxJVLink1.JVRead(out buff, out size, out filename)) { case -503: int num3 = (int)MessageBox.Show(filename + "が存在しません。"); flag1 = true; goto case -3; case -203: int num4 = (int)MessageBox.Show("JVOpen が行われていません。"); flag1 = true; goto case -3; case -201: int num5 = (int)MessageBox.Show("JVInit が行われていません。"); flag1 = true; goto case -3; case -3: continue; case -1: ++this.prgJVRead.Value; goto case -3; case 0: this.prgJVRead.Value = this.prgJVRead.Maximum; flag1 = true; goto case -3; default: if (buff.Substring(0, 2) == "RA") { jvRaRace.SetDataB(ref buff); string s = (jvRaRace.id.Year + jvRaRace.id.MonthDay).Insert(4, "/").Insert(7, "/"); DateTime dateTime = DateTime.Parse(s); if (flag2 && dateTime > datetimeTarg) { flag1 = true; } if (jvRaRace.head.DataKubun != "9" && s == datetimeTarg.ToString("yyyy/MM/dd")) { string codeName = this.objCodeConv.GetCodeName("2001", jvRaRace.id.JyoCD, (short)1); if (collplace == codeName) { flag2 = true; stringList.Add(jvRaRace.id.RaceNum); stringList.Add(jvRaRace.Kyori); stringListList.Add(stringList); stringList = new List <string>(); goto case -3; } else { goto case -3; } } else { goto case -3; } } else { this.AxJVLink1.JVSkip(); goto case -3; } } }while (!flag1); } } } catch (Exception ex) { return((List <List <string> >)null); } int num6 = this.AxJVLink1.JVClose(); if (num6 != 0) { int num7 = (int)MessageBox.Show("JVClose エラー:" + (object)num6); } this.prgJVRead.Value = this.prgJVRead.Maximum; return(stringListList); }
private List <string> GetPlaceInfoReal(DateTime datetimeTarg) { List <string> stringList = new List <string>(); JVData_Struct.JV_RA_RACE jvRaRace = new JVData_Struct.JV_RA_RACE(); int size = 110000; int count = 256; string dataspec = "0B15"; TimeSpan timeSpan = new TimeSpan(0, 0, 0, 0); string str = (datetimeTarg - timeSpan).ToString("yyyyMMdd"); int num1 = this.AxJVLink1.JVRTOpen(dataspec, str); if (num1 != 0) { int num2 = (int)MessageBox.Show("JVOpen エラー:" + (object)num1); } else { bool flag = false; bool isFind = false; do { System.Windows.Forms.Application.DoEvents(); string buff = new string(char.MinValue, size); string filename = new string(char.MinValue, count); switch (this.AxJVLink1.JVRead(out buff, out size, out filename)) { case -503: int num3 = (int)MessageBox.Show(filename + "が存在しません。"); flag = true; goto case -3; case -203: int num4 = (int)MessageBox.Show("JVOpen が行われていません。"); flag = true; goto case -3; case -201: int num5 = (int)MessageBox.Show("JVInit が行われていません。"); flag = true; goto case -3; case -3: continue; case -1: ++this.prgJVRead.Value; goto case -3; case 0: this.prgJVRead.Value = this.prgJVRead.Maximum; flag = true; goto case -3; default: if (buff.Substring(0, 2) == "RA") { jvRaRace.SetDataB(ref buff); DateTime dateTime = DateTime.Parse((jvRaRace.id.Year + jvRaRace.id.MonthDay).Insert(4, "/").Insert(7, "/")); int num6 = dateTime > datetimeTarg ? 1 : 0; string codeName = this.objCodeConv.GetCodeName("2001", jvRaRace.id.JyoCD, (short)1); if (dateTime.Date == datetimeTarg.Date) { isFind = false; foreach (string ele in stringList) { if (ele == codeName) { isFind = true; } } if (!isFind) { stringList.Add(codeName); goto case -3; } } else { goto case -3; } } goto case -3; } }while (!flag); } int num7 = this.AxJVLink1.JVClose(); if (num7 != 0) { int num8 = (int)MessageBox.Show("JVClose エラー:" + (object)num7); } this.prgJVRead.Value = this.prgJVRead.Maximum; return(stringList); }
/* 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); }
void setDataRA(ClassCSV cCSV, string retbuff, DateTime datetimeTarg) { DateTime dateTime; string strShortJyo; string strJyo; long rowTarget; string tmpBaba; string tmpTenko; JVData_Struct.JV_RA_RACE mRaData = new JVData_Struct.JV_RA_RACE(); mRaData.SetDataB(ref retbuff); dateTime = DateTime.Parse( (mRaData.id.Year + mRaData.id.MonthDay).Insert(4, "/").Insert(7, "/")); if (dateTime.ToShortDateString() != datetimeTarg.ToShortDateString()) { return; } strJyo = cCommon.JyoCord(mRaData.id.JyoCD); if (strJyo == "") { return; } strShortJyo = cCommon.Jyo2ShortJyo(strJyo); if (strShortJyo == "") { return; } rowTarget = cCSV.getDataRow(strShortJyo, int.Parse(mRaData.id.RaceNum)); // 発走時刻 cCSV.setData(rowTarget, 5, mRaData.HassoTime.Substring(0, 2) + ":" + mRaData.HassoTime.Substring(2, 2)); // 馬場状態 if (cCSV.getData(rowTarget, 9).Contains("ダート")) { tmpBaba = cCommon.BabaCord(mRaData.TenkoBaba.DirtBabaCD.Substring(0, 1)); } else { tmpBaba = cCommon.BabaCord(mRaData.TenkoBaba.SibaBabaCD.Substring(0, 1)); } if (tmpBaba != "") { tmpBaba = tmpBaba.Substring(0, 1); } if (tmpBaba != "未設定") { cCSV.setData(rowTarget, 13, tmpBaba); } // 天候 tmpTenko = cCommon.TenkoCord(mRaData.TenkoBaba.TenkoCD); if (tmpTenko != "未設定") { cCSV.setData(rowTarget, 14, tmpTenko); } if (cCSV.getData(rowTarget, 13).Contains("(暫定)")) { cCSV.setData(rowTarget, 13, cCSV.getData(rowTarget, 13).Replace("(暫定)", "")); } if (cCSV.getData(rowTarget, 14).Contains("(暫定)")) { cCSV.setData(rowTarget, 14, cCSV.getData(rowTarget, 14).Replace("(暫定)", "")); } }
/// <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; } }