FLASH采取简略的数据库棉纸。SQLite使具体化在FLASH的宣布参加竞选用纸覆盖中 3的车道,但眼前还浊度冲洗是到何种地步应用刚过去的车道器的。。总的说来,对同花顺数据结构的解析不喜欢即将到来的复杂,加浓宣布参加竞选包说话中肯SQLite用纸覆盖已由N重行编辑。,但用SQLite 处置机的简略应用,它不印象规范数据库用纸覆盖的读取。,自然,它也过错支援将加浓数据用纸覆盖作为规范数据库用纸覆盖读取。。
总的说来,FLASH的数据用纸覆盖可以分为两类,究竟哪一个人是历史数据用纸覆盖,二是从事金融活动下的财务数据用纸覆盖。。
历史数据用纸覆盖,用子一览表表名歧视行情行为准则,在子一览表表下用用纸覆盖名歧视买卖作用(包孕贴壁纸)、前途附加的人。。用纸覆盖体式以简略的体式应用,每标号据用纸覆盖由:
用纸覆盖头;
列界说;
满意的;
三个有些结合。
从事金融活动下的数据用纸覆盖,独自的用纸覆盖用于容受财产典型的数据。,因而它是一种复合体式,每标号据用纸覆盖由:
用纸覆盖头;
列界说;
填补区域;
复合使用钥匙数据块;
满意的;
第五有些结合。
用纸覆盖头
用纸覆盖头被正规军到16八位位组。,包孕:
byte [6],6 八位位组一定尺寸的,正规军为 {0x68,0x64,0x31,0x2E, 0x30,0x00},用于表现特性的数据用纸覆盖的典型;
dword,4 八位位组一定尺寸的,记载满意的区域说话中肯章本利之和;
word,2 八位位组一定尺寸的,记载满意的区域的鼻授予;
word,2 八位位组一定尺寸的,记载满意的区域中每个记载的八位位组一定尺寸的。;
word,2八位位组一定尺寸的,记载列界说的列数;
列界说
列界说正规军到4 一组八位位组,评分列,第4 八位位组列满意的的八位位组一定尺寸的,因应用了1 八位位组表现,所以数据用纸覆盖每列的最大一定尺寸的为255个八位位组。
填补区域
财务一览表说话中肯数据用纸覆盖,应用包孕使用钥匙的复合体式。在列界说和使用钥匙数据块经过有究竟哪一个人未应用的填补区域。,填补区域的一定尺寸的无不列界说的两倍。,用纸覆盖头迁徙 0x0E 处 WORD 典型 * 2。
据我们家见闻,刚过去的区域总的说来被应用。 0x00 填补,可以保存以备未来应用。
复合使用钥匙数据块
财务一览表说话中肯数据用纸覆盖,该用纸覆盖的满意的区域不使具体化属于,相反,将该满意的放在独自的使用钥匙区域中。。使用钥匙区域的鼻授予 = 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体式。,从总计用纸覆盖的多八位位组印处置,用纸覆盖的必须的印编码应该是GB23编码。,所以,刚过去的有些的原始处置应该是GB23 12编码读的。;
word,2 八位位组一定尺寸的,表现特性的记载Ar中实践未应用的记载数。,微不足道的论述了相干棉纸办法。;
dword,4 八位位组一定尺寸的,表现特性的属于此事务的记载的开端下标。,迂回的是从0用纸覆盖中记载的 开端的序列号,过错用纸覆盖的偏移地址,它的实践偏移地址 = 满意的区域的鼻地址 + 这就开端订阅了 * 记载的一定尺寸的;
word,2 个八位位组一定尺寸的,记载各式各样的买卖记载的章标号。;
总体来说,使用钥匙用纸覆盖的实践数据由两有些结合。,究竟哪一个人是使用钥匙数据区域,另类的是记载满意的数据区域。。对应于使用钥匙的记载满意的数据被划分为块。,即,每一种交易分类无不应用正规军的分类。、在陆续满意的数据区域中存储器相当的数据,因而在实践的数据存储器议事程序中,有究竟哪一个人数据区域无实践应用。。
复合用纸覆盖经过两种办法表现特性的有效和有效记载。,率先,该使用钥匙记载使具体化在其应用的数据区域说话中肯记载本利之和。、有效记载数,实践应用的记载章的本利之和;其次,复合用纸覆盖的记载无不应用4典型的It32。 用于表现特性的时期的列的提出,即使该列的值为<=0,则表明这是有效的数据记载。
满意的
数据满意的开端的地址偏移在用纸覆盖头0x0A处的究竟哪一个人word典型的2八位位组数据教,有效一定尺寸的 = 列一定尺寸的 * 记载条数。
附加物
加浓数据用纸覆盖讲读者和支援类库 https://sourceforge.net/projects/ociathena/
———————————————————————————————
办法过错究竟哪一个人好办法,但很简略,我一倍做过数据辨析,一切都是如此,在一套动作数据库中无存储器数据。,静态章当你需求辨析时,昌盛很快。,更的同行会推进更多的率直的。

