示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }