VBA读取/搜索文本文件

时间:2013-01-17 19:53:31

标签: vba excel-vba excel

我正在尝试读取包含1147行的文本文件。以下代码仅为阅读第1050-1147行。我的目标是读取整个文件并提取位于各行上的特定值以在脚本中使用。一个例子是包含“BlockList:2”的行中的值2。我已经包含了文本文件格式的片段,因为它的格式与我遇到的任何示例不同(第1116-1128行);我试图访问的值与显示的第一行缩进相同(不确定是否重要)。

    fixation.OffsetTime: 426611
    *** LogFrame End ***
Level: 2
*** LogFrame Start ***
Procedure: TestProc
BlockList: 2
BlockList.Cycle: 1
BlockList.Sample: 2
Running: BlockList
*** LogFrame End ***

等级:1 * LogFrame Start * 实验:ChoiceofLotteries_fMRI_I

到目前为止的代码:

Sub OpenTextFileTest()
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Dim fs, f, contents, var1
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile("C:\NameOfFile.txt", 1)
    contents = f.ReadAll
    f.Close
    Debug.Print contents
End Sub

有没有人有任何建议如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

试试这个(关于如何提取BlockList: 的值的示例)

Sub Sample()
    Dim MyData As String, strData() As String
    Dim i As Long

    '~~> Replace this with the relevant file
    Open "C:\NameOfFile.txt" For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)

    For i = LBound(strData) To UBound(strData)
        If InStr(1, strData(i), "BlockList:", vbTextCompare) Then
            Debug.Print Split(strData(i), ":")(1)
            Exit For
        End If
    Next i
End Sub

<强>后续

您拥有的文本文件是Unicode文本文件,因此您遇到了这个问题。如果您执行SaveAs然后在编码中选择ANSI,然后运行上面的代码,它是否有效?

点击here了解reading txt files using VBA

的替代方法