开发者

VBA to parse multiple text files?

I'm trying to do some crude parsing of a bunch of text files. Basically, I'm looking to remove characters like (){}[]"', then replace colons with semicolons then replace strings with better looking strings.

The kicker is that I have about 1,500 files that need to have this done to them. If I merge all the files, first, then try to do the parsing, the app stops responding.

I have been using windows macros to do this, and it works on each of the files individually, but I don't know how to have it do it to all the files in that directory.

Example of the code I'm using:

Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
    .Text = "["
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
    .Text = "]"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
 开发者_如何学Go   .Text = ","
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
    .Text = """"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With


The following sub will iterate through a directory you specify and make the string changes you want:

Option Explicit

Sub FileProcessing()
    Dim fileDirectory As String
    Dim fileName As String
    Dim fileContents As String
    Dim inputFileNumber As Integer
    Dim outputFileNumber As Integer
    Dim iFileCount As Integer

    fileDirectory = "C:\deleteme\"

    'Get first file in directory
    fileName = Dir(fileDirectory & "*.*")
    'Begin loop to iterate through each file
    Do While fileName <> ""

        If iFileCount Mod 50 Then 'Display a message in Immediate window for every 50 files
            Debug.Print "Working on file number " & iFileCount & "  :  " & fileName
        End If

        'Open File
        inputFileNumber = FreeFile
        Open fileDirectory & fileName For Input As #inputFileNumber

        'Put file contents into a variable
        'NOTE: A variable-length string can contain up to approximately 2 billion (2^31) characters.
        fileContents = Input$(LOF(inputFileNumber), 1)

        'Close the File
        Close #inputFileNumber

        'Do your replacements
        fileContents = Replace(fileContents, "(", "")
        fileContents = Replace(fileContents, ")", "")
        fileContents = Replace(fileContents, "{", "")
        fileContents = Replace(fileContents, "}", "")
        fileContents = Replace(fileContents, "[", "")
        fileContents = Replace(fileContents, "]", "")

        fileContents = Replace(fileContents, ":", ";")

        'Get the output file ready to write:
        outputFileNumber = FreeFile
        Open fileDirectory & fileName For Output As #outputFileNumber

        Print #outputFileNumber, fileContents
        Close #outputFileNumber

        'Get next file
        fileName = Dir
    Loop

    MsgBox "Finished"

End Sub
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