Option Explicit
Dim objFSO                                  'As Object          ' FileSystemObject
Dim INFILE1 'As String
Dim INFILE2 'As String
Dim iInCnt1
Dim iInCnt2
Dim OUTFILE1 'As String
Dim OUTFILE2 'As String
Dim sStartTime 'As Variant
Dim sEndTime 'As Variant
'***********************************************
'二つのファイルの差異部分を、それぞれ出力()
Set objFSO = CreateObject("Scripting.FileSystemObject")
'比較対象のファイル名を取得
'INFILE1 = "In1.txt"
'INFILE2 = "In2.txt"
INFILE1 = "testlogs.txt"
INFILE2 = "testlog2s.txt"
OUTFILE1 = "Ou1.txt"
OUTFILE2 = "Ou2.txt"
wscript.echo now
Call DIFFS
wscript.echo now
wscript.Echo "差分出力を終わりました。" & vbNewLine _
& "処理時間は、" _
& FormatDateTime(sEndTime - sStartTime) & " でした。"
Set objFSO = Nothing
wscript.Quit
'************************************************
'************************************************
Sub DIFFS
'Private Sub DIFFS()
'************************************************
 Dim iOutCnt1
 Dim iOutCnt2
 Dim objOutFile1 'As Object    ' TextStream
 Dim objOutFile2 'As Object    ' TextStream
 Dim iPCnt1
 Dim iPCnt2
 Dim objInFile1 'As Object    ' TextStream
 Dim objInFile2 'As Object    ' TextStream
 Dim sINPUTDATA1
 Dim sINPUTDATA2
 Dim sINPUTDATA1BEFOR
 Dim sINPUTDATA2BEFOR
 Dim INPUT1STATUS
 Dim INPUT2STATUS
 
 Dim sScriptFullName
 
 sScriptFullName = Wscript.ScriptFullName
 WScript.Echo sScriptFullName
 Set objFSO = CreateObject("Scripting.FileSystemObject")
    
 ' 指定ファイルをOPEN(入力モード)
 Set objInFile1 = objFSO.OpenTextFile(INFILE1, 1)
 Set objInFile2 = objFSO.OpenTextFile(INFILE2, 1)
    
 iPCnt1 = 0
 iPCnt2 = 0
 ' 指定ファイルをOPEN(出力モード)
 Set objOutFile1 = objFSO.CreateTextFile(OUTFILE1)
 Set objOutFile2 = objFSO.CreateTextFile(OUTFILE2)
 iOutCnt1 = 0
 iOutCnt2 = 0
 sINPUTDATA1 = ""
 sINPUTDATA2 = ""
 
 wscript.echo "+++++++++++++++++"
 
 
 Do 
  If sINPUTDATA1 = sINPUTDATA2 Then
  
  
   If objInFile1.AtEndOfStream _
    And objInFile2.AtEndOfStream Then
     INPUT1STATUS = "入力1終了"
     INPUT2STATUS = "入力2終了"
     Exit Do
   ElseIf objInFile2.AtEndOfStream Then
    INPUT2STATUS = "入力2終了"
    sINPUTDATA1BEFOR = sINPUTDATA1
    sINPUTDATA1 = objInFile1.ReadLine
    iPCnt1 = iPCnt1 + 1
    
    
    If iPCnt1 > 2 And sINPUTDATA1BEFOR > sINPUTDATA1 Then Exit Do
    
   ElseIf objInFile1.AtEndOfStream Then
    INPUT1STATUS = "入力1終了"
    sINPUTDATA2BEFOR = sINPUTDATA2
    sINPUTDATA2 = objInFile2.ReadLine
    iPCnt2 = iPCnt2 + 1
    
    If iPCnt2 > 2 And sINPUTDATA2BEFOR > sINPUTDATA2 Then Exit Do
    
   Else
    sINPUTDATA1BEFOR = sINPUTDATA1
    sINPUTDATA1 = objInFile1.ReadLine
    
    
    iPCnt1 = iPCnt1 + 1
    
'    If 正規表現オブジェクト.Test(sINPUTDATA1) = True _
'    And objInFile1.AtEndOfStream = False Then
'     objOutFile1.WriteLine sINPUTDATA1 ' 改行(CrLf)付き
'     iOutCnt1 = iOutCnt1 + 1
'     sINPUTDATA1 = objInFile1.ReadLine
'     iPCnt1 = iPCnt1 + 1
'    End If
    If iPCnt1 > 2 And sINPUTDATA1BEFOR > sINPUTDATA1 Then Exit Do
    
    
    sINPUTDATA2BEFOR = sINPUTDATA2
    sINPUTDATA2 = objInFile2.ReadLine
    iPCnt2 = iPCnt2 + 1
    
    If iPCnt2 > 2 And sINPUTDATA2BEFOR > sINPUTDATA2 Then Exit Do
    
   End If
  ElseIf sINPUTDATA1 < sINPUTDATA2 Then
