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

헤더는 ** 열 이름 **이있는 행입니다. 당신이 생각하는 것이 아닙니다. –

답변

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가 아닌 독립 실행 형 VBScript OP가 사용하는 것입니다. –

+0

이것은 무엇에 관한 것입니까? 내 눈!! – Lankymart

관련 문제