当前位置: 首页 > 编程日记 > 正文

同花顺的数据格式总览(转帖)

原文:http://enterprisebeing.spaces.live.com/Blog/cns!1D3811D0695B6887!172.entry

同花顺采用了简易的数据库组织方式。在同花顺的发布文件包中包括了SQLite 3的驱动,但不是很清楚同花顺是如何使用这个驱动的。基本上,对同花顺数据结构的解析不需要这么复杂,同花顺发布文件包中的SQLite文件被核新程序员重新编译过,不过就与SQLite Manager的简单配合使用来看,并不影响对标准数据库文件的读取,当然,也不支持把同花顺数据文件当成标准的数据库文件进行读取。

基本上,同花顺的数据文件可以分为两类,一类是history\下行情数据文件,另一类是finance\下财务数据文件。

在history\下的数据文件,通过子目录名称识别市场代码,通过子目录下的文件名称识别交易标的(包括股票、期货等等)。文件格式采用的是简单格式,每个数据文件分别由:

  • 文件头;
  • 列定义;
  • 内容;

三个部分组成。

在finance\下的数据文件,采用的是单文件容纳所有品种数据的方式,因此采用的是复合格式,每个数据文件分别由:

  • 文件头;
  • 列定义;
  • 填充区域;
  • 复合索引数据块;
  • 内容;

五个部分组成。

文件头

文件头固定为16个字节,包括:

  • byte [6],6 字节长度,固定为 {0x68,0x64,0x31,0x2E, 0x30,0x00},用于识别数据文件类型;
  • dword,4 字节长度,记录“内容”区域的记录条数;
  • word,2 字节长度,记录“内容”区域的开始位置;
  • word,2 字节长度,记录“内容”区域每条记录的字节长度;
  • word,2字节长度,记录“列定义”的列个数;

列定义

列定义固定为4 个字节一组,标示一个列,第4 个字节为列内容的字节长度,由于是使用1 个字节表示,因此数据文件每列的最大长度为255个字节。

填充区域

在finance\目录下的数据文件,采用的是包括索引的复合格式存储。在列定义和符合索引数据块之间存在着一个未使用的填充区域,填充区域的长度总是列定义数量的两倍,即文件头偏移 0x0E 处 WORD 类型 * 2。

就目前所知,这一区域基本上都使用 0x00 填充,可能是保留未来使用。

复合索引数据块

在finance\目录下的数据文件,文件的“内容”区域并不包含记录所隶属的证券品种,而是把此内容放置在一个单独的索引区域。索引区的开始位置 = 0x10 + 0x04 * 列定义数量 + 0x02 * 列定义数量。

复合索引数据块由三个部分组成:

  • word,2 个字节,记录本索引数据区域的字节长度;
  • word,2 个字节,记录本索引数据区域中所包含的索引的条数;
  • byte[],不定长的索引记录,每条索引记录为18个字节长度,因此总长度 = 索引条数 * 0x12;

索引

每条索引的长度为18个字节,格式分别为:

  • byte,1 字节长度,标识证券品种类型,目前已知的包括3 类4 种标示,分别是:0x10,国内证券;0x48和0x50,港股;0x4A,基金。在“权息资料”中,使用0x50标示港股,在“现金流量”中,使用0x48标示港股,不知道是设计的 bug,还是存在其他用意;
  • byte [9],9 字节长度,标识交易品种的符号,目前已知是ASCII格式,从整个文件的多字节字符处理来看,文件的整体字符编码应该是GB2312编码,因此这一部分原始的处理应该是使用GB2312编码通读;
  • word,2 字节长度,标识隶属此交易品种的记录区域中实际上未使用的记录条数,有关的组织方式下面再详细解释;
  • dword,4 字节长度,标识隶属于此交易品种的记录的开始下标,注意是记录在数据文件中从0 开始排列的顺序号,而不是文件的偏移地址,其实际的偏移地址 = “内容”区域的开始地址 + 此开始下标 * 记录的长度;
  • word,2 个字节长度,标识隶属于此交易品种的记录的条数;

总体来说,存在索引的文件其实际的完整数据由两个部分组成,一个就是索引数据区,另一个就是记录内容数据区。其与索引对应的记录内容数据采取分块的存储模式,即,每一个交易品种总是使用一个固定的、连续的内容数据区存储相对应的数据,因此在实际的数据存储过程中,存在着并未被实际使用的“空余”记录的数据区。

复合文件通过两个方法来识别有效和无效的记录,首先,索引记录其所使用的数据区总容纳的记录条数和未被使用的、无效的记录条数,两者相减可知被实际使用的记录条数;其次,复合文件的记录总是使用一个类型为Int32的4 字节用于标识时间的列开始,如果这个列的值为<=0,则表明这是无效的数据记录。

