/// <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: //名前 { Haiyaku184Array.Name.Add(field); Haiyaku184Array.KukanMasus.Add(Kh185Array.Items[haiyaku], new List <SySet <SyElement> >()); } break; case 1: //絵修飾字 { Haiyaku184Array.Name2.Add(field); } break; case 2: //駒種類備考 break; case 3: //駒種類番号 { int syuruiHandle; if (int.TryParse(field, out syuruiHandle)) { Haiyaku184Array.AddSyurui(Ks14Array.Items_All[syuruiHandle]); } } break; case 4: // 元の世界 上 { for (int iMichi = 1; iMichi <= 9; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 5: // 元の世界 引 { for (int iMichi = 10; iMichi <= 18; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 6: // 元の世界 滑 { for (int iMichi = 19; iMichi <= 27; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 7: // 元の世界 射 { for (int iMichi = 28; iMichi <= 36; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 8: // 奇角交差 昇 { for (int iMichi = 37; iMichi <= 43; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 9: // 奇角交差 降 { for (int iMichi = 44; iMichi <= 50; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 10: // 奇角交差 沈 { for (int iMichi = 51; iMichi <= 57; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 11: // 奇角交差 浮 { for (int iMichi = 58; iMichi <= 64; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 12: // 偶角交差 昇 { for (int iMichi = 65; iMichi <= 72; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 13: // 偶角交差 降 { for (int iMichi = 73; iMichi <= 80; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 14: // 偶角交差 沈 { for (int iMichi = 81; iMichi <= 88; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 15: // 偶角交差 浮 { for (int iMichi = 89; iMichi <= 96; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 16: // 金桂交差 駆 { for (int iMichi = 97; iMichi <= 102; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)金桂交差 退 // (欠番)金桂交差 踏 case 17: // 金桂交差 跳 { for (int iMichi = 115; iMichi <= 120; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 18: // 銀桂交差 駆 { for (int iMichi = 121; iMichi <= 125; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)銀桂交差 退 // (欠番)銀桂交差 踏 case 19: // 銀桂交差 跳 { for (int iMichi = 136; iMichi <= 140; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 20: // 擦金桂交差 駆 { for (int iMichi = 141; iMichi <= 145; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)擦金桂交差 退 // (欠番)擦金桂交差 踏 case 21: // 擦金桂交差 跳 { for (int iMichi = 156; iMichi <= 160; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 22: // 擦銀桂交差 駆 { for (int iMichi = 161; iMichi <= 165; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } // (欠番)擦銀桂交差 退 // (欠番)擦銀桂交差 踏 case 23: // 擦銀桂交差 跳 { for (int iMichi = 176; iMichi <= 180; iMichi++) { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[iMichi]); } break; } case 24: // 歩打面 上 { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[181]); Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[182]); break; } // (欠番)歩打面 引 case 25: // 香打面 上 { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[183]); Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[184]); break; } // (欠番)香打面 引 case 26: // 桂打面 上 { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[185]); Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[186]); break; } // (欠番)桂打面 引 case 27: // 全打面 { Haiyaku184Array.KukanMasus[Kh185Array.Items[haiyaku]].Add(Michi187Array.Items[187]); break; } } fieldNumber++; } haiyaku++; } return(rows); }
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); } //------------------------------ // データ部だけが残っています。 //------------------------------ ForcePromotionArray.haiyakuMap = new Dictionary <Kh185, Dictionary <int, Kh185> >(); int haiyakuHandle = 0; int rowCount = 0; foreach (List <string> row in rows) { // 偶数行はコメントなので無視します。 if (rowCount % 2 == 0) { goto gt_NextRow; } //---------- // 配役 //---------- Dictionary <int, Kh185> map2 = new Dictionary <int, Kh185>(); ForcePromotionArray.haiyakuMap.Add( Kh185Array.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, Kh185Array.Items[haiyakuHandle_target]); gt_NextColumn: masuHandle++; } haiyakuHandle++; gt_NextRow: rowCount++; } return(rows); }
public static List <List <string> > Load(string path) { List <List <string> > rows = Util_Csv.ReadCsv(path); // 最初の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 = Util_Masu.kanjiToEnum[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); } return(rows); }