/// <summary> /// SFEN文字列と、出力ファイル名を指定することで、局面の画像ログを出力します。 /// </summary> /// <param name="sfenstring"></param> /// <param name="outFile"></param> /// <param name="reportEnvironment"></param> /// <returns></returns> public static bool Write_ForTest( string sfenstring, string relFolder, string outFile, KyokumenPngEnvironment reportEnvironment ) { bool successful = true; //System.Windows.Forms.MessageBox.Show($@"{sfenstring} //{outFile}", "局面PNG書き出し"); // // SFEN → RO_SfenStartpos // ISfenPosition2 ro_SfenStartpos; string rest; if (!Sfenstring146Conv.ToKyokumen2(sfenstring, out rest, out ro_SfenStartpos)) { //System.Windows.Forms.MessageBox.Show(sfenstring,"sfenstringパース失敗"); successful = false; goto gt_EndMethod; } // テスト・プログラム用 Util_KyokumenPng_Writer.Write1( ro_SfenStartpos.ToKyokumen1(), -1, //移動元升不明 -1, //移動先升不明 KyokumenPngArgs_FoodOrDropKoma.UNKNOWN, //取った駒不明 "", //指し手SFEN relFolder, outFile, reportEnvironment ); gt_EndMethod: return(successful); }
public static bool TryParse( string inputLine, out StartposImporter instance, out string rest ) { bool successful = true; ISfenPosition2 ro_SfenStartpos; if (!Sfenstring146Conv.ToKyokumen2(inputLine, out rest, out ro_SfenStartpos)) { successful = false; instance = null; goto gt_EndMethod; } instance = new StartposImporter(inputLine, ro_SfenStartpos); gt_EndMethod: return(successful); }
/// <summary> /// ************************************************************************************************************************ /// 「lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1」といった記述を解析します。 /// ************************************************************************************************************************ /// </summary> /// <returns></returns> public static bool ToKyokumen2( string inputLine, out string rest, out ISfenPosition2 result_kyokumen2 ) { // 頭に 「position」 があれば、外します。 { inputLine = inputLine.TrimStart(); if (inputLine.StartsWith("position")) { inputLine = inputLine.Substring("position".Length); } } // 頭に 「startpos」があれば、置き換えます。 { inputLine = inputLine.TrimStart(); if (inputLine.StartsWith("startpos")) { inputLine = inputLine.Substring("startpos".Length); } inputLine = $"sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1 { inputLine }"; } bool successful = false; result_kyokumen2 = null; // 1~27 string[] stra = new string[28]; //stra[0] = "";//未使用 for (int i = 1; i < 28; i++) { stra[i] = ""; } rest = inputLine; bool startposPattern = false; //------------------------------------------------------------ // リスト作成 //------------------------------------------------------------ if (!startposPattern) { MatchCollection mc = regexOfStartpos.Matches(inputLine); foreach (Match m in mc) { if (0 < m.Groups.Count) { // 残りのテキスト rest = inputLine.Substring(0, m.Index) + inputLine.Substring(m.Index + m.Length, inputLine.Length - (m.Index + m.Length)); stra[1] = m.Groups[1].Value; //1段目 stra[2] = m.Groups[2].Value; //2段目 stra[3] = m.Groups[3].Value; //3段目 stra[4] = m.Groups[4].Value; //4段目 stra[5] = m.Groups[5].Value; //5段目 stra[6] = m.Groups[6].Value; //6段目 stra[7] = m.Groups[7].Value; //7段目 stra[8] = m.Groups[8].Value; //8段目 stra[9] = m.Groups[9].Value; //9段目 stra[10] = m.Groups[10].Value; //先後 stra[11] = m.Groups[11].Value; //持駒▲王 stra[12] = m.Groups[12].Value; //持駒▲飛 stra[13] = m.Groups[13].Value; //持駒▲角 stra[14] = m.Groups[14].Value; //持駒▲金 stra[15] = m.Groups[15].Value; //持駒▲銀 stra[16] = m.Groups[16].Value; //持駒▲桂 stra[17] = m.Groups[17].Value; //持駒▲香 stra[18] = m.Groups[18].Value; //持駒▲歩 stra[19] = m.Groups[19].Value; //持駒△王 stra[20] = m.Groups[20].Value; //持駒△飛 stra[21] = m.Groups[21].Value; //持駒△角 stra[22] = m.Groups[22].Value; //持駒△金 stra[23] = m.Groups[23].Value; //持駒△銀 stra[24] = m.Groups[24].Value; //持駒△桂 stra[25] = m.Groups[25].Value; //持駒△香 stra[26] = m.Groups[26].Value; //持駒△歩 stra[27] = m.Groups[27].Value; //手目 if ( !( stra[1] == "" && stra[2] == "" && stra[3] == "" && stra[4] == "" && stra[5] == "" && stra[6] == "" && stra[7] == "" && stra[8] == "" && stra[9] == "" && stra[10] == "" && stra[11] == "" && stra[12] == "" && stra[13] == "" && stra[14] == "" && stra[15] == "" && stra[16] == "" && stra[17] == "" && stra[18] == "" && stra[19] == "" && stra[20] == "" && stra[21] == "" && stra[22] == "" && stra[23] == "" && stra[24] == "" && stra[25] == "" && stra[26] == "" && stra[27] == "" ) ) { result_kyokumen2 = Sfenstring146Conv.ReadString2( stra[1], //1段目 stra[2], //2段目 stra[3], //3段目 stra[4], //4段目 stra[5], //5段目 stra[6], //6段目 stra[7], //7段目 stra[8], //8段目 stra[9], //9段目 stra[10], //先後 stra[11], //持駒▲王 stra[12], //持駒▲飛 stra[13], //持駒▲角 stra[14], //持駒▲金 stra[15], //持駒▲銀 stra[16], //持駒▲桂 stra[17], //持駒▲香 stra[18], //持駒▲歩 stra[19], //持駒△王 stra[20], //持駒△飛 stra[21], //持駒△角 stra[22], //持駒△金 stra[23], //持駒△銀 stra[24], //持駒△桂 stra[25], //持駒△香 stra[26], //持駒△歩 stra[27] //手目 ); successful = true; } } // 最初の1件だけ処理して終わります。 break; } } rest = rest.Trim(); //// 解析失敗時用 //{ // StringBuilder sb = new StringBuilder(); // sb.Append($"解析失敗☆ inputLine=[{ inputLine }]"); // for (int i = 1; i < 28; i++) // { // sb.Append($"str{ i }[{ stra[i] }]"); // } // Debug.Assert(result_Sfenstring != null, sb.ToString()); // Util_SfenstringReader.Assert_Koma40(result_Sfenstring, $"inputLine=[{ inputLine }]"); //} return(successful); }