예제 #1
0
        /// <summary>
        /// クローンを作成します。
        /// </summary>
        /// <returns></returns>
        public SySet <T1> Clone()
        {
            SySet <T1> clone = new SySet_Ordered <T1>(this.word);

            // 要素をコピーします。
            foreach (T1 element in this.elements_)
            {
                clone.AddElement(element);
            }

            // 親集合のクローンをコピーします。
            foreach (SySet <T1> superset in this.supersets_)
            {
                clone.AddSupersets(superset.Clone());
            }

            return(clone);
        }
예제 #2
0
        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);
        }