2016-10-11 87 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

相关问题