2016-10-11 85 views
1

我需要使用.vbs將2個文件合併到一個新文件中。這兩個文件都包含標題和數據。對於標題,我需要總結這兩個文件行數&也是總量。對於數據,我需要合併來自這兩個文件的數據。合併具有不同標題值的兩個文件

報頭格式:

yyyymmdd|FILENAME|row count|total amount

文件的樣本&格式如下:

文件1:

20160204|FILENAME|3|17 
20160204|SARAH|OWEN|SCIENCE BOOK|20090717|USD|2|SCIENCE|0| 
20160204|KYLE|PARKER|ENGLISH BOOK|20090717|USD|10|ENGLISH|0| 
20160204|LILY|MORGAN|POLITICAL BOOK|20090717|USD|5|POLITICS|0|

文件2:

20160204|FILENAME|1|4 
20160204|ADAM|HANSEL|HISTORY BOOK|20090717|USD|4|HISTORY|0|

輸出:

20160204|FILENAME|4|21 
20160204|SARAH|OWEN|SCIENCE BOOK|20090717|USD|2|SCIENCE|0| 
20160204|KYLE|PARKER|ENGLISH BOOK|20090717|USD|10|ENGLISH|0| 
20160204|LILY|MORGAN|POLITICAL BOOK|20090717|USD|5|POLITICS|0| 
20160204|ADAM|HANSEL|HISTORY BOOK|20090717|USD|4|HISTORY|0|

我只設法這兩個文件合併。但它不是我想要的輸出。

到目前爲止,我只有這個:

Const ForReading = 1 

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

Set objTextFile = objFSO.OpenTextFile("D:\Testing\MYFILE1.txt", ForReading) 
strText = objTextFile.ReadAll 
objTextFile.Close 

objOutputFile.WriteLine strText 

Set objTextFile = objFSO.OpenTextFile("D:\Testing\MYFILE2.txt", ForReading) 
strText = objTextFile.ReadAll 
objTextFile.Close 

objOutputFile.WriteLine strText 

objOutputFile.Close 
+0

標題是包含**列名**的行。不是你想象的那樣。 – 2016-10-11 11:01:45

回答

1

你需要做的是:

  • 讀取兩個文件的數據行
  • 提取每個數據行的第7個字段
  • 計算所有提取的值的
  • 寫有金額和總數量的數據行的
  • 寫的所有數據行的文件

對於小十歲上下的文件,辦法之一是一些新的頭總和像這樣:

datafiles = Array("D:\Testing\MYFILE1.txt", "D:\Testing\MYFILE2.txt") 

Set fso = CreateObject("Scripting.FileSystemObject") 

Dim header 
ReDim data(-1) 

sum = 0 
For Each filename In datafiles 
    Set f = fso.OpenTextFile(filename) 
    header = Split(f.ReadLine, "|") 
    Do Until f.AtEndOfStream 
    ReDim Preserve data(UBound(data)+1) 
    line = f.ReadLine 
    data(UBound(data)) = line 
    sum = sum + CInt(Split(line, "|")(6)) 
    Loop 
    f.Close 
Next 

Set f = fso.CreateTextFile("MYFILE.txt") 
f.WriteLine header(0) & "|" & header(1) & "|" & (UBound(data)+1) & "|" & sum 
For Each row In data 
    f.WriteLine row 
Next 
f.Close 

請注意,這對大文件來說不會太好。如果你需要像這樣處理文件,你必須以不同的方式處理它們(將數據行逐行寫入臨時文件,而不是將它們保存在內存中,然後將頭文件和合並數據一行一行地寫入最終文件第二步)。

+0

非常感謝。它創造奇蹟。 –

-2

希望這有助於:

<% 
Class contFiles 
    Public Files 

    Private Sub Class_Initialize() 
    Set Files = Server.CreateObject("Scripting.Dictionary") 
    End Sub 

    Private Sub Class_Terminate() 
    If IsObject(Files) Then 
     Files.RemoveAll() 
     Set Files = Nothing 
    End If 
    End Sub 

    Public Sub addFile(theFileName) 
    Files.Add theFileName, theFileName 
    End Sub 

    Public Default Function makeFile(fileName) 
    On Error Resume Next 

    theKeys = Files.Keys 
    Set FSO = Server.CreateObject("Scripting.FileSystemObject") 
    Do Until IDx = Files.Count 
     Set TheTextStream = FSO.OpenTextFile(Server.MapPath(theKeys(IDx)), 1) 
     html = html & TheTextStream.ReadAll 
     IDx = IDx + 1 
    Loop 

    Set objTxt = FSo.CreateTextFile(Server.MapPath(fileName), True, False) 
    objTxt.Write(html) 
    objTxt.Close 

    If (err.Number <> 0) Then 
     makeFile = False 
    Else 
     makeFile = True 
    End If 
    End Function 
End Class 

Set testFiles = New contFiles 

testFiles.addFile("default.aspx") 
testFiles.addFile("events.aspx") 
testFiles.addFile("about.aspx") 

response.write(testFiles.makeFile("test.txt")) 
%> 
+1

這對OP有幫助嗎? – Shashanth

+1

它不是。除了OP已經工作的純文件連接以外,它不會執行任何操作。另外,它是ASP,而不是像OP正在使用的獨立VBScript。 –

+0

這是什麼?我的眼睛!! – Lankymart

相關問題