读数据的问题!(100分)

  • 主题发起人 主题发起人 brt
  • 开始时间 开始时间
B

brt

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个股票数据中的一组:
_______________________________________________
58 01 36 30 30 33 33 38 00 D6 E9 B7 E5 C4 A6 CD
D0 00 02 00 64 00 77 BE 1F 3D 00 00 00 00 84 D7
87 41 00 00 00 00 D0 4B 06 41 66 66 36 41 7B 14
36 41 E1 7A 34 41 7B 14 36 41 52 B8 32 41 00 00
00 00 B0 54 04 41 00 00 00 00 A2 83 3C 41 00 00
00 00 00 78 AE 40 CD CC 34 41 00 00 34 41 0A D7
33 41 00 00 00 00 00 D4 B7 40 00 00 00 00 00 40
8F 40 00 00 00 00 00 40 AF 40 9A 99 35 41 7B 14
36 41 66 66 36 41 00 00 00 00 00 40 8F 40 00 00
00 00 00 00 59 40 00 00 00 00 00 40 8F 40 00 00
00 00 A0 A2 E7 40 00 00 00 00 10 D8 FC 40
_______________________________________________
存储格式如下:
//每174字节为一个信息
id:short;//长度2
code:char;//长度7 array[0..6] of char
name:char;//长度9 array[0..8] of char
type:short;//长度2
hand:short;//长度2
profit:float;//长度4
stock:double;//长度8
vol5:double;//长度8
last:float;//长度4
open:float;//长度4
close:float;//长度4
hight:float;//长度4
low:float;//长度4
vol:double;//长度8
fund:double;//长度8
chg:double;//长度8
mj1,mj2,mj3:float;//长度4*3
ml1,ml2,ml3:double;//长度8*3
mcj1,mcj2,mcj3:float;//长度4*3
mcl1,mcl2,mcl3:double;//长度8*3
buy:double;//长度8
sale:double;//长度8
____________________________________
我用stream读时,读到profit时数据就不对了.
应该是3.9e-2,但读的是2.192612e-41,好象是
往后读两个字节,不知为什么。
 
。确保存储格式正确无误
。可以定义一个与格式吻合的packed record,一次读入整个信息记录
 
要知道short只是一个字节,你前却在注释中当作两个字节,当然出错了改用smallint吧
 
改了也不对,烦恼:(
 
没人帮忙吗!!!!!!!!!!!!!!!!!!!!!!
 
没办法,debug吧,跟踪看看,前面读出的数据是否正确,另外smallint不行再试试其它的
如word等
 
前面都正确呀!why
 
我想应该是读字节时的顺序问题,同样是0a0b0c,有的是由前向后:0a0b0c,有的是由后向前,就读成0c0b0a,
你试试按字节读,再组合成一个数吧。若干年前玩dbf文件结构时遇过这个现象,用C与用Pascal可能是反的。
 
folat中只有singal型占用四字节,改为singal看看对不对,还不行就编个程序,存储一个
float数到文件中看一下是什么格式,然后再读出来观察对不对。
 
to:windbell
我也用的是single。
to:all
读hand和profit时,它俩之间有两个字节给跳过去了,
另,id虽占两个字节,但测试却占4个字节,code,
name却不受影响,在hand和profit之间的两个字节会是
吗:(
 
packed arrar[……]of ……
声明为紧缩数组怎么样?
 
你的record定义的时候没加“packed”关键字,给align了
 
type xxx=packed record
....
这样才行
 
还有一问题请关注:)
 
多人接受答案了。
 
后退
顶部