private CardDescription ParseCard(SQLiteDataReader reader, ArrayList Cards)
        {
            CardDescription card = new CardDescription();

            card.ID        = Cards.Count + 1;
            card.cheatcode = GetFieldString(reader, "ID").PadLeft(8, '0');;
            card.name      = GetFieldString(reader, "name");
            card.effect    = GetFieldString(reader, "desc");

            int i = GetFieldInt(reader, "OT");

            switch (i)
            {
            case 3:
                card.cardCamp = CardCamp.BothOT;
                break;

            case 2:
                card.cardCamp = CardCamp.TCG;
                break;

            case 1:
                card.cardCamp = CardCamp.OCG;
                break;

            default:
                card.cardCamp = CardCamp.DIY;
                break;
            }

            i = GetFieldInt(reader, "level");
            if (i <= 12)
            {
                card.level = i;
            }
            else
            {
                card.level     = (int)(i & 0xffff);
                card.pendulumR = (int)(i >> 16 & 0xff);
                card.pendulumL = (int)(i >> 24 & 0xff);
            }


            string s = GetFieldString(reader, "ATTRIBUTE");

            switch (s)
            {
            case "1":
                card.element = "地";
                break;

            case "2":
                card.element = "水";
                break;

            case "4":
                card.element = "炎";
                break;

            case "8":
                card.element = "风";
                break;

            case "16":
                card.element = "光";
                break;

            case "32":
                card.element = "暗";
                break;

            case "64":
                card.element = "神";
                break;

            default:
                card.element = "无";
                break;
            }

            s = GetFieldString(reader, "RACE");
            switch (s)
            {
            case "1":
                card.tribe = "战士";
                break;

            case "2":
                card.tribe = "魔法师";
                break;

            case "4":
                card.tribe = "天使";
                break;

            case "8":
                card.tribe = "恶魔";
                break;

            case "16":
                card.tribe = "不死";
                break;

            case "32":
                card.tribe = "机械";
                break;

            case "64":
                card.tribe = "水";
                break;

            case "128":
                card.tribe = "炎";
                break;

            case "256":
                card.tribe = "岩石";
                break;

            case "512":
                card.tribe = "鸟兽";
                break;

            case "1024":
                card.tribe = "植物";
                break;

            case "2048":
                card.tribe = "昆虫";
                break;

            case "4096":
                card.tribe = "雷";
                break;

            case "8192":
                card.tribe = "龙";
                break;

            case "16384":
                card.tribe = "兽";
                break;

            case "32768":
                card.tribe = "兽战士";
                break;

            case "65536":
                card.tribe = "恐龙";
                break;

            case "131072":
                card.tribe = "鱼";
                break;

            case "262144":
                card.tribe = "海龙";
                break;

            case "524288":
                card.tribe = "爬虫类";
                break;

            case "1048576":
                card.tribe = "念动力";
                break;

            case "2097152":
                card.tribe = "幻神兽";
                break;

            case "4194304":
                card.tribe = "创造神";
                break;

            case "8388608":
                card.tribe = "幻龙";
                break;

            default:
                card.tribe = "无";
                break;
            }

            s = "";
            int cardtype = GetFieldInt(reader, "type");

            if ((cardtype & (int)YGOCardType.TYPE_MONSTER) != 0L)
            {
                s = "怪兽";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_SPELL) != 0L)
            {
                s = "魔法";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_TRAP) != 0L)
            {
                s = "陷阱";
            }

            if (s == "怪兽")
            {
                card.atk      = GetFieldString(reader, "atk");
                card.atkValue = int.Parse(card.atk);
                if (card.atkValue < 0)
                {
                    card.atk = "?";
                }

                card.def      = GetFieldString(reader, "def");
                card.defValue = int.Parse(card.def);
                if (card.defValue < 0)
                {
                    card.def = "?";
                }
            }
            else
            {
                card.atk      = "";
                card.atkValue = -10000;
                card.def      = "";
                card.defValue = -10000;
            }


            if (s == "")
            {
                return(null);
            }

            if ((cardtype & (int)YGOCardType.TYPE_NORMAL) != 0L)
            {
                s = "通常" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_FUSION) != 0L)
            {
                s = "融合" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_RITUAL) != 0L)
            {
                s = "仪式" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_SYNCHRO) != 0L)
            {
                s = "同调" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_XYZ) != 0L)
            {
                s = "XYZ" + s;
            }
            //else if ((cardtype & (int)YGOCardType.TYPE_PENDULUM) != 0L)
            //    s = "灵摆" + s;
            else if ((cardtype & (int)YGOCardType.TYPE_EFFECT) != 0L)
            {
                s = "效果" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_QUICKPLAY) != 0L)
            {
                s = "速攻" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_CONTINUOUS) != 0L)
            {
                s = "永续" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_EQUIP) != 0L)
            {
                s = "装备" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_FIELD) != 0L)
            {
                s = "场地" + s;
            }
            else if ((cardtype & (int)YGOCardType.TYPE_COUNTER) != 0L)
            {
                s = "反击" + s;
            }

            if (s == "魔法" || s == "陷阱")
            {
                s = "通常" + s;
            }
            card.sCardType = s;
            card.iCardType = CardDescription.CardTypeMapper(card.sCardType);

            if ((cardtype & (int)YGOCardType.TYPE_SPIRIT) != 0L)
            {
                card.effect = "效果·灵魂:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_UNION) != 0L)
            {
                card.effect = "效果·同盟:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_DUAL) != 0L)
            {
                card.effect = "效果·二重:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_FLIP) != 0L)
            {
                card.effect = "效果·反转:" + card.effect;
            }
            if ((cardtype & (int)YGOCardType.TYPE_TOON) != 0L)
            {
                card.effect = "效果·卡通:" + card.effect;
            }

            s = "";

            //是否同调、超量
            if ((cardtype & (int)YGOCardType.TYPE_SYNCHRO) != 0L)
            {
                s = "同调";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_XYZ) != 0L)
            {
                s = "超量";
            }
            else if ((cardtype & (int)YGOCardType.TYPE_EFFECT) != 0L)
            {
                s = "效果";
            }
            else
            {
                s = "通常";
            }

            //是否调整
            if ((cardtype & (int)YGOCardType.TYPE_TUNER) != 0L)
            {
                s += "·调整";
            }

            //是否灵摆
            if ((cardtype & (int)YGOCardType.TYPE_PENDULUM) != 0L)
            {
                s += "·灵摆";
            }

            if (s.Length > 2)
            {
                card.effect = s + ":" + card.effect;
            }

            return(card);
        }
        private CardDescription ParseCard(OleDbDataReader reader)
        {
            CardDescription card = new CardDescription();

            card.ID        = int.Parse(GetFieldString(reader, "CardID")) - 1;
            card.japName   = GetFieldString(reader, "JPCardName");
            card.name      = GetFieldString(reader, "SCCardName");
            card.enName    = GetFieldString(reader, "ENCardName");
            card.sCardType = GetFieldString(reader, "SCCardType");
            card.tribe     = GetFieldString(reader, "SCCardRace");
            card.package   = GetFieldString(reader, "CardBagNum");
            card.element   = GetFieldString(reader, "SCCardAttribute");
            try
            {
                card.level = int.Parse(GetFieldString(reader, "CardStarNum"));
            }
            catch
            {
                card.level = -1;
            }
            card.infrequence = GetFieldString(reader, "SCCardRare");
            card.atk         = GetFieldString(reader, "CardAtk");
            card.def         = GetFieldString(reader, "CardDef");
            card.effect      = GetFieldString(reader, "SCCardDepict").Replace(" ", "");
            card.cheatcode   = GetFieldString(reader, "CardPass");
            card.adjust      = GetFieldString(reader, "CardAdjust");
            card.associate   = GetFieldString(reader, "CardUnion");
            card.oldName     = GetFieldString(reader, "CardOnceName");
            card.shortName   = GetFieldString(reader, "CardAbbrName");
            string l = GetFieldString(reader, "SCCardBan");

            switch (l)
            {
            case "无限制":
                card.limit = 3;
                break;

            case "禁止卡":
                card.limit = 0;
                break;

            case "限制卡":
                card.limit = 1;
                break;

            case "准限制卡":
                card.limit = 2;
                break;

            default:
                card.limit = -4;
                break;
            }

            l = GetFieldString(reader, "CardCamp").Trim();
            switch (l)
            {
            case "TCG、OCG":
                card.cardCamp = CardCamp.BothOT;
                break;

            case "TCG":
                card.cardCamp = CardCamp.TCG;
                break;

            case "OCG":
                card.cardCamp = CardCamp.OCG;
                break;

            case "DIY":
                card.cardCamp = CardCamp.DIY;
                break;
            }

            if (string.Equals(card.atk, "9999"))
            {
                card.atk      = "?";
                card.atkValue = -1;
            }
            else
            {
                try
                {
                    card.atkValue = int.Parse(card.atk);
                }
                catch
                {
                    card.atkValue = -2;
                }
            }
            if (string.Equals(card.def, "9999"))
            {
                card.def      = "?";
                card.defValue = -1;
            }
            else
            {
                try
                {
                    card.defValue = int.Parse(card.def);
                }
                catch
                {
                    card.defValue = -2;
                }
            }

            if (string.Equals(card.sCardType, "普通怪兽"))
            {
                card.sCardType = "通常怪兽";
            }
            card.iCardType = CardDescription.CardTypeMapper(card.sCardType);

            string sdcardtype = GetFieldString(reader, "SCDCardType").Trim();

            if (sdcardtype.Length > 1)
            {
                if (!string.Equals(card.effect.Substring(0, sdcardtype.Length), sdcardtype))
                {
                    card.effect = sdcardtype + ":" + card.effect;
                }
            }

            string seffect = GetFieldString(reader, "CardEfficeType");

            string[]      ss = seffect.Split(new char[] { ',', ',' });
            StringBuilder sb = new StringBuilder();

            foreach (string s in ss)
            {
                string s2 = (string)ht[s];
                sb.Append(s2);
                sb.Append(",");
            }
            if (sb.Length > 0)
            {
                sb.Length--;
            }
            card.effectType = sb.ToString();

            return(card);
        }
        private CardDescription ParseCard(CardDescription card, string info)
        {
            string[] infos = info.Split(',');

            //处理文本
            for (int i = 0; i < infos.Length; i++)
            {
                //空字符串不处理
                if (infos[i].Length > 0)
                {
                    //过滤开始的空格
                    while (infos[i][0] == ' ')
                    {
                        infos[i] = infos[i].Substring(1, infos[i].Length - 1);
                        if (infos[i].Length == 0)
                        {
                            break;
                        }
                    }

                    //转换双引号
                    infos[i] = infos[i].Replace("\"", "\"\"");
                }
            }

            //卡片类型
            string s = infos[0].Substring(infos[0].Length - 2, 2);

            if (s == "怪兽")
            {
                card.sCardType = infos[0];
                for (int i = 1; i < 7; i++)
                {
                    s = infos[i].Substring(0, 3);
                    string s2 = infos[i].Substring(3);
                    switch (s)
                    {
                    case "种族:":
                        card.tribe = s2;
                        break;

                    case "属性:":
                        card.element = s2;
                        break;

                    case "星级:":
                        try
                        {
                            card.level = int.Parse(s2);
                        }
                        catch
                        {
                            card.level = -1;
                        }
                        break;

                    case "攻击:":
                        //攻击
                        card.atk = s2;
                        if (card.atk.Equals("?") || card.atk.Equals("?"))
                        {
                            card.atkValue = -1;
                        }
                        else
                        {
                            try
                            {
                                card.atkValue = int.Parse(card.atk);
                            }
                            catch
                            {
                                card.atkValue = -2;
                            }
                        }
                        break;

                    case "防御:":
                        card.def = s2;
                        if (card.def.Equals("?") || card.def.Equals("?"))
                        {
                            card.defValue = -1;
                        }
                        else
                        {
                            try
                            {
                                card.defValue = int.Parse(card.def);
                            }
                            catch
                            {
                                card.defValue = -2;
                            }
                        }
                        break;

                    case "效果:":
                        card.effect = s2;
                        break;
                    }
                }
                for (int i = 7; i < infos.Length; i++)
                {
                    card.effect += "," + infos[i];
                }
            }
            else
            {
                s = infos[0].Substring(0, 5);
                if (s == "魔法种类:" || s == "陷阱种类:")
                {
                    card.sCardType = infos[0].Substring(5, 2) + infos[0].Substring(0, 2);
                    card.atk       = "";
                    card.atkValue  = -10000;
                    card.def       = "";
                    card.defValue  = -10000;

                    card.effect = infos[1].Substring(3);
                    for (int i = 2; i < infos.Length; i++)
                    {
                        card.effect += "," + infos[i];
                    }
                }
            }
            card.iCardType = CardDescription.CardTypeMapper(card.sCardType);

            return(card);
        }
        private CardDescription ParseCard(Document doc)
        {
            CardDescription card = new CardDescription();

            card.ID        = int.Parse(GetFieldString(doc, "ID"));
            card.name      = GetFieldString(doc, "name");
            card.japName   = GetFieldString(doc, "japName");
            card.enName    = GetFieldString(doc, "enName");
            card.oldName   = GetFieldString(doc, "oldName2");
            card.shortName = GetFieldString(doc, "shortName2");
            card.sCardType = GetFieldString(doc, "cardType");
            card.iCardType = CardDescription.CardTypeMapper(card.sCardType);
            if (CardDescription.isMonsterCard(card))
            {
                card.level     = int.Parse(GetFieldString(doc, "level"));
                card.pendulumL = int.Parse(GetFieldString(doc, "pendulumL"));
                card.pendulumR = int.Parse(GetFieldString(doc, "pendulumR"));
                card.element   = GetFieldString(doc, "element");
                card.tribe     = GetFieldString(doc, "tribe");
                card.atk       = GetFieldString(doc, "atk");
                card.atkValue  = int.Parse(GetFieldString(doc, "atkValue"));
                card.def       = GetFieldString(doc, "def");
                card.defValue  = int.Parse(GetFieldString(doc, "defValue"));
            }
            card.effectType  = GetFieldString(doc, "effectType");
            card.effect      = GetFieldString(doc, "effect");
            card.infrequence = GetFieldString(doc, "infrequence");
            card.package     = GetFieldString(doc, "package");
            card.limit       = int.Parse(GetFieldString(doc, "limit"));
            if (card.limit == -5)
            {
                card.cardCamp = CardCamp.DIY;
                card.limit    = 3;
            }
            card.cheatcode = GetFieldString(doc, "cheatcode");
            card.aliasList = GetFieldString(doc, "aliasList");
            card.adjust    = GetFieldString(doc, "adjust").Trim();

            string s = GetFieldString(doc, "cardCamp").Trim();

            switch (s)
            {
            case "TCG、OCG":
                card.cardCamp = CardCamp.BothOT;
                break;

            case "TCG":
                card.cardCamp = CardCamp.TCG;
                break;

            case "OCG":
                card.cardCamp = CardCamp.OCG;
                break;

            case "DIY":
                card.cardCamp = CardCamp.DIY;
                break;
            }

            return(card);
        }
        private CardDescription ParseCard(SQLiteDataReader reader)
        {
            CardDescription card = new CardDescription();

            card.ID        = int.Parse(GetFieldString(reader, "id"));
            card.japName   = GetFieldString(reader, "japName");
            card.name      = GetFieldString(reader, "name");
            card.enName    = GetFieldString(reader, "enName");
            card.sCardType = GetFieldString(reader, "SCardType");
            card.tribe     = GetFieldString(reader, "tribe");
            card.package   = GetFieldString(reader, "package");
            card.element   = GetFieldString(reader, "element");
            try
            {
                card.level = int.Parse(GetFieldString(reader, "level"));
            }
            catch
            {
                card.level = -1;
            }
            try
            {
                card.pendulumL = int.Parse(GetFieldString(reader, "pendulumL"));
                card.pendulumR = int.Parse(GetFieldString(reader, "pendulumR"));
            }
            catch
            {
                card.pendulumL = 0;
                card.pendulumR = 0;
            }
            card.infrequence = GetFieldString(reader, "infrequence");
            card.atk         = GetFieldString(reader, "atk");
            card.def         = GetFieldString(reader, "def");
            card.effect      = GetFieldString(reader, "effect").Replace(" ", "");
            card.cheatcode   = GetFieldString(reader, "cheatcode");
            card.adjust      = GetFieldString(reader, "adjust");
            card.oldName     = GetFieldString(reader, "oldName");
            card.shortName   = GetFieldString(reader, "shortName");
            string l = GetFieldString(reader, "ban");

            switch (l)
            {
            case "无限制":
                card.limit = 3;
                break;

            case "禁止卡":
                card.limit = 0;
                break;

            case "限制卡":
                card.limit = 1;
                break;

            case "准限制卡":
                card.limit = 2;
                break;

            default:
                card.limit = -4;
                break;
            }

            l = GetFieldString(reader, "CardCamp").Trim();
            switch (l)
            {
            case "TCG、OCG":
                card.cardCamp = CardCamp.BothOT;
                break;

            case "TCG":
                card.cardCamp = CardCamp.TCG;
                break;

            case "OCG":
                card.cardCamp = CardCamp.OCG;
                break;

            case "DIY":
                card.cardCamp = CardCamp.DIY;
                break;
            }

            if (string.Equals(card.atk, "9999"))
            {
                card.atk      = "?";
                card.atkValue = -1;
            }
            else
            {
                try
                {
                    card.atkValue = int.Parse(card.atk);
                }
                catch
                {
                    card.atkValue = -2;
                }
            }
            if (string.Equals(card.def, "9999"))
            {
                card.def      = "?";
                card.defValue = -1;
            }
            else
            {
                try
                {
                    card.defValue = int.Parse(card.def);
                }
                catch
                {
                    card.defValue = -2;
                }
            }

            if (string.Equals(card.sCardType, "普通怪兽"))
            {
                card.sCardType = "通常怪兽";
            }
            card.iCardType = CardDescription.CardTypeMapper(card.sCardType);

            string sdcardtype = GetFieldString(reader, "CardDType").Trim();

            if (sdcardtype.Length > 1)
            {
                if (!string.Equals(card.effect.Substring(0, sdcardtype.Length), sdcardtype))
                {
                    card.effect = sdcardtype + ":" + card.effect;
                }
            }

            return(card);
        }