写股票相关的程序最苦恼的事莫过于没有数据了, 于是参考了网上其他朋友的一些文章,写了一个程序,可以把钱龙里的一些数据导入到数据库,以便进一步使用.

在我的例子里使用的是MS SqlServer 2005, 如果要使用其他数据库,可能某些地方要做一定的修改.

钱龙软件的股票代码按照市场不同保存在两个文件: stockinfo.sha和stockinfo.szn, 分别代表上海和深圳.

下面是我的程序的核心代码:

         private   static   void  ReadStockCodes( string  strPath,  string  p_strMarket)
         {
            FileStream stream = new FileStream(strPath, FileMode.Open, FileAccess.Read);
            BinaryReader b_reader = new BinaryReader(stream);
            SqlCommand cmd = new SqlCommand("", m_conn);
            cmd.Transaction = m_tran;
            cmd.CommandText = "insert into stockinfos ([StockCode] ,[Market] ,[StockName], [IsIndex]) " +
                "VALUES (@StockCode,@Market,@StockName, @IsIndex)";
            cmd.Parameters.Add("@StockCode", SqlDbType.NChar, 6);
            cmd.Parameters.Add("@Market", SqlDbType.NVarChar, 10);
            cmd.Parameters.Add("@StockName", SqlDbType.NVarChar, 20);
            cmd.Parameters.Add("@IsIndex", SqlDbType.Bit);
            try
            {
                while (stream.CanRead)
                {
                    int nIndex = b_reader.ReadInt32();
                    string strCode = GetString(b_reader, 7);
                    int nCnt = 0;
                    List<Byte> endbytes = new List<byte>();
                    endbytes.Add(0);
                    string strName = GetStringTillEnd(b_reader,endbytes, out nCnt);
                    strCode = strCode.Replace('\0', ' ');
                    strName = strName.Replace('\0', ' ');
                    strCode = strCode.Trim();
                    strName = strName.Trim();
                    int n = 0x119;
                    n -= 4 + 7;
                    n -= nCnt;
                    cmd.Parameters[0].Value = strCode;
                    cmd.Parameters[1].Value = p_strMarket;
                    cmd.Parameters[2].Value = strName;
                    int nIsIndex=0;
                    
                    if ((p_strMarket == "SH" && ( strCode.StartsWith("000") || strCode.StartsWith("801"))
                        || 
                        (p_strMarket == "SZ" && ( strCode.StartsWith("399")))
                        ||
                        strName.Contains("指数")))
                    {
                        nIsIndex = 1;
                    }
                    cmd.Parameters[3].Value = nIsIndex;
                    cmd.ExecuteNonQuery();
                    Console.WriteLine("Index={0}, Code={1}, Name={2}, {3}", nIndex, strCode, strName, 
                        nIsIndex==1 ? "指数" : "证券");
                    b_reader.ReadBytes(n);
                }
            }
            catch (EndOfStreamException)
            {
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
                throw;
            }
        }

其中用到的两个读入字符串的方法为:

         public   static   string  GetString(BinaryReader m_reader,  int  p_nLength)
         {
            Encoding mbcs = Encoding.GetEncoding(936);
            Encoding unicode = Encoding.Unicode;

            byte[] byteBuffer = m_reader.ReadBytes(p_nLength);
            byte[] unicodBytes = Encoding.Convert(mbcs, unicode, byteBuffer);
            char[] buffer;// = new char[unicode.GetCharCount(unicodBytes)];
            buffer = unicode.GetChars(unicodBytes);
            // char[] buffer = m_reader.ReadChars(p_nLength);
            string str = new string(buffer);
            str = str.Replace('\x3', '\x20');
            return str.Trim();
        }
         public   static   string  GetStringTillEnd(BinaryReader m_reader, List < byte >  p_endchars,  out   int  p_nLength)
         {
            Encoding mbcs = Encoding.GetEncoding(936);
            Encoding unicode = Encoding.Unicode;
            p_nLength = 0;
            byte[] byteBuffer_0 = new byte[1024];
            byte b;
            do
            {
                b = m_reader.ReadByte();
                p_nLength++;
                byteBuffer_0[p_nLength - 1] = b;
            }
            while (!p_endchars.Contains(b));

            //byteBuffer = m_reader.ReadBytes(p_nLength);
            byte[] byteBuffer= new byte[p_nLength];
            for (int i = 0; i < p_nLength; i++) byteBuffer[i] = byteBuffer_0[i];

            byte[] unicodBytes = Encoding.Convert(mbcs, unicode, byteBuffer);
            char[] buffer;// = new char[unicode.GetCharCount(unicodBytes)];
            buffer = unicode.GetChars(unicodBytes);
            // char[] buffer = m_reader.ReadChars(p_nLength);
            string str = new string(buffer);
            str = str.Replace('\x3', '\x20');
            return str.Trim();
        }

