在记事本副本中搜索字符串并粘贴到某些条件

时间:2014-12-09 09:47:07

标签: excel vba automation

我正在搜索一个宏来搜索记事本中的字符串。它应该搜索一个字符串(" report")作为起始字符串,它应该在("报告结束")中结束搜索。

Option Explicit

Sub ReadTxtFile()
    Dim start As Date
    start = Now

    Dim oFSO As Object
    Set oFSO = CreateObject("Scripting.FileSystemObject")

    Dim oFS As Object

    Dim filePath As String
    filePath = "C:\Users\Desktop\abc.txt "

    Dim arr(100000) As String
    Dim i As Long
    i = 0

    If oFSO.FileExists(filePath) Then
        On Error GoTo Err

        Set oFS = oFSO.OpenTextFile(filePath)
        Do While Not oFS.AtEndOfStream
            arr(i) = oFS.ReadLine
            i = i + 1
        Loop
        oFS.Close
    Else
        MsgBox "The file path is invalid.", vbCritical, vbNullString
        Exit Sub
    End If

    For i = LBound(arr) To UBound(arr)
        If InStr(1, arr(i), "report", vbTextCompare) Then
            Debug.Print i + 1, arr(i)
            Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1) = i + 1
            Range("B" & Range("B" & Rows.Count).End(xlUp).Row + 1) = arr(i)
        End If
    Next

    Debug.Print DateDiff("s", start, Now)

    Exit Sub

错误讯息:

Err:
    MsgBox "Error while reading the file.", vbCritical, vbNullString
    oFS.Close
    Exit Sub

End Sub

这里我有搜索起点的代码,但它应该完成"报告结束"作为结束字符串复制我在文本中搜索的整个内容并将其粘贴到新的记事本中。

1 个答案:

答案 0 :(得分:0)

我已经增强了部分代码以包含2件事

(1)留意报告'之间的内容。和报告结束'

(2)将内容复制到名为xyz.txt的新.txt文件中,该文件保存在我的Z:\ drive

For i = LBound(arr) To UBound(arr)
    If InStr(1, arr(i), "report", vbTextCompare) Then

        'Declare variables for the new output file
        Dim sOutputFileNameAndPath As String
        Dim FN As Integer
        sOutputFileNameAndPath = "Z:\xyz.txt"
        FN = FreeFile

        'Open new output file
        Open sOutputFileNameAndPath For Output As #FN


        'While 'end of report' has not been found, 
        'keep looping to print out contents starting from 'report'
        Do While InStr(1, arr(i), "end of report", vbTextCompare) = 0

            Debug.Print i + 1, arr(i)
            Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1) = i + 1
            Range("B" & Range("B" & Rows.Count).End(xlUp).Row + 1) = arr(i)

            'Print into new output file
            Print #FN, i + 1 & " " & arr(i)

            'increment count
            i = i + 1

        Loop

        'Print out the 'end of report' line as well
        Debug.Print i + 1, arr(i)
        Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1) = i + 1
        Range("B" & Range("B" & Rows.Count).End(xlUp).Row + 1) = arr(i)

        'Print 'end of report' line into new output file as well
        Print #FN, i + 1 & " " & arr(i)

        'close the new output file
        Close #FN

        'exit the 'For..Next' structure since 'end of report' has been found
        Exit For


    End If

Next