2015年8月10日月曜日

88DIFFS

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