【问题标题】:Combining multiple .TXT files into one if a string matches in filename如果文件名中的字符串匹配,则将多个 .TXT 文件合并为一个
【发布时间】:2019-05-09 01:58:23
【问题描述】:

有人可以帮我解决我在目录中有文件列表的要求,如果文件名中的字符串模式匹配,我想合并文件吗?

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

【问题讨论】:

  • 添加文件内容的顺序重要吗?
  • 没关系。但是在合并第一行和最后三行时应该忽略所有文件@AnsgarWiechers

标签: vbscript


【解决方案1】:

FileSystemObject.OpenTextFile() 方法的参数允许您指定您希望 a) 创建文件以防文件不存在,以及 b) 将新内容附加到文件末尾。

在您的特定场景中,可能看起来有点像这样:

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

要从输入文件的开头或结尾省略行,请参阅this answer of mine 到类似问题。

【讨论】:

  • 我已经尝试了提供的代码,但文件没有得到合并@Ansgar Wiechers
  • @anilbusupalli 该代码在我测试时运行良好。请注意,这不是一个交钥匙解决方案。您需要将其与其余代码集成。另请注意,输出文件是在当前工作目录中创建的。使用完整路径定义 filename 以获取特定文件夹中的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2018-04-07
相关资源
最近更新 更多