| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 466 人关注过本帖
标题:用随机方式读出固定长度记录的文件显示不对,是否用binary方式读出,该怎么 ...
只看楼主 加入收藏
新手00
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-3-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
用随机方式读出固定长度记录的文件显示不对,是否用binary方式读出,该怎么读?谢谢
对应的数据文件的格式是这样的
1 2 3 ,,,,,365, 366 第一年 11 22 33。。。。365 366 第二年 111 222 333。。。。第三年。。。。。
也就是每年有366个数据(非闰年第366天也写入一个标识符999) 第367写年份

那么形成二进制文件的过程是这样的,每个数据表达为8个字节长度的整型(头两个字节表达给真实的数据,后6个字节为空),写的次序如上面次序。
random方式读数据是这样的
定义一个long的变量,然后用
dim aa as long
open 文件 for random as #1 len=8
get #3,3,aa---(这里假设形成二进制的时候,第三个位置写进了34这个整数)
debug.print aa
close #1
结果aa的值不是34.
-----------------------
请问,该如何读出这个二进制文件,如果是random方式,代码如何写,如果是binary方式打开,该如何写才能显示数据。谢谢!
搜索更多相关主题的帖子: 二进制 
2013-03-29 00:40
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
问题没描述的清楚。
另,根据你举例的数据文件的格式,不是你描述的文件格式。

整形,当2个字符。
那么你的文件应该用 十六进制来 举例

 0  1  2  3  4  5  6  7   8  9  a  b  c  d  e  f
00 01 00 00 00 00 00 00  00 02 00 00 00 00 00 00
00 03 00 00 00 00 00 00  00 04 00 00 00 00 00 00
…………
07 dd 00 00 00 00 00 00  00 0b 00 00 00 00 00 00

读这种不是标准数值长度的数据,一般使用 结构体来读取。
你这里,前二个字节是 数据,后六个为空。那么这个结构体定义写成:
type 结构
  aa as integer
  bb(5) as byte
end type
那么一次就读一个结构。再去取值,就不会出现你那种容易导致混乱的情况 。
------------
随机文件规定,指定长度后,一次要读取规定长度的数据。

授人于鱼,不如授人于渔
早已停用QQ了
2013-03-29 09:28
新手00
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-3-29
收藏
得分:0 
回复 2楼 风吹过b
谢谢版主!!
问题确实没说明清楚,问题已经解决了(原来二进制文件虽然是固定长度,但里面多一个编码,没注意解码~~)。
顺便请教一个问题:据说是任何文件都可以用binary方式打开,假设现在有个数据文件,总共有个10个记录(里面的数据为11 12 13 14 15 16 17 18 19 20共10个数据,数据都是二进制的,用记事本打开看不到这样的数据显示),每个记录长度是2字节的integer。那么如果不用random方式处理,改用binary方式打开,怎么处理,才能显示出11 12 13 14 15 16 17 18 19 20这样的数据?(前面有人用binary方式处理过文本文件并显示内容),但不知这种情况怎么处理,逐个字节处理后,如何显示出数据?
2013-03-29 11:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
二进制打开文件后,你需要知道数据结构,才能最终得到所需的数据。

如你3楼说的例子。
那么先读到数组里。
dim d(0 to 19) as byte
已读到这个 d 数据里去了。
那么已知道它保存提的是10个 整形数据,那么可以这么写。
dim a(0 to 9) as integer
for i=0 to 9
   a(i)=d(i*2) *256+ d(i*2+1)           '高位在前,低位在后,如果不对,则需要反写
next i
a 里就是这10个数。

授人于鱼,不如授人于渔
早已停用QQ了
2013-03-29 15:18
快速回复:用随机方式读出固定长度记录的文件显示不对,是否用binary方式读出,该 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019458 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved