回 帖 发 新 帖 刷新版面

主题:读出这个文件

有时间的话请帮我读下这个文件,谢谢

回复列表 (共17个回复)

沙发

不知道是不是看错。结构不对!~

板凳

经我观察,这个文件无论怎么读都有些不对,数据不一定是1字节对齐的,要不就是文件或者结构不相匹配。能否提供VC写文件部分研究下,如果是上次我已经下了的,就不用了。

3 楼

谢谢了,
文件格式好像错了
这个新附件是可能的格式和读文件的vc源码(部分)

4 楼


能否根据你以前下的那个源码的void CReadTickDlg::OnReadHq() 这个过程,找出文件的格式呢?

5 楼

我先试试。

6 楼

96000388641821851982012141842022530245549571001506800001721258469105278369172125846912115382690000000000000000000000000000000000000000000000001281436172961523973000054858469019283690200133700000001281850017665000641744883690064650032650672067102091727112814361720000000000000000011200011053947100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000383712182185198201485648510185549571096150680000064846901128469012884690328469024083690012863011284690048650000000000000000000000000000000000144660192916900000144846908084690000000000128630016065000022792846900326500326500208650020865001126600646500000000000001200011053947100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382451918218519820148564853024454957101601506800000648769022485690648769048856902088569003667022485690128166670000000000000000000000000000000006527119214715672000006487690128866902243419700000012819100646500065217248856900326500064020416970040190700144163700124196700000000000000120001105394710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038197271821851982014856485502355495710224150680000080816902088069080816902088069016806900160640224806900128630
前1000个字节的内容。你自己分析

7 楼

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 楼

读完hq文件,后面的dbs文件更加麻烦,但是在VC中就简单得多,因为按结构顺次读取就行了,但VB中我找不到简便的方法用结构以1字节对齐方式读取文件(编译执行文件或者内存中的结构我有办法,但不适合文件读取)。

9 楼

谢谢你了,我其实只要两个内容(nameid和cname),dbs文件我都能读了,现在就剩下这个文件的这两个内容读不出来了,晕

10 楼

不对啊 ,“”3、依次读取96个CWarn结构、byType(单字节)、Decimal(Long)、LastInfTime(CTime,即Long)、CStockInfor结构。“”CWarm结构没有nameid和cname信息,CStockInfor结构里也没有,那Q_RECORD的nameid和cname从什么地方来的啊?晕,这个文件!~~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册