| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1995 人关注过本帖
标题:[求助]如何快速从二进制文件中提取数据?
只看楼主 加入收藏
sssqq
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-22
收藏
 问题点数:0 回复次数:11 
[求助]如何快速从二进制文件中提取数据?
现在有一个很大的二进制文件,现在要求从中提取5M的数据,提取的规则是这样的:从其中的某个字节开始,每提取1K数据就跳过接下来的300个字节,然后再提取下一个1K的数据,直到5M提取完毕为止.提取的数据存入另一个新建的二进制文件中.

我试过用get和put来实现,虽然是可以,但速度非常慢.请问有没有快速的方法?最好能够在5秒内提取完毕的.
搜索更多相关主题的帖子: 二进制文件 数据 get 字节 
2007-10-10 21:10
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
呃 换顶级CPU就可以了。
2007-10-10 21:13
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
收藏
得分:0 
把数据文件,拆分合并 可以不?
拆分循序就是,如果是奇数就是 1k偶数就是 300bit

2007-10-11 08:34
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
收藏
得分:0 
Public Sub FileSplit(SourceFile As String, DestinationFile As String, ChunkSize As Long, Optional BufferSize As Long = 64# * 1024#, Optional ShowFinishMessage As Boolean)
'ChunkSize 为 BufferSize 的倍数
Dim FileBuffer() As Byte
Dim FileNumberS As Long
Dim FileNumberT As Long
FileNumberS = FreeFile
Open SourceFile For Binary Access Read As #FileNumberS
Dim lFileLen As Long
lFileLen = FileLen(SourceFile)
FileNumberT = FreeFile
Dim i As Long
Dim j As Long
ReDim FileBuffer(1 To (BufferSize)) As Byte
Open DestinationFile & "." & Format(i, "000") For Binary Access Write As #FileNumberT
Do While lFileLen >= BufferSize
Get #FileNumberS, , FileBuffer
If i = ChunkSize Then
i = 0
j = j + 1
Close #FileNumberT
FileNumberT = FreeFile
Open DestinationFile & "." & Format(j, "000") For Binary Access Write As #FileNumberT
End If
i = i + 1
Put #FileNumberT, , FileBuffer
lFileLen = lFileLen - BufferSize
Loop
If lFileLen > 0 Then
ReDim FileBuffer(1 To lFileLen) As Byte
Get #FileNumberS, , FileBuffer
Put #FileNumberT, , FileBuffer
End If
Close #FileNumberT
If ShowFinishMessage Then
MsgBox "Finished!"
End If
End Sub
Public Sub FileRestore(SourceFile As String, DestinationFile As String, Chunks As Long, Optional BufferSize As Long = 64# * 1024#, Optional ShowFinishMessage As Boolean)
Dim FileBuffer() As Byte
Dim FileNumberS As Long
Dim FileNumberT As Long
Dim i As Long
Dim lFileLen As Long
FileNumberT = FreeFile
Open DestinationFile For Binary Access Write As #FileNumberT
For i = 0 To Chunks - 1
FileNumberS = FreeFile
Open SourceFile & "." & Format(i, "000") For Binary Access Read As #FileNumberS
lFileLen = FileLen(SourceFile & "." & Format(i, "000"))
ReDim FileBuffer(1 To BufferSize) As Byte
Do While lFileLen >= BufferSize
Get #FileNumberS, , FileBuffer
Put #FileNumberT, , FileBuffer
lFileLen = lFileLen - BufferSize
Loop
If lFileLen > 0 Then
ReDim FileBuffer(1 To lFileLen) As Byte
Get #FileNumberS, , FileBuffer
Put #FileNumberT, , FileBuffer
End If
Close #FileNumberS
Next i
Close #FileNumberT
If ShowFinishMessage Then
MsgBox "Finished!"
End If
End Sub

这两个函数自己改改吧! 上面在案加上上条件 就应该可以了

2007-10-11 08:37
a59936758
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-4-13
收藏
得分:0 
多谢四楼.学习!不过楼主为什么不回话

咋学学不会.还就偏要学
2007-10-11 11:28
sssqq
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-22
收藏
得分:0 
我不是经常可以上网啊!不懂4楼的程序,能否用文字说明一下呢?
2007-10-14 11:32
思考
Rank: 1
等 级:新手上路
威 望:1
帖 子:66
专家分:0
注 册:2007-9-29
收藏
得分:0 
看看书吧,很简单的
2007-10-14 20:42
skdyu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-3-26
收藏
得分:0 
产考学习了!谢谢!!!!
2007-10-16 08:22
随风逐流
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:passerby
等 级:版主
威 望:8
帖 子:4054
专家分:271
注 册:2007-6-13
收藏
得分:0 

我感觉思路都有问题.
从5M的文件中某个字节开始?你怎么判断这个字节?
1,如果说你知道这个字节所在数组的位置,那就可以(可我想不通你怎么知道的.)
2,如果说你按这个字节的值判断,5M啊?换成二进制数组很大.....极其有可能存在多个地方跟你要找的字节值是一样.
这样提取的时候肯定经常出错.


[url=http://www./html/6/6694/]极道金丹[/url][url=http://www./html/2/2849/]九阴九阳[/url][url=http://www./html/2/2596/]凡人修仙传[/url]
2007-10-16 09:01
hfox
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-18
收藏
得分:0 
是个难题,如何定位?
2007-10-16 09:35
快速回复:[求助]如何快速从二进制文件中提取数据?
数据加载中...
 
   



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

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