|
2精币
rt = io.open("D:\dzh2\data\sh\STKINFO70.DAT","rb")
rt.seek("set",0x44a6)
rt.seek("set",0x5b666)
rtdata = {
byte code[10];
BYTE name[50];
INT datatime;
int unknown1;
float refclose;
float open;
float high;
float low;
float new;
float volume;
float amount;
float lotnow;
float buy1;
float buy2;
float buy3;
float buy4;
float buy5;
float buy1v;
float buy2v;
float buy3v;
float buy4v;
float buy5v;
float sell1;
float sell2;
float sell3;
float sell4;
float sell5;
float sell1v;
float sell2v;
float sell3v;
float sell4v;
float sell5v;
}
data = rt.read(rtdata)
io.open()
io.print(data.code,rt.seek())
io.print(data.name,time(data.datatime - 28800),data.refclose)
io.print(data.open,data.high,data.low,data.new)
io.print(data.volume,data.amount,data.lotnow)
io.print("")
io.print(data.buy1,data.buy2,data.buy3,data.buy4,data.buy5)
io.print(data.buy1v,data.buy2v,data.buy3v,data.buy4v,data.buy5v)
io.print(data.sell1,data.sell2,data.sell3,data.sell4,data.sell5)
io.print(data.sell1v,data.sell2v,data.sell3v,data.sell4v,data.sell5v)
execute("pause")
io.close()
rt.close()
照着前辈的文档,写的一塌糊涂。基址不对,数据结构对了,可是读出来的时间是好几年前的,用数据一比较,果然是前几年的数据。上网一查,原来大智慧已经强制更新了,不再使用STKINFO60.DAT,而是用STKINFO70.DAT来保存实时数据。先找到了文件的基址,计算出一个数据块大小320字节。由于数据结构和旧版的不一样了,需要重新分析。暂时就分析出这么多了,有些数据试不出来是干什么的,以unkonwn命名之。已推导出来的这部分结构体应该满足大部分需求了,剩余的部分可以用byte unknown2[剩下的字节数] 覆盖。
至于块和偏移地址的计算,在白天发的帖子《大智慧数据读取器》里已经写出方法了。
运行结果和大智慧显示的一样。数据位数不同是因为浮点数的关系,可以格式化后输出。
|
|