上面是日线数据(600787正确的样板不使安定究竟哪一个授予提议):
SQL code

–===============================================================
— 用纸覆盖头(日线)的16八位位组辨析
— 0x6864312E3000 6  正规军
— 0x????????     4  记载数
— 0x4800         2  记载鼻授予 64是错的, 用纸覆盖头 + 列界说 = 72
— 0x3800         2  每条记载的一定尺寸的 56
— 0x0E00         2  每条记载的列数 14
—————————————————————–
— 列界说: 04柱长表现法
— 0x01300004     4 日期
— 0x07700004     4 以结尾的价
— 0x08700004     4 绝对价
— 0x09700004     4 底价
— 0x0B700004     4 结算
— 0x13700004     4 买卖薪水(元)
— 0x0D700004     4 卷(库存)
— 0x0E700004     4 FFFFFFFF
— 0x0F700004     4 FFFFFFFF
— 0x11700004     4 FFFFFFFF
— 0x12700004     4 FFFFFFFF
— 0x50700004     4 FFFFFFFF
— 0xE7700004     4 FFFFFFFF
— 0xE8700004     4 FFFFFFFF
–===============================================================
if object_id(””) is not null drop table #
go
declare @ varbinary(max), @max int, @e float
select @ = BulkColumn, @e = 10 from OPENROWSET(BULK N”X:\…\history\shase\day\”, SINGLE_BLOB) as bin
select @max = substring(@,10,1) 子串,9,1) 子串,8,1) 子串,7,1)
select top 难以完成的值) n = 恒等,72,56) into # from 体系列 a, 体系列 b
;with cte as
(
select
— SQL不提议八位位组交换的作用或办法(二元系),只将每个八位位组的子串转化为分解。:
d = 替换(int),substring(@, 4+n,1) 子串, 3+n,1) 子串, 2+n,1) 子串, 1+n,1)),
o = 替换(int),substring(@, 8+n,1) 子串, 7+n,1) 子串, 6+n,1) 子串, 5+n,1))&0x0FFFFFFF,
p = 替换(int),substring(@,12+n,1) 子串,11+n,1) 子串,10+n,1) 子串, 9+n,1))&0x0FFFFFFF,
q = 替换(int),substring(@,16+n,1) 子串,15+n,1) 子串,14+n,1) 子串,13+n,1))&0x0FFFFFFF,
r = 替换(int),substring(@,20+n,1) 子串,19+n,1) 子串,18+n,1) 子串,17+n,1))&0x0FFFFFFF,
s = 替换(int),substring(@,24+n,1) 子串,23+n,1) 子串,22+n,1) 子串,21+n,1))&0x0FFFFFFF,
t = 替换(int),substring(@,28+n,1) 子串,27+n,1) 子串,26+n,1) 子串,25+n,1))&0x0FFFFFFF,
u = 替换(int),substring(@, 8+n,1))/16,
v = 替换(int),substring(@,12+n,1))/16,
w = 替换(int),substring(@,16+n,1))/16,
x = 替换(int),substring(@,20+n,1))/16,
y = 替换(int),substring(@,24+n,1))/16,
z = 替换(int),substring(@,28+n,1))/16
from #
)
select
id = ROULL编号()超越(定货单) by d DESC),
日期 = d,
结尾的 = o*power(@e,(U和7)*功率(- 1),sign(u&8))),
难以完成的 = p*power(@e,(V和7)*功率(- 1),sign(v&8))),
最底下的 = q*power(@e,(W和7)*功率(- 1),sign(w&8))),
结尾的 = r*power(@e,(x和7)*功率(- 1),sign(x&8))),
薪水 = s*power(@e,(Y和7)*功率(- 1),sign(y&8))),
成交 = t*power(@e,(Z和7)*功率(- 1),sign(z&8)))
from cte

