Объединение нескольких файлов .TXT в один, если строка соответствует имени файла - PullRequest
0 голосов
/ 08 мая 2019

Может ли кто-нибудь помочь мне с требованием, когда у меня есть список файлов в каталоге, я хочу объединить файлы, если шаблон имени совпадает в именах файлов?

AAAL_555A_ORANGE1_F190404.TXT
AAAL_555A_ORANGE2_F190404.TXT
AAAL_555A_ORANGE3_F190404.TXT
AAAL_555A_ORANGE4_F190404.TXT
AAAL_555A_MANGO_F190404.TXT
AAAL_555A_MANGO2_F190404.TXT
AAAL_555B_APPLE_F190404.TXT
AAAL_555B_ORANGE_F190404.TXT
AAAL_555B_Orange_F190404.TXT

Если вторая часть filename='555A' и третья часть состоят из ORANGE, тогда все файлы содержимого Oranges будут объединены в один файл с именем файла AAAl_555A_ORANGE.txt.

Если вторая часть filename='555B' и третья часть состоят из ORANGE, тогда все файлы содержимого Oranges будут объединены в один файл с именем файла AAAl_555B_ORANGE.txt.

Если вторая часть filename='555A' и третья часть состоят из MANGO, тогда все файлы содержимого Oranges будут объединены в один файл с именем файла AAAl_555A_MANGO.txt и т. Д.

Set ObjFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\test"
Set objfolder = ObjFSO.GetFolder(objStartFolder)
Set colfiles = objfolder.Files
'intFile = FreeFile()
For Each objFile In colfiles
    temparr1 = Split(objFile.Name, "_")
    MsgBox temparr1(2)
    If (InStr(1, temparr1(1), "555A") > 0 Or InStr(1, temparr1(1), "555A")) > 0 And (InStr(1, temparr1(2), "ORANGE ") > 0 Or InStr(1, temparr1(2), "ORANGE ")) Then
        'Here the logic am trying to figure out
        'Merge all orange files into "AAAL_ORANGE _555A.txt"
    ElseIf InStr(1, temparr1(1), "555A") > 0 Or InStr(1, temparr1(1), "555A") > 0 Or InStr(1, temparr1(2), "MANGO") > 0 Or InStr(1, temparr1(2), "MANGO") Then
        'Here the logic am trying to figure out
        'Merge all orange files into  "AAAL_MANGO_555A.txt"
    End If
Next

1 Ответ

1 голос
/ 08 мая 2019

Метод FileSystemObject.OpenTextFile() имеет параметры, позволяющие указать, что вы хотите: а) создать файл, если он еще не существует, и б) добавить новый контент в конец файла.

В вашем конкретном сценарии это будет выглядеть примерно так:

Set re = New RegExp
re.Pattern = "\d+$"

For Each objFile In colfiles
    a = Split(objFile.Name, "_")

    'Construct the basename of the output file from the elements of the split
    'input filename. Use a regular expression replacement to remove trailing
    'digits from the third element.
    basename = a(0) & "_" & a(1) & "_" & re.Replace(a(2), "")
    filename = basename & ".txt"

    If Left(objFile.Name, Len(basename)) = basename Then
        Set outFile = ObjFSO.OpenTextFile(filename, 8, True)
        Set inFile  = ObjFSO.OpenTextFile(objFile.Path)
        Do Until inFile.AtEndOfStream
            outFile.WriteLine inFile.ReadLine
        Loop
        inFile.Close
        outFile.Close
    End If
Next

Пропуск строк в начале или конце входных файлов см. мой ответ на аналогичный вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...