如何用vba在字节流中查找指定的字节数组?

如何在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

 

       

发表评论