内容

数据内容开始的地址偏移在文件头0x0A处的一个word类型的2字节数据指示,其有效长度 = 列长度 * 记录条数。

附录
同花顺的数据文件读取器和支持类库在 https://sourceforge.net/projects/ociathena/

转载于:https://www.cnblogs.com/limitplus/archive/2010/04/09/1708033.html

相关文章:

【怎样写代码】对象克隆 -- 原型模式(一):问题案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

狗是放弃了自由的狼

2019独角兽企业重金招聘Python工程师标准>>> 远古时期&#xff0c;狼群与人类争夺食物。它们有灵敏的嗅觉和听觉&#xff0c;往往先于人类找到食物。它们是人类强劲的竞争对手。 然而却有一部分狼&#xff0c;为了偷懒&#xff0c;不去捕猎而选择了依附人类。它们为…

计算机组原理ppt,计算机组原理第三章.ppt

计算机组原理第三章计算机组成原理 毛典辉 北京工商大学计算机与信息工程学院 Email: amaode 进一步结论&#xff1a; 当最高有效位产生进位而符号位无进位时,产生上溢&#xff1b; 当最高有效位无进位而符号位有进位时,产生下溢。 缺点 将多个数一次相加&#xff0c;机器难以实…

DotNet关键知识点——WCF篇(六)

关于WCF消息通信的安全性论题。 1. 传输层面的安全性 一般方法&#xff1a; binding单元中加security单元&#xff0c;security一般含mode属性&#xff0c;一般将其设置为"Transport"&#xff0c;随后在security单元中加入transport单元&#xff0c;并对其参数作设置…

AAC_LC用LATM封装header信息解析 Audio Specific Config格式分析

通常来说AAC的头信息在编解码过程中是可以获取到的&#xff0c;但今天需要根据音频参数生成相应的AAC头。项目中使用的是AAC_LC&#xff0c;今天先对它的结构进行分析。 项目中使用ffmpeg进行音频编码&#xff0c;音频编码库为FAAC&#xff0c;好吧&#xff0c;直接看代码吧。 …

【怎样写代码】对象克隆 -- 原型模式(二):解决方案

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

计算机二级周小丹,亲爱的设计丨周小丹:始终认真,才能保持“天真”

从事室内设计&#xff0c;女性好像天然占了一些优势&#xff0c;比如对色彩和美学的敏感性、更强的沟通能力以及相较大多数男性而言更细致的观察力等等。但在实操层面&#xff0c;室内设计这一行实则非常考验女性设计师的“体能”&#xff0c;比如下工地、熬夜赶图等等。从北京…

最近在招标中评审出一个政府信息化软件

发布时间&#xff1a; &#xff1a;2010-03-31 18:42 浏览次数&#xff1a; &#xff1a; 5 产品名称&#xff1a; 卓技协同政府审批系统 V3.0(http://http://www.exctek.com/)英文名&#xff1a; ExctekSoft.CGA(Collaborative Government Approval) 适用客户&#xff…

克里斯坦森的破坏性创新—《可以量化的管理学》

6.4.4作用点与克里斯坦森的破坏性创新 内容提要&#xff1a;消费者对商品的需求焦点会随着商品的发展而从功能性到可靠性&#xff0c;到便利性&#xff0c;最后转移到价格。克莱顿•克里斯坦森(Clayton M. Christensen)所创造的破坏性创新就是指消费者需求焦点的转移&#xff0…

【怎样写代码】对象克隆 -- 原型模式(三):原型模式

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

楼主考南师计算机学硕,南京师范大学考研详解:据说这所学校不太好考?嗯,是真的!...

学校&#xff1a;南京师范大学地区&#xff1a;江苏省属性&#xff1a;“211工程”院校、“双一流”世界一流学科建设高校关于南师大南京师范大学&#xff0c;地处江苏南京&#xff0c;拥有绝佳的地理位置。在全国第四轮学科评估中&#xff0c;2个学科获得A&#xff0c;4个学科…

asp页面和Asp.net页面传中文参数UrlEncode编码以及接收解码

在asp中加一个链接&#xff0c;指向asp.net网页&#xff0c;但asp.net的网址是经过HttpUtility.UrlEncode转换和HttpUtility.UrlDecode解码的&#xff0c;而asp的server.urlencode却和HttpUtility.UrlEncode的编码方式不一样&#xff0c; 举例&#xff1a;asp.net用Get方式传输…

MyBatis关联查询、多条件查询

MyBatis关联查询、多条件查询 1、一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1、数据库表的设计 班级表&#xff1a; 教师表&#xff1a; 2、实体类的设计 班级表&#xff1a; public class Classes { 9 //定义实体类的属性&#xff0c;与class表中的字段对…

