【问题标题】:Binary access read find specific string二进制访问读取查找特定字符串
【发布时间】:2015-02-10 09:35:11
【问题描述】:

Sub ReadEntireFileAndPlaceOnWorksheet()
  Dim X As Long, FileNum As Long, TotalFile As String, FileName As String, Result As Variant, Lines() As String
  FileName = "C:\Users\Mohamed samatar.DSSE-EMEA\Documents\EQVL\Test\WHVP113_140910_TTinsug_TT_299Data_PUoff_WOT-TakeOff_NotKickDown_gearD_FelLambda.dat"
  FileNum = FreeFile
  Open FileName For Binary As #FileNum
    TotalFile = Space(LOF(FileNum))
    Get #FileNum, , TotalFile
  Close #FileNum
  Lines = Split(TotalFile, vbNewLine)
  ReDim Result(1 To UBound(Lines) + 1, 1 To 1)
  For X = 1 To UBound(Result)
    Result(X, 1) = Lines(X - 1)
  Next
  Range("A1").Resize(UBound(Result)) = Result
End Sub​

我有一些 .dat 格式的文件,这些文件包含一些有价值的信息,但是它们可能很大,尝试在记事本中打开每个文件并提取我需要的信息根本没有效率,因为它需要记事本很长一段时间打开每个文件。我遇到了这个二进制访问读取功能,它显然可以打开大文件并允许您非常快速地阅读它们。我想知道如何查找/获取特定的信息行,您可以使用类似的功能来说明查找功能,还是有另一种获取信息的方法,这是我目前所拥有的。它所做的只是告诉我文件类型,基本上我希望能够搜索特定的字符串值,或者如果我可以将所有文本转储到 EXCEL 中并从中排序,任何指导都是有用的。

【问题讨论】:

  • 检查 HERE 的基本 I/O 函数,您可以逐行读取文件,然后使用基本字符串函数或 RegEx 查找您要查找的数据,或读取整个文件放入一个数组并对其进行迭代,等等。
  • 感谢您的快速响应,将看看!
  • 嗨,大卫,您能否指出我正确的方向,我刚刚浏览了文档,也许还有一个将文件读入数组的示例?如果我可以将它读入一个数组,我可以将它转储到 excel 中并在那里进行搜索,我有更多的经验。很少的意思很小。谢谢?

标签: vba find binaryfiles


【解决方案1】:

这里有两个例子。第一个读取文件中的每一行并打印到从单元格 A1 开始的工作表,然后向下打印到 A2、A3 等,每个

Option Explicit
Sub testReadLine()
    Dim filename As String
    Dim FF As Integer
    Dim line As String
    Dim i as Long

    filename = "C:\yourfilename.txt" '### MODIFY AS NEEDED

    FF = FreeFile
    Open filename For Input As FF
    Do While Not EOF(FF)
        Line Input #FF, line

        Range("A1").Offset(i).Value = i
        i = i + 1
    Loop
    Close FF

End Sub

第二个例子将整个文件读入一个字符串变量,然后使用Split函数将该字符串转换为一个字符串数组,基于行分隔符(假设为vbCRLF)。

这个应该更快,当然,一旦你在 Excel 中获得了数据,你就可以使用你正常的 Excel 功能,比如“查找”等。

Option Explicit
Option Base 0
Sub testReadAll()

    Dim filename As String
    Dim FF As Integer
    Dim text As String
    Dim buffer As Long
    Dim txtArray() As String

    filename = "C:\yourfilename.txt"  '### MODIFY AS NEEDED

    FF = FreeFile
    Open filename For Input As FF
    buffer = LOF(FF)
    text = Input(buffer, FF)
    Close FF

    'Put the text into an array, split by the LineFeed character:
    txtArray = Split(text, vbCrLf)

    'Print to the worksheet:
    Range("A1").Resize(Ubound(txtArray)).Value = Application.Transpose(txtArray)

End Sub

【讨论】:

  • 非常感谢您的回复,它目前只是输出数字我应该解释文件格式是 .dat 文件,我已经看到一些地方我可能需要从二进制转换为正常文本?是这样吗,它如何读取它,因为它似乎只是在输出数字 0 到 4,尽管文件中有大约 17MB 的数据?
  • 这听起来像是一个新问题,但是有字符串转换函数可以将字节数组转换为字符串等。对不起,这里是午夜,我不打算目前接受后续问题。请提出一个新问题,以便其他人可以为您提供帮助。
  • 事后看来,它似乎确实有效,第一个代码中有一个错字,只会导致它出现一些错误并且没有完成脚本运行,无论如何我会尝试从这里修复它,谢谢。
  • 干杯。我明天就上线,如果你真的遇到麻烦我可以尝试帮助,我今天无法立即提供帮助。
猜你喜欢
  • 2021-11-09
  • 2021-12-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2014-09-16
  • 1970-01-01
相关资源
最近更新 更多