VBA для анализа нескольких текстовых файлов? - PullRequest
0 голосов
/ 23 января 2011

Я пытаюсь сделать какой-то грубый анализ нескольких текстовых файлов. По сути, я собираюсь удалить такие символы, как (){}[]"', затем заменить двоеточия точкой с запятой, а затем заменить строки на строки более привлекательного вида.

Кикер в том, что у меня есть около 1500 файлов, которые должны сделать это с ними. Если сначала объединить все файлы, а затем попытаться выполнить синтаксический анализ, приложение перестанет отвечать.
Я использовал для этого макросы Windows, и он работает с каждым из файлов в отдельности, но я не знаю, как заставить его делать это со всеми файлами в этом каталоге.

Пример кода, который я использую:

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
    .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

1 Ответ

1 голос
/ 09 мая 2011

Следующая подпрограмма перебирает указанную вами директорию и вносит необходимые изменения в строку:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...