【怎样写代码】对象克隆 -- 原型模式(四):浅克隆与深克隆

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

计算机与控制学院优秀学生,三好学生主要事迹:计算机与控制工程学院王天琪事迹.doc...

三好学生主要事迹&#xff1a;计算机与控制工程学院王天琪事迹“中国好同学”、“中国好男孩”、“中国好男友”——用这“三好”来形容王天琪再合适不过。这个四川男生笑容温暖&#xff0c;彬彬有礼&#xff0c;生长于南方却操着一口标准的普通话&#xff0c;交谈中时而有些羞…

[总结]博客聚合-cnblogs,wordpress,live writer,word2010

一、url地址&#xff1a; cnblogs&#xff1a; http://BusyAnt.cnblogs.com/services/metaweblog.aspx wordpress: http://blog.busyant.cn/xmlrpc.php CSDN&#xff1a;http://blog.csdn.net/busyant/services/metablogapi.aspx 二、配置&#xff1a; word2010&#xff1a;文件…

【怎样写代码】对象克隆 -- 原型模式(五):原型管理器的引入和实现

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包

作者&#xff1a;林冠宏 / 指尖下的幽灵 掘金&#xff1a;https://juejin.im/user/587f0dfe128fe100570ce2d8 博客&#xff1a;http://www.cnblogs.com/linguanh/ GitHub &#xff1a; https://github.com/af913337456/ 为了您的直观体验&#xff0c;请务必看完下面 截图&#…

计算机累加器有加法器功能吗,累加器-累加器ACC的作用

ACC累加器B用于辅助累加器做某些运算的寄存器PSW程序状态字其中最高位是进/借位标志C&#xff1b;PSW.6是辅助进位标志AC&#xff0c;用于标识加减运算中低四位向高四位的进位&#xff1b;PSW.4和PSW.3是寄存器组选择位RS1和RS0&#xff0c;用于从--1FH的32个存储器单元(4组)中…

object expected错误解决方法

写一个页面&#xff0c;引用了另外的js&#xff0c;结果触发js事件时&#xff0c;浏览器显示"object expected "错误&#xff0c;说什么action有错&#xff0c;在action硬是纠结了半天&#xff0c;结果发现是由于action跳转之后&#xff0c;路径错了&#xff0c;所以…

Eclipse优化之设置不自动弹出控制台和Server

有时候Eclipse启动&#xff0c;控制台console不会自动跳出来&#xff0c;需要手工点击该选项卡才行&#xff0c; 按下面的设置&#xff0c;可以让它自动跳出来(或不跳出来)&#xff1a; windows -> preferences -> run/debug -> console 在右边面板勾选或…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(一):问题案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

css menu builder,AutoPlay Menu Builder使用教程【图文教程】

是一个功能强大的光盘自动运行菜单制作工具&#xff0c;使用它,你不需要具备任何专业知识,只需要经过鼠标拖放和几次鼠标点击就可以轻松制作出非常漂亮的自动运行(AutoRun)菜单程序,让你制作菜单象垒积木一样容易!二、软件使用1、如图一所示&#xff0c;软件启动时首先随程序主…

freemarker写select组件报错总结(六)

1、错误描写叙述 六月 26, 2014 10:53:26 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template processing error: "Expression data[text] is undefined on line 9, column 51 in inc/select.ftl."Expression data[text] is undefined on lin…

FPGA中LVDS差分高速传输的实现

低压差分传送技术是基于低压差分信号(Low Volt-agc Differential signaling)的传送技术&#xff0c;从一个电路板系统内的高速信号传送到不同电路系统之间的快速数据传送都可以应用低压差分传送技术来实现&#xff0c;其应用正变得越来越重要。低压差分信号相对于单端的传送具有…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(二):解决方案

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

自动化测试selenium+java学习笔记

//driver后面接 get(String url) 访问指定url页面 getCurrentUrl() 获取当前页面的url地址 getTitle() 获取当前页面的标题 getPageSource() 获取当前页面源代码 quit() …

JS实现继承的几种方法

父类&#xff1a; // 定义一个动物的类 function Animal (name) {// 属性this.name name || Animal;// 实例方法this.sleep function(){console.log(this.name 正在睡午觉&#xff01;);} } // 原型方法 Animal.prototype.eat function(food) {console.log(this.name 正在…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(四):扩展案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

接口测试和单元测试的区别

1、单元测试注重代码逻辑&#xff0c;接口测试注重业务逻辑&#xff1b; 2、单元测试的粒度最小&#xff0c;是测试最小独立的单元模块&#xff08;不依赖其他模块&#xff09;&#xff1b;接口测试不是&#xff0c;会覆盖很多&#xff1b; 3、单元测试是白盒测试&#xff0c…