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); }
/// <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); }