'    wscript.echo "入力配列1(処理行) < 入力配列2(検索行)" & vbNewLine _
'    & "処理行:" & 処理行 & " 検索行:" & 検索行 & vbNewLine _
'    & "処理行:" & 入力配列1(処理行) & vbNewLine _
'    & "検索行:" & 入力配列2(検索行)
   If  objInFile1.AtEndOfStream Then
    INPUT1STATUS = "入力1終了"
    If  objInFile2.AtEndOfStream Then
     INPUT2STATUS = "入力2終了"
     
     wscript.echo sINPUTDATA2 & " 1@@20150809@@@@@@@@"
     objOutFile2.WriteLine sINPUTDATA2 ' 改行(CrLf)付き
     iOutCnt2 = iOutCnt2 + 1
     objOutFile1.WriteLine sINPUTDATA1 ' 改行(CrLf)付き
     iOutCnt1 = iOutCnt1 + 1
     wscript.echo sINPUTDATA2 & " 2@@20150809@@@@@@@@"
     
     Exit Do
    Else
     objOutFile2.WriteLine sINPUTDATA2 ' 改行(CrLf)付き
     iOutCnt2 = iOutCnt2 + 1
     sINPUTDATA2BEFOR = sINPUTDATA2
     sINPUTDATA2 = objInFile2.ReadLine
     iPCnt2 = iPCnt2 + 1
     
     If iPCnt2 > 2 And sINPUTDATA2BEFOR > sINPUTDATA2 Then Exit Do
    End If
   Else
    objOutFile1.WriteLine sINPUTDATA1 ' 改行(CrLf)付き
    iOutCnt1 = iOutCnt1 + 1
    sINPUTDATA1BEFOR = sINPUTDATA1
    sINPUTDATA1 = objInFile1.ReadLine
    iPCnt1 = iPCnt1 + 1
    
    If iPCnt1 > 2 And sINPUTDATA1BEFOR > sINPUTDATA1 Then Exit Do
   End If
  ElseIf sINPUTDATA1 > sINPUTDATA2 Then
'    wscript.echo "入力配列1(処理行) > 入力配列2(入力行数2)" & vbNewLine _
'    & "処理行:" & 処理行 & " 検索行:" & 検索行 & vbNewLine _
'    & "処理行:" & 入力配列1(処理行) & vbNewLine _
'    & "検索行:" & 入力配列2(検索行)
   
   If  objInFile2.AtEndOfStream Then
    INPUT2STATUS = "入力2終了"
    If  objInFile1.AtEndOfStream Then
     INPUT1STATUS = "入力1終了"
     
     wscript.echo sINPUTDATA1 & " 1@@20150809+++++++"
     objOutFile1.WriteLine sINPUTDATA1 ' 改行(CrLf)付き
     iOutCnt1 = iOutCnt1 + 1
     objOutFile2.WriteLine sINPUTDATA2 ' 改行(CrLf)付き
     iOutCnt2 = iOutCnt2 + 1
     wscript.echo sINPUTDATA1 & " 2@@20150809++++++++"
     Exit Do
    Else
     objOutFile1.WriteLine sINPUTDATA1 ' 改行(CrLf)付き
     iOutCnt1 = iOutCnt1 + 1
     sINPUTDATA1BEFOR = sINPUTDATA1
     sINPUTDATA1 = objInFile1.ReadLine
     iPCnt1 = iPCnt1 + 1
     
     wscript.echo sINPUTDATA1 & " +++++++"
     
     If iPCnt1 > 2 And sINPUTDATA1BEFOR > sINPUTDATA1 Then Exit Do
    End If
   Else
    objOutFile2.WriteLine sINPUTDATA2 ' 改行(CrLf)付き
    iOutCnt2 = iOutCnt2 + 1
    sINPUTDATA2BEFOR = sINPUTDATA2
    sINPUTDATA2 = objInFile2.ReadLine
    iPCnt2 = iPCnt2 + 1
    
    If iPCnt2 > 2 And sINPUTDATA2BEFOR > sINPUTDATA2 Then Exit Do
   End If
  End If
  
  'wscript.echo sINPUTDATA1
  
 Loop '入力行を次々続ける
   
   If sINPUTDATA1BEFOR > sINPUTDATA1 Or sINPUTDATA2BEFOR > sINPUTDATA2 Then 
  
  wscript.echo iPCnt1 & " か、" & iPCnt2  & " で、ソートエラーで終了しました。"  & vbNewLine _
  & "INPUT1STATUS=" & INPUT1STATUS  & " INPUT2STATUS=" & INPUT2STATUS
  
  objOutFile1.WriteLine sINPUTDATA1 ' 改行(CrLf)付き
  iOutCnt1 = iOutCnt1 + 1
  
  objOutFile2.WriteLine sINPUTDATA2 ' 改行(CrLf)付き
  iOutCnt2 = iOutCnt2 + 1
  
   End If
   
 wscript.echo OUTFILE1 & " として、" & iOutCnt1 & " 行を出力しました。" & vbNewLine _
  & OUTFILE2 & " として、" & iOutCnt2 & " 行を出力しました。" 
 ' 指定ファイルをClose(出力モード)
 
 objOutFile1.Close
 objOutFile2.Close
 Set objOutFile1 = Nothing
 Set objOutFile2 = Nothing
 
 ' 指定ファイルをClose(入力モード)
 objInFile1.Close
 objInFile2.Close
 Set objInFile1 = Nothing
 Set objInFile2 = Nothing
End Sub