以下是巨大数据,具体满意的将不被写信,只需调理数值表中列的初始一定尺寸的和增量那就够了。:
SQL code

–===============================================================
— 前进的16八位位组腐烂(5/1分钟行)
— 0x6864312E3000 6  正规军
— 0x????????     4  记载数
— 0x3800         2  记载鼻授予 56是对的, 用纸覆盖头 + 列界说 = 56
— 0x2800         2  每条记载的一定尺寸的 40
— 0x0A00         2  每条记载的列数 10
—————————————————————–
— 列界说: 04柱长表现法
— 0x01300004     4 日期: 已编密码, 不要问到何种地步解密, 我不意识到.
— 0x07700004     4 以结尾的价
— 0x08700004     4 绝对价
— 0x09700004     4 底价
— 0x0B700004     4 结算
— 0x13700004     4 买卖薪水(元)
— 0x0D700004     4 卷(库存)
— 0x0E700004     4 FFFFFFFF
— 0x0F700004     4 FFFFFFFF
— 0x12700004     4 FFFFFFFF
–===============================================================

用SQL辨析二元系用纸覆盖体式是近便的的。,可以指导选择/替换,急速的目镜。我通常用来辨析游玩的归档用纸覆盖。,呵呵
c#示例行为准则:
public partial class 使符合1 : Form
{
public 使符合1()
{
InitializeComponent();
}
private void 使符合1_Load(object sender, EventArgs e)
{
string 用纸覆盖名 = @”D:\同花顺软件\同花顺\history\sznse\day\”;//同花顺一览表下history一览表是历史日线数据,我的样板是恰当的岸的00000的1。
byte[] stockFileBytes = (用纸覆盖名);
int recordStartPos = readByteToInt(stockFileBytes, 10, 2);/ /记载鼻授予
int recordLength = readByteToInt(stockFileBytes, 12, 2);/ /记载一定尺寸的
int recordCount = readByteToInt(stockFileBytes, 14, 2)///用纸覆盖说话中肯记载本利之和
int fileBytesLength=stockFileBytes.Length;
int pos=recordStartPos;
List stockDayList = new 列表();/ /每日行数据在列表中暂时读取
do
{
StockDay sd = new StockDay();
sd.DateInt = readByteToInt(stockFileBytes, pos, 4);/ /时期,形成圆锥形表现的,可替换日期型
sd.OpenPrice = readByteToInt(stockFileBytes, pos+4, 2)*野外价钱
sd.HighPrice = readByteToInt(stockFileBytes, pos + 8, 2) * 绝对价
sd.LowPrice = readByteToInt(stockFileBytes, pos + 12, 2) * 底价
sd.ClosePrice = readByteToInt(stockFileBytes, pos + 16, 2) * 结算
sd.VolumeValue = readByteToInt(stockFileBytes, pos + 20, 4);/ / /证券交易额
sd.Volume = readByteToInt(stockFileBytes, pos + 24, 4);/ / /大部分
(SD)
pos = pos + recordLength;
} while (POS) < fileBytesLength);
foreach(StockDay sd in stockDayList)
{
(()+”\t”+()+”\n”);
}
}
private string readByteToHex(byte[] stockFileBytes, int startPos, int 一定尺寸的)
{
string r = “”;
for (int) i = startPos + length – 1; i >= startPos; i–)
{
r += stockFileBytes[i].ToString(“X2”);
}
return r;
}
///
///  从究竟哪一个人授予读取八位位组到16个印串。
///
///
///
///
private int readByteToInt(byte[] stockFileBytes, int startPos, int 一定尺寸的)
{
string r = readByteToHex(stockFileBytes, startPos, 一定尺寸的);
int v = (r, 16);
return v;
}
每天的K线打包为 类
public class StockDay
{
int dateInt;
public int DateInt
{
get { return dateInt; }
set { dateInt = value; }
}
DateTime 日期;/日期
public DateTime Date
{
get { return date; }
set { date = value; }
}
float 以结尾的价;以结尾的价
public float OpenPrice
{
get { return openPrice; }
set { openPrice = value; }
}
float 结算;结算
public float ClosePrice
{
get { return closePrice; }
set { closePrice = value; }
}
float 高价钱;/绝对价
public float HighPrice
{
get { return highPrice; }
set { highPrice = value; }
}
float 低价钱;/底价
public float LowPrice
{
get { return lowPrice; }
set { lowPrice = value; }
}
float 大部分;/ / /大部分
public float Volume
{
get { return volume; }
set { volume = value; }
}
float volumeValue;//吞吐量
public float VolumeValue
{
get { return volumeValue; }
set { volumeValue = value; }
}
}
}

