public void Read_Add(string filepath, Encoding encoding) { if (!File.Exists(filepath)) { Util_Message.Show($"設定ファイルが見つかりません。[{filepath}]"); goto gt_EndMethod; } List <List <string> > rows = Util_Csv.ReadCsv(filepath, encoding); // 最初の1行は削除。 rows.RemoveRange(0, 1); //------------------------------ // データ部だけが残っています。 //------------------------------ if ("" == this.FilepathsCsv) { this.FilepathsCsv = filepath; } else { this.FilepathsCsv = $"{this.FilepathsCsv},{filepath}"; } //this.Properties.Clear(); foreach (List <string> row in rows) { // 各行は、name,value の2列以上あるはずです。 if (row.Count < 2) { goto gt_NextColumn; } // name列が空っぽの行は無視します。 if ("" == row[0]) { goto gt_NextColumn; } if (this.Properties.ContainsKey(row[0])) { Util_Message.Show($"項目[{row[0]}]を上書きします。"); this.Properties[row[0]] = row[1]; } else { this.Properties.Add(row[0], row[1]); } gt_NextColumn: ; } gt_EndMethod: ; }
public static List <List <string> > Load(string path, Encoding encoding) { List <List <string> > rows = Util_Csv.ReadCsv(path, encoding); // 最初の2行は削除。 rows.RemoveRange(0, 2); // 各行の先頭2列は削除。 foreach (List <string> row in rows) { row.RemoveRange(0, 2); } //------------------------------ // データ部だけが残っています。 //------------------------------ Array_ForcePromotion.haiyakuMap = new Dictionary <Komahaiyaku185, Dictionary <int, Komahaiyaku185> >(); int haiyakuHandle = 0; int rowCount = 0; foreach (List <string> row in rows) { // 偶数行はコメントなので無視します。 if (rowCount % 2 == 0) { goto gt_NextRow; } //---------- // 配役 //---------- Dictionary <int, Komahaiyaku185> map2 = new Dictionary <int, Komahaiyaku185>(); Array_ForcePromotion.haiyakuMap.Add( Array_Komahaiyaku185.Items[haiyakuHandle], map2 ); int masuHandle = 0; foreach (string column in row) { // 空っぽの列は無視します。 if ("" == column) { goto gt_NextColumn; } // 空っぽでない列の値を覚えます。 // 数値型のはずです。 int haiyakuHandle_target; if (!int.TryParse(column, out haiyakuHandle_target)) { throw new Exception($@"エラー。 path=[{path}] 「強制転成表」に、int型数値でないものが指定されていました。 rowCount=[{rowCount}] masuHandle=[{masuHandle}]"); } map2.Add(masuHandle, Array_Komahaiyaku185.Items[haiyakuHandle_target]); gt_NextColumn: masuHandle++; } haiyakuHandle++; gt_NextRow: rowCount++; } return(rows); }
/// <summary> /// TODO: 駒の配置と、配役ハンドルをもとに、升を取得できたい。 /// /// </summary> /// <param name="path"></param> /// <returns></returns> public static List <List <string> > Load(string path, Encoding encoding) { List <List <string> > rows = Util_Csv.ReadCsv(path, encoding); // 最初の6行は削除。 rows.RemoveRange(0, 6); // 各行の先頭1列は削除。 foreach (List <string> row in rows) { row.RemoveRange(0, 1); } int haiyaku = 0; foreach (List <string> row in rows) { int fieldNumber = 0; foreach (string field in row) { switch (fieldNumber) //フィールドある限り空間。 { case 0: //名前 { Util_Komahaiyaku184.Name.Add(field); Util_Komahaiyaku184.KukanMasus.Add(Array_Komahaiyaku185.Items[haiyaku], new List <SySet <SyElement> >()); } break; case 1: //絵修飾字 { Util_Komahaiyaku184.Name2.Add(field); } break; case 2: //駒種類備考 break; case 3: //駒種類番号 { int syuruiHandle; if (int.TryParse(field, out syuruiHandle)) { Util_Komahaiyaku184.AddSyurui(Array_Komasyurui.Items_AllElements[syuruiHandle]); } } break; case 4: // 元の世界 上 { for (int iMichi = 1; iMichi <= 9; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 5: // 元の世界 引 { for (int iMichi = 10; iMichi <= 18; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 6: // 元の世界 滑 { for (int iMichi = 19; iMichi <= 27; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 7: // 元の世界 射 { for (int iMichi = 28; iMichi <= 36; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 8: // 奇角交差 昇 { for (int iMichi = 37; iMichi <= 43; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 9: // 奇角交差 降 { for (int iMichi = 44; iMichi <= 50; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 10: // 奇角交差 沈 { for (int iMichi = 51; iMichi <= 57; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 11: // 奇角交差 浮 { for (int iMichi = 58; iMichi <= 64; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 12: // 偶角交差 昇 { for (int iMichi = 65; iMichi <= 72; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 13: // 偶角交差 降 { for (int iMichi = 73; iMichi <= 80; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 14: // 偶角交差 沈 { for (int iMichi = 81; iMichi <= 88; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 15: // 偶角交差 浮 { for (int iMichi = 89; iMichi <= 96; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 16: // 金桂交差 駆 { for (int iMichi = 97; iMichi <= 102; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)金桂交差 退 // (欠番)金桂交差 踏 case 17: // 金桂交差 跳 { for (int iMichi = 115; iMichi <= 120; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 18: // 銀桂交差 駆 { for (int iMichi = 121; iMichi <= 125; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)銀桂交差 退 // (欠番)銀桂交差 踏 case 19: // 銀桂交差 跳 { for (int iMichi = 136; iMichi <= 140; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 20: // 擦金桂交差 駆 { for (int iMichi = 141; iMichi <= 145; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)擦金桂交差 退 // (欠番)擦金桂交差 踏 case 21: // 擦金桂交差 跳 { for (int iMichi = 156; iMichi <= 160; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 22: // 擦銀桂交差 駆 { for (int iMichi = 161; iMichi <= 165; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)擦銀桂交差 退 // (欠番)擦銀桂交差 踏 case 23: // 擦銀桂交差 跳 { for (int iMichi = 176; iMichi <= 180; iMichi++) { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 24: // 歩打面 上 { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[181]); Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[182]); break; } // (欠番)歩打面 引 case 25: // 香打面 上 { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[183]); Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[184]); break; } // (欠番)香打面 引 case 26: // 桂打面 上 { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[185]); Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[186]); break; } // (欠番)桂打面 引 case 27: // 全打面 { Util_Komahaiyaku184.KukanMasus[Array_Komahaiyaku185.Items[haiyaku]].Add(Michi187Array.Items[187]); break; } } fieldNumber++; } haiyaku++; } return(rows); }
/// <summary> /// /// </summary> /// <param name="filepath1"></param> /// <returns></returns> public static bool Load(string filepath1) { bool successful = false; string filepath2 = Path.Combine(Application.StartupPath, filepath1); List <List <string> > rows = null; if (!File.Exists(filepath2)) { MessageBox.Show($"ファイルがありません。\nfilepath2=[{filepath2}]", "情報"); rows = null; goto gt_EndMethod; } rows = Util_Csv.ReadCsv(filepath2); // 最初の1行は削除。 rows.RemoveRange(0, 1); Michi187Array.Items.Clear(); // 構文解析は大雑把です。 // (1)空セルは無視します。 // (2)「@DEFINE」セルが処理開始の合図です。 // (3)次のセルには集合の名前です。「味方陣」「平野部」「敵陣」のいずれかです。 // (4)次のセルは「=」です。 // (5)次のセルは「{」です。 // (6)次に「}」セルが出てくるまで、符号のセルが連続します。「1九」「1八」など。 // (7)「}」セルで、@DEFINEの処理は終了です。 foreach (List <string> row in rows) { // 2列目は、道名。 SySet <SyElement> michi187 = new SySet_Ordered <SyElement>(row[1].Trim()); SySet <SyElement> michiPart = null; // 各行の先頭1列目(連番)と2列目(道名)は削除。 row.RemoveRange(0, 2); bool isPart_Define = false; //@DEFINEパート bool isPart_Define_Member = false; //符号パート foreach (string cell1 in row) { string cell = cell1.Trim(); if (cell == "") { goto gt_Next1; } if (isPart_Define) { if (cell == "=") { goto gt_Next1; } if (cell == "{") { isPart_Define_Member = true; goto gt_Next1; } if (cell == "}") { isPart_Define_Member = false; isPart_Define = false; goto gt_Next1; } if (isPart_Define_Member) { // 「1一」を「1」に変換します。 SyElement masu81 = Masu_Honshogi.Query_Basho(Conv_Sy.Query_Bitfield(cell)); michiPart.AddElement(masu81); } else { switch (cell) { case "味方陣": michiPart = new SySet_Ordered <SyElement>("味方陣"); michi187.AddSupersets(michiPart); goto gt_Next1; case "平野部": michiPart = new SySet_Ordered <SyElement>("平野部"); michi187.AddSupersets(michiPart); goto gt_Next1; case "敵陣": michiPart = new SySet_Ordered <SyElement>("敵陣"); michi187.AddSupersets(michiPart); goto gt_Next1; default: throw new Exception($"未定義のキーワードです。[{cell}]"); } } } else { if (cell == "@DEFINE") { isPart_Define = true; goto gt_Next1; } } gt_Next1: ; } Michi187Array.Items.Add(michi187); } successful = true; gt_EndMethod: return(successful); }