VBScript um Dateien zu vergleichen (fast) fertig
Hallo Forum,
ich bin leider ein Anfänger und mir fehlt eine Kleinigkeit in meinem Script. Ich möchte zwei Dateien vergleichen und veränderte Zeilen in eine neue Datei ausgeben. Das Script funktioniert aber nur wenn ich die beiden oberen Zeilen zur Variablendeklaration deaktivere, aber warum?
VIELEN DANK!!!
Marc
'Option Explicit
'Dim objFSO, strlastapps, strqueryapps, strFilePath, objF1, objF2, objL1, objL2, WshShell
Const ForWriting = 2
Const OpenAsASCII = 0
Const CreateIfNotExist = True
strlastapps = "lastapps.txt"
strqueryapps = "queryapps.txt"
strFilePath = "newapps.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF1 = objFSO.OpenTextFile(strlastapps)
Set objF2 = objFSO.OpenTextFile(strqueryapps)
Set objL1 = CreateObject("Scripting.Dictionary")
objL1.CompareMode = vbTextCompare
Set objL2 = CreateObject("Scripting.Dictionary")
objL2.CompareMode = vbTextCompare
' Open the file for write access.
On Error Resume Next
Set objFile = objFSO.OpenTextFile(strFilePath, _
ForWriting, CreateIfNotExist, OpenAsASCII)
' Read first file adding unique value to dictionary object.
Do Until objF1.AtEndOfStream
strV = objF1.ReadLine
If (objL1.Exists(strV) = False) Then
objL1.Add strV, True
End If
Loop
objF1.Close
' Read the second file.
Do Until objF2.AtEndOfStream
strV = objF2.ReadLine
If (objL1.Exists(strV) = False) And (objL2.Exists(strV) = False) Then
objFile.WriteLine strV
End If
' Remove duplicates.
If (objL1.Exists(strV) = True) Then
objL1.Remove strV
End If
' Add unique values to 2nd dictionary object.
If (objL2.Exists(strV) = False) Then
objL2.Add strV, True
End If
Loop
objF2.Close
objFile.Close
ich bin leider ein Anfänger und mir fehlt eine Kleinigkeit in meinem Script. Ich möchte zwei Dateien vergleichen und veränderte Zeilen in eine neue Datei ausgeben. Das Script funktioniert aber nur wenn ich die beiden oberen Zeilen zur Variablendeklaration deaktivere, aber warum?
VIELEN DANK!!!
Marc
'Option Explicit
'Dim objFSO, strlastapps, strqueryapps, strFilePath, objF1, objF2, objL1, objL2, WshShell
Const ForWriting = 2
Const OpenAsASCII = 0
Const CreateIfNotExist = True
strlastapps = "lastapps.txt"
strqueryapps = "queryapps.txt"
strFilePath = "newapps.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF1 = objFSO.OpenTextFile(strlastapps)
Set objF2 = objFSO.OpenTextFile(strqueryapps)
Set objL1 = CreateObject("Scripting.Dictionary")
objL1.CompareMode = vbTextCompare
Set objL2 = CreateObject("Scripting.Dictionary")
objL2.CompareMode = vbTextCompare
' Open the file for write access.
On Error Resume Next
Set objFile = objFSO.OpenTextFile(strFilePath, _
ForWriting, CreateIfNotExist, OpenAsASCII)
' Read first file adding unique value to dictionary object.
Do Until objF1.AtEndOfStream
strV = objF1.ReadLine
If (objL1.Exists(strV) = False) Then
objL1.Add strV, True
End If
Loop
objF1.Close
' Read the second file.
Do Until objF2.AtEndOfStream
strV = objF2.ReadLine
If (objL1.Exists(strV) = False) And (objL2.Exists(strV) = False) Then
objFile.WriteLine strV
End If
' Remove duplicates.
If (objL1.Exists(strV) = True) Then
objL1.Remove strV
End If
' Add unique values to 2nd dictionary object.
If (objL2.Exists(strV) = False) Then
objL2.Add strV, True
End If
Loop
objF2.Close
objFile.Close
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 91389
Url: https://administrator.de/contentid/91389
Ausgedruckt am: 19.11.2024 um 09:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo gdnmark!
Vorweg: Bei einem Test mit 2 geringfügig unterschiedlichen Textdateien "LastApps.log" und "QueryApps.log" und deaktivierten Zeilen 22-24 sowie 30 erhalte ich das korrekte Ergebnis: jene Zeilen, welche in "QueryApps.log", nicht aber in "LastApps.log" aufscheinen - demzufolge müsste der Fehler eigentlich beim Erzeugen der neuen "QueryApps.log" per Shell-Aufruf (den ich hier nicht nachbauen kann) liegen (oder, es gibt eben keine Unterschiede zwischen den beiden Dateien ).
Was mir noch so an Kleinigkeiten aufgefallen ist:
Du erstellst zwar Variable für die Dateinamen, verwendest diese aber dann nicht (eine Folge des Zusammenkopierens). Außerdem würde ich, soferne nichts Wesentliches dagegen spricht, nicht nur Namen, sondern auch Pfade für die Dateien festlegen.
Die Wahl des Variablennamens "strAddress" ergibt für einen, der die Inhalte der .log-Dateien nicht kennt, weniger Sinn, als wenn Du etwa "strLine" verwendet hättest - für Dich wird das aber vermutlich anders sein.
Die entstehende "NewApps.log" schließt mit zwei Leerzeilen (CrLf) - zumindest den zweiten Umbruch kannst Du leicht vermeiden, indem Du mit "Write" anstatt mit "WriteLine" in die Datei schreibst.
Grüße
bastla
Vorweg: Bei einem Test mit 2 geringfügig unterschiedlichen Textdateien "LastApps.log" und "QueryApps.log" und deaktivierten Zeilen 22-24 sowie 30 erhalte ich das korrekte Ergebnis: jene Zeilen, welche in "QueryApps.log", nicht aber in "LastApps.log" aufscheinen - demzufolge müsste der Fehler eigentlich beim Erzeugen der neuen "QueryApps.log" per Shell-Aufruf (den ich hier nicht nachbauen kann) liegen (oder, es gibt eben keine Unterschiede zwischen den beiden Dateien ).
Was mir noch so an Kleinigkeiten aufgefallen ist:
Du erstellst zwar Variable für die Dateinamen, verwendest diese aber dann nicht (eine Folge des Zusammenkopierens). Außerdem würde ich, soferne nichts Wesentliches dagegen spricht, nicht nur Namen, sondern auch Pfade für die Dateien festlegen.
Die Wahl des Variablennamens "strAddress" ergibt für einen, der die Inhalte der .log-Dateien nicht kennt, weniger Sinn, als wenn Du etwa "strLine" verwendet hättest - für Dich wird das aber vermutlich anders sein.
Die entstehende "NewApps.log" schließt mit zwei Leerzeilen (CrLf) - zumindest den zweiten Umbruch kannst Du leicht vermeiden, indem Du mit "Write" anstatt mit "WriteLine" in die Datei schreibst.
Grüße
bastla