Beispiel #1
0
        public static string LoadFeature(string data_name, IUnitDataElements ud, SrcDataReader reader, SRC SRC)
        {
            string line_buf = reader.GetLine();
            string buf      = line_buf;
            string buf2;
            int    i = 0;

            while (true)
            {
                // パイロットデータ時には空行やデータ区切りでブレークする。
                if (string.IsNullOrEmpty(line_buf) || line_buf == "===")
                {
                    break;
                }

                i = i + 1;
                int  ret      = 0;
                bool in_quote = false;
                var  loopTo1  = Strings.Len(buf);
                int  j;
                for (j = 1; j <= loopTo1; j++)
                {
                    switch (Strings.Mid(buf, j, 1) ?? "")
                    {
                    case ",":
                    {
                        if (!in_quote)
                        {
                            ret = j;
                            break;
                        }
                        break;
                    }

                    case "\"":
                    {
                        in_quote = !in_quote;
                        break;
                    }
                    }
                }

                if (ret > 0)
                {
                    buf2 = Strings.Trim(Strings.Left(buf, ret - 1));
                    if (j == 1)
                    {
                        if (Information.IsNumeric(buf2))
                        {
                            break;
                        }
                    }
                    buf = Strings.Trim(Strings.Mid(buf, ret + 1));
                }
                else
                {
                    buf2 = buf;
                    buf  = "";
                }

                // ユニットとアイテムは特殊能力に続いて数値のみの行が続く。
                if (Information.IsNumeric(buf2.Replace("+", "").Replace("-", "")))
                {
                    break;
                }
                else if (string.IsNullOrEmpty(buf2) || Information.IsNumeric(buf2))
                {
                    SRC.AddDataError(reader.InvalidData("行頭から" + i + "番目の特殊能力の設定が間違っています。", data_name));
                }
                else
                {
                    ud.AddFeature(buf2);
                }

                if (string.IsNullOrEmpty(buf))
                {
                    line_buf = reader.GetLine();
                    buf      = line_buf;
                    i        = 0;
                }
            }
            return(line_buf);
        }
Beispiel #2
0
        public static string LoadFeatureOuter(string data_name, IUnitDataElements ud, SrcDataReader reader, SRC SRC)
        {
            int    ret;
            string buf;
            string buf2;
            string line_buf = reader.GetLine();

            if (line_buf == "特殊能力なし")
            {
                line_buf = reader.GetLine();
            }
            else if (line_buf == "特殊能力")
            {
                // 新形式による特殊能力表記
                line_buf = LoadFeature(data_name, ud, reader, SRC);
            }
            else if (Strings.InStr(line_buf, "特殊能力,") == 1)
            {
                // 旧形式による特殊能力表記
                buf = Strings.Mid(line_buf, 6);
                ret = 0;
                bool in_quote = false;
                var  loopTo2  = Strings.Len(buf);
                int  k;
                for (k = 1; k <= loopTo2; k++)
                {
                    switch (Strings.Mid(buf, k, 1) ?? "")
                    {
                    case ",":
                    {
                        if (!in_quote)
                        {
                            ret = k;
                            break;
                        }

                        break;
                    }

                    case "\"":
                    {
                        in_quote = !in_quote;
                        break;
                    }
                    }
                }

                int i = 0;
                while (ret > 0)
                {
                    i    = (i + 1);
                    buf2 = Strings.Trim(Strings.Left(buf, ret - 1));
                    buf  = Strings.Mid(buf, ret + 1);
                    ret  = Strings.InStr(buf, ",");
                    if (!string.IsNullOrEmpty(buf2))
                    {
                        ud.AddFeature(buf2);
                    }
                    else
                    {
                        SRC.AddDataError(reader.InvalidData(SrcFormatter.Format(i + "番目の特殊能力の設定が間違っています。"), data_name));
                    }
                }

                i    = (i + 1);
                buf2 = Strings.Trim(buf);
                if (!string.IsNullOrEmpty(buf2))
                {
                    ud.AddFeature(buf2);
                }
                else
                {
                    SRC.AddDataError(reader.InvalidData(SrcFormatter.Format(i + "番目の特殊能力の設定が間違っています。"), data_name));
                }

                line_buf = reader.GetLine();
            }
            else
            {
                throw reader.InvalidDataException(@"特殊能力の設定が抜けています。", data_name);
            }

            return(line_buf);
        }