/// <summary> /// ストリームをPQR構造体に変換します。 /// </summary> /// <returns></returns> public PqrData ConvertToPqrData() { PqrData pqr = new PqrData(); var list = new List <int>(); //前後の改行を削除しておく var str = Stream.Trim(new char[] { '\r', '\n' }); str = str.Replace("\r", string.Empty); str = str.Replace("\n", string.Empty); //1行のCSVから各フィールドを取得するための正規表現 System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex( @"^(?<size>\d+\s\d+\x3A)(?<row>(-?\d+\s?)+\x3A)+(?<one>-?\d+\s-?\d+\x3A)(?<two>\d+\s\d+\x3A)$", System.Text.RegularExpressions.RegexOptions.None); System.Text.RegularExpressions.MatchCollection mc = regex.Matches(str); foreach (System.Text.RegularExpressions.Match m in mc) { list.Clear(); list = ConvertToList(m.Groups["size"].Value.Replace(":", " ")); pqr.Size = new Size(list[0], list[1]); pqr.Fields = new int[pqr.Size.Height, pqr.Size.Width]; for (int i = 0; i < m.Groups["row"].Captures.Count; i++) { list.Clear(); list = ConvertToList(m.Groups["row"].Captures[i].Value.Replace(":", " ")); for (int j = 0; j < list.Count; j++) { pqr.Fields[i, j] = list[j]; } } list.Clear(); list = ConvertToList(m.Groups["one"].Value.Replace(":", " ")); pqr.One = new Coordinate(list[1] - 1, list[0] - 1); list.Clear(); list = ConvertToList(m.Groups["two"].Value.Replace(":", " ")); pqr.Two = new Coordinate(list[1] - 1, list[0] - 1); } return(pqr); }
/// <summary> /// PQRデータが正規かどうか判定します。 /// </summary> /// <param name="pqr"></param> /// <returns></returns> public static bool IsRegular(this PqrData pqr) { bool isRegular = true; if (pqr.Fields == null) { MessageBox.Show("PQRファイルの読み込みに失敗しました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } if (pqr.One.X < 0 || pqr.One.Y < 0) { MessageBox.Show("1人目のエージェントの位置" + pqr.One + "が不正です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); pqr.One = new Coordinate(0, 0); isRegular = false; } if (pqr.Two.X < 0 || pqr.Two.Y < 0) { MessageBox.Show("2人目のエージェントの位置" + pqr.One + "が不正です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); pqr.Two = new Coordinate(0, 0); isRegular = false; } return(isRegular); }