同花顺日线数据体式

每日行用纸覆盖谎言历史\xxx \天一览表中。,XXX为股票交易所指定(上海贴壁纸买卖所的一览表为shase或许深圳贴壁纸买卖所的一览表为sznse)。
数据用纸覆盖经过NM表现特性的事务作用(包孕贴壁纸)。、前途附加的人。。每标号据用纸覆盖由:
用纸覆盖头,正规军为16个八位位组,包孕:
byte [6],6 八位位组一定尺寸的,正规军为 {0x68,0x64,0x31,0x2E, 0x30,0x00},用于表现特性的数据用纸覆盖的典型;
dword,4 八位位组一定尺寸的,记载满意的区域说话中肯章本利之和;
word,2 八位位组一定尺寸的,记载满意的区域的鼻授予;(第一百八十四八位位组启动),用纸覆盖头16 列界说168=184)
word,2 八位位组一定尺寸的,记载满意的区域中每个记载的八位位组一定尺寸的。;(168个八位位组,42 x 4 = 168八位位组)
word, 2 八位位组一定尺寸的,记载列满意的的本利之和:(42栏)
列界说:正规军到4 一组八位位组,评分列,第4 八位位组是列满意的一定尺寸的。。(42栏领域),每列4八位位组,总恳谈168个八位位组。
满意的:每天168八位位组,42栏,前7个是日期。、结尾的、难以完成的、最底下的、结尾的、吞吐量、量、末版35个还无被应用。,整个填补0xFF。
坚持到底:
1、结尾的、难以完成的、最底下的、结尾的四标号据都是4八位位组的无表示必须的,只末版究竟哪一个人八位位组是B0,拿 … 来说,CA A0 A4 B0”,把末版的B0改成00,你可以推进刚过去的无表示必须的。,再除号1000,执意实践的数值;
2、快速也用4八位位组的无表示必须的表现。,只末版究竟哪一个人八位位组是3X,拿 … 来说,5B 67 E9 35”,只需把3反而0,也执意说,5B 67 E9 05,我们家可以推进刚过去的无表示必须的。,乘以1000,这执意证券交易额。;
3、该卷也用4八位位组的无表示必须的表现。,只末版究竟哪一个人八位位组是2x,拿 … 来说,1B 0B 27 25”,只需把2反而0,也执意说,1B 0B 27 05,我们家可以推进刚过去的无表示必须的。,再乘以100,这是证券交易额。