VBSCRIPT将多个文件读入数组,然后将它们写入单个文件

时间:2014-05-15 05:16:31

标签: file-io vbscript filewriter

正如标题所示,我有三个单独的文本文件,我想按特定顺序连接在一起(即附加file1,file2,file3(按顺序)以生成file4)。

根据我的阅读,使用VBScript执行此操作需要FileSystemObject将文件读入数组,然后将内容写入新文件(如果建议,我可以使用VBScript)

我的代码存在以下问题: 1)脚本运行,但不生成数据 2)在我运行之后,必须按照我在上面建议的顺序(每行)按照数组的顺序将文件附加到输出文件。

以下是我使用的数组示例:

CODE

Const ForReading = 1


Dim arrServiceList(2)
arrServiceList(0) = strText1
arrServiceList(1) = strText2
arrServiceList(2) = strText3


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile("output.txt")


Set objTextFile1 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample1.txt", ForReading)
Set objTextFile2 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample2.txt", ForReading)
Set objTextFile3 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample3.txt", ForReading)

    strText1 = objTextFile1.ReadAll
    objTextFile1.Close

    strText2 = objTextFile2.ReadAll
    objTextFile2.Close

    strText3 = objTextFile3.ReadAll
    objTextFile3.Close


    objOutputFile.WriteLine arrServiceList(0)
    objOutputFile.Close

====================

更新我的代码5-15-15(以下帖子中的更正说明)

CODE

   Const ForReading = 1


  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objOutputFile = objFSO.CreateTextFile("output.txt")


  Set objTextFile1 = objFSO.OpenTextFile("C:\Users\Brill\Desktop\Grab1.txt", ForReading)
  Set objTextFile2 = objFSO.OpenTextFile("C:\Users\Brill\Desktop\Grab2.txt", ForReading)
  Set objTextFile3 = objFSO.OpenTextFile("C:\Users\Brill\Desktop\Grab3.txt", ForReading)

  Do While objTextFile1.AtEndOfStream <> True
  Do While objTextFile2.AtEndOfStream <> True
  Do While objTextFile3.AtEndOfStream <> True

    strText1 = objTextFile1.ReadLine
    objOutputFile.Write strText1 & vbTab 

    strText2 = objTextFile2.ReadLine
    objOutputFile.Write strText2 & vbTab 

    strText3 = objTextFile3.ReadLine
    objOutputFile.Write strText3 & vbTab &  vbCrLf

  Loop
  Loop
  Loop

objOutputFile.Close

objTextFile1.Close
objTextFile2.Close
objTextFile3.Close   

2 个答案:

答案 0 :(得分:1)

以下作品。 您的脚本出现问题。 1.在填充变量之前,您已将变量分配给数组。你没有写出数组的所有元素。

Const ForReading = 1


Dim arrServiceList(2)


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile("output.txt")


Set objTextFile1 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample1.txt", ForReading)
Set objTextFile2 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample2.txt", ForReading)
Set objTextFile3 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample3.txt", ForReading)

    strText1 = objTextFile1.ReadAll
    objTextFile1.Close

    strText2 = objTextFile2.ReadAll
    objTextFile2.Close

    strText3 = objTextFile3.ReadAll
    objTextFile3.Close

    arrServiceList(0) = strText1
    arrServiceList(1) = strText2
    arrServiceList(2) = strText3


    objOutputFile.WriteLine arrServiceList(0)
    objOutputFile.WriteLine arrServiceList(1)
    objOutputFile.WriteLine arrServiceList(2)
    objOutputFile.Close

答案 1 :(得分:1)

将一个集合(例如一些列文件&#39;)合并/压缩到一个集合(例如表格文件&#39;)是标准解决方案策略的标准问题( 涉及将文件读入数组&#34;根本不需要。

此演示代码:

Option Explicit
Dim goFS  : Set goFS  = CreateObject("FileSystemObject")
Dim oFZip : Set oFZip = New cFZip
oFZip.m_aIFSpecs = Split("..\data\a.txt ..\data\b.txt ..\data\c.txt")
oFZip.zip "..\data\abc.txt"
WScript.Echo goFS.OpenTextFile("..\data\abc.txt").ReadAll()

Class cFZip
  Public m_aIFSpecs ' array of input files
  Function zip(sOFSpec)
    Dim tsOut : Set tsOut = goFS.CreateTextFile(sOFSpec)
    Dim nUBFiles : nUBFiles = UBound(m_aIFSpecs)
    ReDim aFiles(nUBFiles)
    Dim f
    For f = 0 To nUBFiles
        Set aFiles(f) = goFS.OpenTextFile(m_aIFSpecs(f))
    Next
    Dim bDone
    Do
       Redim aData(UBound(m_aIFSpecs))
       bDone = True
       For f = 0 To nUBFiles
           If Not aFiles(f).AtEndOfStream Then
              bDone = False
              aData(f) = aFiles(f).ReadLine()
           End If
       Next
       If Not bDone Then tsOut.WriteLine Join(aData, ",")
    Loop Until bDone
    For f = 0 To nUBFiles
        aFiles(f).Close
    Next
    tsOut.Close
  End Function
End Class

输出:

1,10,100
2,20,200
3,30,300
4,,400
,,500

显示了基本方法。我使用类来进行实验/特定适应(例如分隔符,引用,...)更容易。