Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 合并具有不同头文件值的两个文件_File_Vbscript_Merge - Fatal编程技术网

File 合并具有不同头文件值的两个文件

File 合并具有不同头文件值的两个文件,file,vbscript,merge,File,Vbscript,Merge,我需要使用.vbs将2个文件合并到一个新文件中。这两个文件都包含头文件和数据。对于header,我需要将两个文件的行数和总数相加。对于数据,我需要合并这两个文件中的两个数据 标题格式: yyyymmdd|FILENAME|row count|total amount 希望这有助于: <% Class contFiles Public Files Private Sub Class_Initialize() Set Files = Server.CreateObject("

我需要使用.vbs将2个文件合并到一个新文件中。这两个文件都包含头文件和数据。对于header,我需要将两个文件的行数和总数相加。对于数据,我需要合并这两个文件中的两个数据

标题格式:

yyyymmdd|FILENAME|row count|total amount 希望这有助于:

<%
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"))
%>

您需要做的是:

读取两个文件的数据行 提取每个数据行的第7个字段 计算所有提取值的总和 使用数据行的总和和总数写入新标题 将所有数据行写入文件 对于小型ish文件,一种方法如下:

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

不过,请注意,对于大型文件,这不会表现得太好。如果您需要像这样处理文件,您必须以不同的方式处理它们,将数据行逐行写入临时文件,而不是将其保存在内存中,然后在第二步中将标题和合并数据逐行写入最终文件。

操作有何帮助?它没有帮助。除了OP已经在工作的文件连接之外,它没有做任何事情。另外,它是ASP,而不是像OP那样使用的独立VBScript。这是怎么回事?我的眼睛!!标题是带有列名的行。不是你想的那样。 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
<%
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"))
%>
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