在如何在vba中读取任意文件的字符流或者字节流? 一文中介绍了读取任意文件的字节流的方法。
在很多时候我们需要在文件的字节流中查找具体的字节数组,这时候可以使用instrB函数返回具体的字节数组在字节流中的位置。
它的语法如下:
InStrB([start, ]string1, string2[, compare])
其中start参数表示开始查找的起始位置,string1参数表示被查找的内容,string2参数表示要查找的内容,compare参数表示查找所用的匹配模式。
如果查找不到结果,instrB函数返回值为0。
由于instrB函数每次只能返回第一个找到的结果的位置,如果有多个相同的结果时,需要使用循环,每次把start参数的值设置为上次查找到的结果位置+1。
代码如下:
Sub QQ1722187970()
Dim iFN As Integer
iFN = VBA.FreeFile
Dim sPath As String
sPath = "c:\1.xls"
Dim bFileSize As Long
bFileSize = VBA.FileLen(sPath)
Open sPath For Binary Access Read As iFN
Dim arrResult() As Byte
'读取字节流
arrResult = InputB(bFileSize, iFN)
Dim arrFind() As Byte
'要查找的字节串
arrFind = "模块1"
'此处要注意,如果是1个字符用1个字节存储的,需要用 arrFind =VBA.StrConv(str1, vbFromUnicode)
'设置查找的起始位置
bPos = 0
Do
Debug.Print VBA.Hex(bPos)
bPos = VBA.InStrB(bPos + 1, arrResult, arrFind, vbBinaryCompare)
Loop Until bPos = 0
Close
End Sub


发表评论