G
gxkmdnk
Unregistered / Unconfirmed
GUEST, unregistred user!
我正在写一个行情分析软件,我从钱龙公司要了一个实时数据的格式文档(dos网络版),
其中对lontran.sha的格式说明如下:
LONTRAN.* (每个市场1个文件) 上证:LONTRAN.SHA 深证:LONTRAN.SZN
说明: a.以单元为单位建立文件 b.每个单元包含一个头部和n条记录空间
a.头部
序号 名 称 变 量 类 型 长度 单位 备 注
1 本单元有效记录数 Recnum Unsigned int 2 条
2 本个股下一单元偏移地址 Offset Long 4 如无下一单元,本值=-1L
总计 6
b.记录
序号 名 称 变 量 类 型 长度 单位 备 注
1 时间 Time int 2 时间点
2 最新价 Stknew Char 3 X1000 0-16777.216元 注:最新=0时,以下4、5字段中的真实委买(卖)价1=0。
3 总成交量 Volume Unsigned long 4 股 0-429496万股
4 成交金额 Amount float 4 元 成交金额
5 委买价1 Pbuy1 Int 2 X1000 最新价-真实委买价1 注:本值=0x8000时,真实委买价1=0
6 委卖价1 Psell1 Int 2 X1000 最新价-真实委卖价1 注:本值=0x8000时,真实委卖价1=0
7 成交笔数 Records Char 3 总笔数:0-16777216笔
总计 20
我先读第一个头部和第一条记录,是这样读的:
定义一个结构
Type
TStockRec = record
Recnum:word;
offset:longint;
Time: word;
Stknew1: Byte;
Stknew2: Byte;
Stknew3: Byte;
Volume:LongWord;
Amount:Single;
Pbuy1:smallint;
Psell1:smallint;
Records1: Byte;
Records2: Byte;
Records3: Byte;
end;
及变量
fileus:file of TStockRec;
rec:TStockRec;
然后
assignfile(fileus,'c:/hq/lontran.sha');
reset(fileus);
read(fileus,rec);
showmessage(inttostr(rec.time));
closefile(fileus);
显示time为23300
因为我必须转换数据,不需要头部,所以我写了以下程序去掉头部:
hdl1:=fileopen('c:/hq/lontran.sha',fmopenread);
hdl2:=fileopen('c:/hq/lontran1.sha',fmopenwrite);
fileread(hdl1,buf,10000);
filewrite(hdl2,buf[7],9000);
fileclose(hdl1);
fileclose(hdl2);
去掉头部的数据在lontran1.sha中
定义一个结构
Type
TStockRec1 = record
Time: word;
Stknew1: Byte;
Stknew2: Byte;
Stknew3: Byte;
Volume:LongWord;
Amount:Single;
Pbuy1:smallint;
Psell1:smallint;
Records1: Byte;
Records2: Byte;
Records3: Byte;
end;
及变量
fileus1:file of TStockRec1;
rec1:TStockRec1;
然后
assignfile(fileus1,'c:/hq/lontran1.sha');
reset(fileus1);
read(fileus1,rec1);
showmessage(inttostr(rec1.time));
closefile(fileus1);
显示time为0
也就是说在原数据(lontran.sha)中time为23300,而去掉头部后,在lontran1.sha中time为0,请问这是怎么回事啊?
其中对lontran.sha的格式说明如下:
LONTRAN.* (每个市场1个文件) 上证:LONTRAN.SHA 深证:LONTRAN.SZN
说明: a.以单元为单位建立文件 b.每个单元包含一个头部和n条记录空间
a.头部
序号 名 称 变 量 类 型 长度 单位 备 注
1 本单元有效记录数 Recnum Unsigned int 2 条
2 本个股下一单元偏移地址 Offset Long 4 如无下一单元,本值=-1L
总计 6
b.记录
序号 名 称 变 量 类 型 长度 单位 备 注
1 时间 Time int 2 时间点
2 最新价 Stknew Char 3 X1000 0-16777.216元 注:最新=0时,以下4、5字段中的真实委买(卖)价1=0。
3 总成交量 Volume Unsigned long 4 股 0-429496万股
4 成交金额 Amount float 4 元 成交金额
5 委买价1 Pbuy1 Int 2 X1000 最新价-真实委买价1 注:本值=0x8000时,真实委买价1=0
6 委卖价1 Psell1 Int 2 X1000 最新价-真实委卖价1 注:本值=0x8000时,真实委卖价1=0
7 成交笔数 Records Char 3 总笔数:0-16777216笔
总计 20
我先读第一个头部和第一条记录,是这样读的:
定义一个结构
Type
TStockRec = record
Recnum:word;
offset:longint;
Time: word;
Stknew1: Byte;
Stknew2: Byte;
Stknew3: Byte;
Volume:LongWord;
Amount:Single;
Pbuy1:smallint;
Psell1:smallint;
Records1: Byte;
Records2: Byte;
Records3: Byte;
end;
及变量
fileus:file of TStockRec;
rec:TStockRec;
然后
assignfile(fileus,'c:/hq/lontran.sha');
reset(fileus);
read(fileus,rec);
showmessage(inttostr(rec.time));
closefile(fileus);
显示time为23300
因为我必须转换数据,不需要头部,所以我写了以下程序去掉头部:
hdl1:=fileopen('c:/hq/lontran.sha',fmopenread);
hdl2:=fileopen('c:/hq/lontran1.sha',fmopenwrite);
fileread(hdl1,buf,10000);
filewrite(hdl2,buf[7],9000);
fileclose(hdl1);
fileclose(hdl2);
去掉头部的数据在lontran1.sha中
定义一个结构
Type
TStockRec1 = record
Time: word;
Stknew1: Byte;
Stknew2: Byte;
Stknew3: Byte;
Volume:LongWord;
Amount:Single;
Pbuy1:smallint;
Psell1:smallint;
Records1: Byte;
Records2: Byte;
Records3: Byte;
end;
及变量
fileus1:file of TStockRec1;
rec1:TStockRec1;
然后
assignfile(fileus1,'c:/hq/lontran1.sha');
reset(fileus1);
read(fileus1,rec1);
showmessage(inttostr(rec1.time));
closefile(fileus1);
显示time为0
也就是说在原数据(lontran.sha)中time为23300,而去掉头部后,在lontran1.sha中time为0,请问这是怎么回事啊?