2014-05-15 103 views
0

正如標題所示,我有三個單獨的文本文件,我想以某種順序連接在一起(即追加file1,file2,file3(in命令)製作file4)。VBSCRIPT將多個文件讀入一個數組,然後將它們寫入一個文件

從我讀過,要做到這一點使用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 

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

UPDATE我的代碼15年5月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 
+0

我遺漏了一件事;假定三個Sample文件可以有任何內容。出於測試目的,用三個不同的單詞創建三個文本文件可以很好地工作。 –

回答

0

下面的工作。 您的腳本存在問題。 1.在您填充它們之前,您將變量分配給數組。 2.你沒有寫出數組的所有元素。

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 
+0

得到它的工作,但經過進一步的修改。 是保持與上述版本的問題是如何將文本同時每行(多行中的所有三個文件打交道時)輸出一個部分(例如: DOCA DocB DOCC ... 要解決這個,我做了以下幾點: 1)拋開數組; 2)將ReadALL更改爲ReadLine;並且, 3)將行寫入和讀取對象/過程放入DO WHILE LOOP中。 我包括下面的代碼。我仍然收到一個錯誤,我不知道該怎麼辦(輸入文件末尾)。該文件現在可用!有關錯誤的任何建議? –

+0

你通常應該編輯你的問題,而不是更新其他人發佈的答案。嘗試爲每個輸入文件分別設置一個循環,而不是嵌套樹。我會說這是你的錯誤所在。 – Dijkgraaf

0

合併/荏苒一個以上的集合(例如,一些「列文件」)合併爲一個集合(如「表文件」)是一個標準問題,標準的解決方案策略(這涉及完全讀取「文件到數組」)。

這個演示代碼:

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 

顯示的基本方法。我使用一個類來使實驗/特定適配(例如定界符,引用,...)更容易。

相關問題