标题:请教怎么读取BIN(二进制文件)数据到数据库
只看楼主
hbutwzc
Rank: 1
等 级:新手上路
威 望:2
帖 子:376
专家分:0
注 册:2008-6-17
结帖率:100%
 问题点数:0 回复次数:6 
请教怎么读取BIN(二进制文件)数据到数据库
1   2   3   4  5   6  7  8  9   a   b   c   d   e   f
09  14  13  07  09 12 09 12 11   12  14 08  12  12  23
这时bin文件的格式,一行16个字节
我的数据是这样,有个帧头判断字节,帧尾判断字节 ,一帧数据25个字节,怎么将他们保存到相关的数据库表中

20081119.rar (699 Bytes)
搜索更多相关主题的帖子: 文件 二进制 数据库 BIN 
2008-11-20 08:54
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
模拟代码
注:因为你没有提供帧的具体结构,如帧头占多少字节,帧尾又占多少,所以这个帧结构是我自己猜的,
程序代码:
Option Explicit

Public Type 帧结构
    帧头 As Integer
    帧数据(0 To 15) As Byte
    帧尾 As Long
End Type

Public Const 帧头数据 = 2816
Public Const 帧尾数据 = 51

Public Sub 打开文件(filename As String, dat() As 帧结构)
    Dim fj As Long
    Dim dattmp As 帧结构
    Dim i As Long
    Dim count As Long
    
    i = FileLen(filename)
    count = i / 22          '计算记录总数
    ReDim dat(count - 1)
    
    fj = FreeFile()
    '以只读固定长度的随机文件打开
    Open filename For Random Access Read As #fj Len = 22      '2 + 16 + 4 每帧长度,注意本程序没有校验数据文件是否损坏
       For i = 1 To count
        Get fj, , dat(i - 1)
        Next i
    Close fj
End Sub



窗体测试代码
程序代码:
Private Sub Command1_Click()
Dim 数据() As 帧结构
Call 打开文件(Text1.Text, 数据())
'下面是显示数据,没有进行数据校验
Dim i As Long
Dim j As Long
Dim k As String
Dim m As String

For i = 0 To UBound(数据)
    k = ""
    For j = 0 To 15
        m = Hex(数据(i).帧数据(j))
        If Len(m) = 1 Then m = "0" & m
        k = k & m & " "
    Next j
    List1.AddItem k
Next i

End Sub



读BIN.rar (2.57 KB)

授人于鱼,不如授人于渔
早已停用QQ了
2008-11-20 12:19
hbutwzc
Rank: 1
等 级:新手上路
威 望:2
帖 子:376
专家分:0
注 册:2008-6-17
得分:0 
谢谢你啊
2008-11-20 13:27
hbutwzc
Rank: 1
等 级:新手上路
威 望:2
帖 子:376
专家分:0
注 册:2008-6-17
得分:0 
bin是二进制文本文件。
以AA为开始头 中间21个字节为数据区 55为结束
将AA---55之间的数据存在ACCESS数据库

未命名.jpg (38.94 KB)


20081120.rar (443 Bytes)
2008-11-20 13:31
hbutwzc
Rank: 1
等 级:新手上路
威 望:2
帖 子:376
专家分:0
注 册:2008-6-17
得分:0 
不需要效验和
只要判断 AA && 55 &&数据长度=23 就可以了
按顺序读
2008-11-20 13:33
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
修改这个结构定义就行了

Public Type 帧结构
    帧头 As byte
    帧数据(0 To 23) As Byte
    帧尾 As byte
End Type

检验时,检查帧头是不是= &HAA 和 帧尾是不是= &H55 就行了.
如果不等于,就说明本帧有错误.

这里面的 22 你按帧的长度改就是了.或者这样.
定义一个临时变量
dim tmp帧 as 帧结构
    count = i / len(tmp帧)         '计算记录总数
    '在这行后面可以加一个检验文件是否正确的方法
    if count * len(tmp帧)<> i then  '文件除帧长度后不为整数,说明文件数据结构被破坏
       msgbox "提示"
       exit sub      '如果不够错误,也直接读下去,那就不要这行
    end if

    Open filename For Random Access Read As #fj Len = len(tmp帧)      '每帧长度

授人于鱼,不如授人于渔
早已停用QQ了
2008-11-20 15:09
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
希望我说的你能看懂.

我现在只是读出数据来,添加到 ACCESS 数据库里.就是第二步工作了.
第一步工作把数据全读到内存了,
第二步就是把内存里的数据(结构体数组)保存到 数据库里.如果你前面会操作数据库,那么这里就简单了.我也举例了.代码有点烦琐.

授人于鱼,不如授人于渔
早已停用QQ了
2008-11-20 15:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-245288-1-1.html




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

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