因为程序很简单, 其他不重要的部分我就不放上来了.

转载于:https://www.cnblogs.com/sliencer/archive/2007/03/26/688605.html

从钱龙数据中读取股票代码信息导入到数据库相关推荐

  1. 从钱龙数据中读取股票权息信息导入到数据库

    从钱龙数据中读取股票权息信息导入到数据库 前面写了如果读股票代码和日线数据,下面是如何读股票的权息信息. 钱龙中权息数据存储在QLDATA/history/shase/weight和QLDATA/hi ...

  2. Failed to introspect Class [com.controller.HardWareController] from ClassLoa在ssm中读取串口信息

    标题:Failed to introspect Class [com.controller.HardWareController] from ClassLoa在ssm中读取串口信息 之前使用java程 ...

  3. 从数码照片中读取定位信息

    摘要:数码照片在拍摄时会记录照片的拍摄信息,如果拍照时开启了GPS定位服务功能,则就会记录拍摄时的经纬度坐标及高程信息.本文介绍如何读取数码照片中的位置信息,以及根据位置信息转换成shapefile格 ...

  4. php读取excel并导入数据,PHPExcel读取excel并导入数据库

    PHPExcel是一款php对于excel数据表读写的一个非常棒的插件了,下面我来给大家介绍利用PHPExcel读取excel并导入mysql数据库方法. 例1,代码示例,代码如下:require_o ...

  5. 从属性资源文件中读取连接数据库信息

    从属性资源文件中读取连接数据库信息 jdbc.properties 属性配置文件 driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:330 ...

  6. 物联网:数据淘金——从数据中挖掘有效信息

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 如今是信息时代,得数据者得天下.然而,只是"有"数据还不够,数据的"准确性"和数据的"分析 ...

  7. toad导入数据_配置toad进行导入导出数据库操作

    最近需要对oracle进行导入导出操作,于是研究使用toad进行导入导出oracle数据库操作,现稍作记录. oracle的导入导出不管是否使用toad还是pl/sql工具进行操作,实际上最终都是通过 ...

  8. Python将JSON格式数据转换为SQL语句以便导入MySQL数据库

    前文中我们把网络爬虫爬取的数据保存为JSON格式,但为了能够更方便地处理数据.我们希望把这些数据导入到MySQL数据库中.phpMyadmin能够把MySQL数据库中的数据导出为JSON格式文件,但却 ...

  9. scip指令集_快讯!用于提交物品中SVHC物质信息的SCIP数据库测试版本已经开放

    原标题:快讯!用于提交物品中SVHC物质信息的SCIP数据库测试版本已经开放 2020年2月17日,ECHA公布企业可以开始测试用来提交物品中SVHC物质信息的SCIP数据库测试版,此测试版本能够使企 ...

最新文章

  1. css 圆形背景icon_我写CSS的常用套路(附demo的效果实现与源码)
  2. 雷神开机logo更改_雷神911 pro-钛空版开售,陪你过一个不一样的520
  3. c语言检测文件bom,C语言关联TC中BOMWindow与BOPWindow
  4. 【leetcode】287. 寻找重复数
  5. 围成面积(信息学奥赛一本通-T1359)
  6. 一个apache安装后无法启动的原因分析
  7. Linux下挂载和格式化虚拟磁盘图文教程
  8. springboot1.5.4 log4j
  9. office2010的安装和卸载
  10. python财务预算分析_从审计转到财务分析是怎样一种体验?
  11. 曲线运动与万有引力公式_高一物理曲线运动万有引力试题
  12. Idea,webStorm工具栏显示,添加快捷方式建文件
  13. Banner 怎么实现轮播不同尺寸的图片
  14. re匹配中文格式的字符
  15. 编程(代码、软件)规范(适用嵌入式、单片机、上位机等)
  16. 程序员面试100题之六 最长公共子序列
  17. 计算机网络,看这篇就够了
  18. Could not resolve placeholder 占位符不能被解析
  19. 面试:如何应对人事的面试
  20. 用电脑搭建视频会议系统的方法

热门文章

  1. KeyFinder 快速破解AES密钥
  2. rockchip 修改开机LOGO和注意事项
  3. optional用法
  4. 打卡第5天:安恒元旦杯-爆破鬼才续与linux shell
  5. 通信算法之167: (低空无人机)机载视频通信传输系统基带算法设计
  6. 著名SaaS研究员许卫国:我看XTools上央视
  7. 微信公众号支付开发(一):前期准备
  8. Spark Broadcast总结
  9. 蒙特卡洛树搜索(MCTS)详解
  10. 蒙特卡洛树搜索(MCTS)代码详解【python】