⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 findata.fxjdata.cs

📁 分析家数据格式解析源码。日线行情、分笔成交
💻 CS
📖 第 1 页 / 共 5 页
字号:

            }

            return tableNames;
        }
        public string GetTableDef(string dataType, string descDataType, bool delOldTable)
        {
            dataType = dataType.Trim(); descDataType = descDataType.Trim();
            string result = "";
            fileStruct dzhFileStruct = new fileStruct((DataTypes)Enum.Parse(typeof(DataTypes), dataType.ToLower()));
            switch (descDataType.ToUpper())
            {
                case "SAS":
                    for (int i = 0; i < dzhFileStruct.fields.GetLength(0); i++)
                    {
                        if (result != "") result += ",";
                        result += dzhFileStruct.fields[i, 0];//字段
                        if ("  ,code,string".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " char(" + dzhFileStruct.fields[i, 3] + ") format=$" + dzhFileStruct.fields[i, 3] + "."; //字符串
                        }
                        else if ("  ,int,single,double".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " num "; //数值类型
                        }
                        else if ("  ,date".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " num format=YYMMDD10."; //date类型
                        }
                        else if ("  ,datetime".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " num format=datetime."; //datetime类型
                        }
                        result += " label='" + dzhFileStruct.fields[i, 1] + "'";//标签

                    }
                    result = "create table FinData." + dataType + "(" + result + ");";
                    if (delOldTable == true)
                    {
                        result = "drop table FinData." + dataType + ";" + result;
                    }
                    result = "proc sql;" + result + "quit;";
                    break;
                case "SASINPUT"://用于SAS直接读取数据时所用的INPUT语句,需进一步修改
                    for (int i = 0; i < dzhFileStruct.fields.GetLength(0); i++)
                    {
                        if ("  ,code,string".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " @(p+" + dzhFileStruct.fields[i, 5] + ") " + dzhFileStruct.fields[i, 0] + " $" + dzhFileStruct.fields[i, 3] + "."; //字符串
                        }
                        else if ("  ,int,date,datetime".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " @(p+" + dzhFileStruct.fields[i, 5] + ") " + dzhFileStruct.fields[i, 0] + " ib" + dzhFileStruct.fields[i, 3] + "."; //数值类型
                        }
                        else if ("  ,single".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " @(p+" + dzhFileStruct.fields[i, 5] + ") " + dzhFileStruct.fields[i, 0] + " float" + dzhFileStruct.fields[i, 3] + "."; //数值类型
                        }
                        else if ("  ,double".IndexOf(dzhFileStruct.fields[i, 2]) > 0)
                        {
                            result += " @(p+" + dzhFileStruct.fields[i, 5] + ") " + dzhFileStruct.fields[i, 0] + " rb" + dzhFileStruct.fields[i, 3] + "."; //数值类型
                        }
                    }
                    break;
                case "FIELDS"://列出字段名称
                    for (int i = 0; i < dzhFileStruct.fields.GetLength(0); i++)
                    {
                        result += " " + dzhFileStruct.fields[i, 0] ;
                    }
                    break;

                default:
                    result = "";
                    break;
            }
            return result;

        }
        public string GetCodeType(string code)
        {
            code = code.Trim().ToUpper();
            if (Regex.IsMatch(code, @"(SH000300)") == true)
            {
                return "zs";
            }
            if (Regex.IsMatch(code, @"(SH60[0-8]\d{3})|(SH90\d{4})|(SZ00[01256789]\d{3})|(SZ20\d{4})|(SZ4[02]\d{4})") == true)
            {
                return "gp";
            }
            else if (Regex.IsMatch(code, @"(SH00000\d)|(SH00001[0-6])") == true)
            {
                return "zs";
            }
            else if (Regex.IsMatch(code, @"(SH[012]\d{5})|(SZ1[0123]\d{4})") == true && Regex.IsMatch(code, @"(SH181\d{3})") == false && Regex.IsMatch(code, @"(SH190\d{3})") == false)
            {
                return "zq";
            }
            else if (Regex.IsMatch(code, @"(SH5[01]\d{4})|(SZ184\d{3})|(SZ1[56]\d{4})") == true)
            {
                return "jj";
            }
            else if (Regex.IsMatch(code, @"(SH58\d{4})|(SZ03\d{4})") == true)
            {
                return "qz";
            }
            else if (Regex.IsMatch(code, @"(SH000\d{3})|(SZ399\d{3})|(SH8[013]\d{4})") == true)
            {
                return "zs";
            }
            return "";
        }
        private string [] GetCodes(string Market)   //读取Day.dat中的代码
        {
            //沪市指数代码转换表,大智慧同时保存沪市两类代码
            string[,] codesRename = new string[,] 
            {
            {"SH1A0001","SH000001"},
            {"SH1A0002","SH000002"},
            {"SH1A0003","SH000003"},
            {"SH1B0001","SH000004"},
            {"SH1B0002","SH000005"},
            {"SH1B0004","SH000006"},
            {"SH1B0005","SH000007"},
            {"SH1B0006","SH000008"},
            {"SH1B0007","SH000010"},
            {"SH1B0008","SH000011"},
            {"SH1B0009","SH000012"},
            {"SH1B0010","SH000013"},
            {"SH1C0003","SH000016"}         
            };
            long len = -1;
            long pos = 0;
            int flag;
            if (DzhDataPath == "")
            {
                msg = @"无法在注册表中到大智慧数据文件目录,请自行将属性 DzhDataPath设置为有效路径,如c:\dzh\data\。";
                return new string[1] { null };
            }
            Market = Market.Trim().ToUpper();
            if (Market == "")
            {
                msg = "Market参数只能是市场简称,如沪市为SH,深市为SZ,香港为HK等。";
                return null;
            }
            string DzhFile = dzhDataPath + Market+@"\DAY.DAT";
            msg="";
            if (!File.Exists(DzhFile))  //DAY.DAT文件不存在
            {
                msg = DzhFile + "不存在!";
                return new string[1] { null };
            }
            try
            {
                this.checkFileStream(DzhFile);
                int secCounts = 0;//文件中证券总数
                string code = "";
                len = fs.Length;
                fs.Position=0;
                flag = br.ReadInt32();
                if (flag == -65823756)   //0xFC139BF4
                {
                    fs.Position = 12;
                    secCounts=br.ReadInt32();
                    string[] codes = new string[secCounts];
                    for (int i = 0; i < secCounts; i++)
                    {
                        pos = 24 + 64*i;
                        if (pos <= len)
                        {
                            fs.Position = pos;
                            code = new string(br.ReadChars(10));//大智慧用10个字节保存代码,一般用6个字节
                            code = Market + code.Replace("\0", "");
                            code = code.Replace("HKHK", "HK");   //香港证券代码本身保存为HKxxxx
                            code = code.ToUpper();
                            for (int icode = 0; icode < codesRename.GetLength(0); icode++)
                            {
                                code = code.Replace(codesRename[icode, 0], codesRename[icode, 1]);
                            }
                            codes[i] = code;
                        }
                    }
                    //fs.Close();
                    msg = "";
                    return codes;
                }
            }
            catch(Exception e)
            {
                 msg=e.Message;
                 
            }
            return new string[1] { null };

        }
        public string[,] GetFields(string dataType)
        {
            msg = "";
            try
            {
                DataTypes d = (DataTypes)Enum.Parse(typeof(DataTypes), dataType.ToLower());
                return GetFields(d);
            }
            catch
            {
                msg = @"输入的参数有误。参数只能是:";
                foreach (string s in Enum.GetNames(typeof(DataTypes)))
                    msg += " \"" + s + "\"";
                msg += @" 或者 ";
                foreach (int i in Enum.GetValues(typeof(DataTypes)))
                    msg += " " + i.ToString();

                return new string[1, 1] { { null } };
            }

        }
        private string[,] GetFields(DataTypes dataType)
        {
            msg = "";
            try
            {
                fileStruct dzhFileStruct = new fileStruct(dataType);
                string[,] fields = new string[dzhFileStruct.fields.GetLength(0), 3];
                //fields[0, 0] = "<字段名>"; fields[0, 1] = "<含义>"; fields[0, 2] = "<类型>";
                for (int i = 0; i < dzhFileStruct.fields.GetLength(0); i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        fields[i, j] = dzhFileStruct.fields[i, j];
                    }
                }

                return fields;
            }
            catch
            {
                msg = "错误"; return new string[1, 1] { { null } };
            }

        }

        public string[,] GetData(string dataType, string code)
        {
            return GetData(dataType, code, "");
        }
        public string[,] GetData(string dataType, string code, string newFileName) 
        {
            try
            {
                DataTypes d = (DataTypes)Enum.Parse(typeof(DataTypes), dataType.ToLower());
                return GetData(d, code,newFileName);
            }
            catch
            {
                msg = @"输入的参数有误。第一个参数只能是:";
                foreach (string s in Enum.GetNames(typeof(DataTypes)))
                    msg += " \"" + s + "\"";
                msg += @" 或者 ";
                foreach (int i in Enum.GetValues(typeof(DataTypes)))
                    msg += " " + i.ToString() ;

                return new string[1, 1] { { null } };
            }
        }
        public string[,] GetData2(string dataType, string code, string newFileName)
        {
            try
            {
                DataTypes d = (DataTypes)Enum.Parse(typeof(DataTypes), dataType.ToLower());
                return GetData(d, code, newFileName);
            }
            catch
            {
                msg = @"输入的参数有误。第一个参数只能是:";
                foreach (string s in Enum.GetNames(typeof(DataTypes)))
                    msg += " \"" + s + "\"";
                msg += @" 或者 ";
                foreach (int i in Enum.GetValues(typeof(DataTypes)))
                    msg += " " + i.ToString();

                return new string[1, 1] { { null } };
            }
        }
        private string[,] GetData(DataTypes dataType,string code,string newFileName) //读取数据,重载
        {
            if (dataType == DataTypes.bk) return GetBK(code);
            if (dataType == DataTypes.pj) return GetPJ(code);
            if (dataType == DataTypes.hqfq) return GetHqfq(dataType,code,newFileName);
            #region 读取数据前初始化

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -