主题:读出这个文件
wjp1015
[专家分:0] 发布于 2008-01-14 17:47:00
有时间的话请帮我读下这个文件,谢谢
最后更新于:2008-01-15 09:44:00
回复列表 (共17个回复)
沙发
bcahzvip [专家分:6040] 发布于 2008-01-15 03:19:00
不知道是不是看错。结构不对!~
板凳
华山论剑 [专家分:5310] 发布于 2008-01-15 09:13:00
经我观察,这个文件无论怎么读都有些不对,数据不一定是1字节对齐的,要不就是文件或者结构不相匹配。能否提供VC写文件部分研究下,如果是上次我已经下了的,就不用了。
3 楼
wjp1015 [专家分:0] 发布于 2008-01-15 09:44:00
谢谢了,
文件格式好像错了
这个新附件是可能的格式和读文件的vc源码(部分)
4 楼
wjp1015 [专家分:0] 发布于 2008-01-15 09:48:00
能否根据你以前下的那个源码的void CReadTickDlg::OnReadHq() 这个过程,找出文件的格式呢?
5 楼
华山论剑 [专家分:5310] 发布于 2008-01-15 10:07:00
我先试试。
6 楼
brokenworld [专家分:2640] 发布于 2008-01-15 12:49:00
96000388641821851982012141842022530245549571001506800001721258469105278369172125846912115382690000000000000000000000000000000000000000000000001281436172961523973000054858469019283690200133700000001281850017665000641744883690064650032650672067102091727112814361720000000000000000011200011053947100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000383712182185198201485648510185549571096150680000064846901128469012884690328469024083690012863011284690048650000000000000000000000000000000000144660192916900000144846908084690000000000128630016065000022792846900326500326500208650020865001126600646500000000000001200011053947100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382451918218519820148564853024454957101601506800000648769022485690648769048856902088569003667022485690128166670000000000000000000000000000000006527119214715672000006487690128866902243419700000012819100646500065217248856900326500064020416970040190700144163700124196700000000000000120001105394710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038197271821851982014856485502355495710224150680000080816902088069080816902088069016806900160640224806900128630
前1000个字节的内容。你自己分析
7 楼
华山论剑 [专家分:5310] 发布于 2008-01-15 13:09:00
To: wjp1015:
新给出的结构和文件仍然不符(文件是对的),我又看了看你以前的VC文件,读取hq文件这块有好几步,还是嵌套的,转化成VB的代码相当麻烦和花时间,你再研究下。
大致的流程是(以你上面的文件为例):
1、先读取一个4字节的Long出来(但只有低字节有内容,用一个byte接收就行,VC中用int读出,然后赋值给一个char),这个数字是96,表示后面的记录数是96个;
2、分配96个Hqdat结构的内存(VB中声明变量数组就行),HQDat的结构如下:
typedef struct
{
WORD NameID;
char CName[9];
}HQDAT;
再分配96个Q_RECORD结构内存,就是你上面附件中的很长的结构;
typedef struct
{
BYTE MarketID;
BYTE ClassID;
WORD NameID; //include DDate.
char CName[8]; //Chinese Name
char Pad1; //always set to zero to terminate CName.
CTime Time;
//Original data.
float Code;
float Close;
float Open;
float New;
......
}Q_RECORD;
3、依次读取96个CWarn结构、byType(单字节)、Decimal(Long)、LastInfTime(CTime,即Long)、CStockInfor结构。
4、把Q_RECORD的NameID赋值给HQDat的NameID;
因为太花时间,恐怕还要靠你自己。
8 楼
华山论剑 [专家分:5310] 发布于 2008-01-15 13:15:00
读完hq文件,后面的dbs文件更加麻烦,但是在VC中就简单得多,因为按结构顺次读取就行了,但VB中我找不到简便的方法用结构以1字节对齐方式读取文件(编译执行文件或者内存中的结构我有办法,但不适合文件读取)。
9 楼
wjp1015 [专家分:0] 发布于 2008-01-15 13:24:00
谢谢你了,我其实只要两个内容(nameid和cname),dbs文件我都能读了,现在就剩下这个文件的这两个内容读不出来了,晕
10 楼
wjp1015 [专家分:0] 发布于 2008-01-15 14:47:00
不对啊 ,“”3、依次读取96个CWarn结构、byType(单字节)、Decimal(Long)、LastInfTime(CTime,即Long)、CStockInfor结构。“”CWarm结构没有nameid和cname信息,CStockInfor结构里也没有,那Q_RECORD的nameid和cname从什么地方来的啊?晕,这个文件!~~~~
我来回复