azubi1452
Goto Top

VBS Zwei Textdateien vergleichen und die Unterschiede in eine dritte Datei schreiben

Hallo zusammen,

ich möchte zwei txt-Dateien miteinander vergleichen und die Unterschiede in eine dritte Datei schreiben.
Das ganze soll gut mit der instr-Funktion zu machen sein...
Ich habe hier auch schon angefangen aber leider bekomme ich nichtmal eine Fehlermeldung wenn ich das Skript ausführe. Könntet ihr mir einen Rat geben was falsch bzw. ich vergessen habe ?

Danke schonmal im Voraus.
Gruß, Azubi

 Set fs =CreateObject("Scripting.FileSystemObject")  
Set f1 = fs.OpenTextFile("pfad")  
Set f2 = fs.OpenTextFile("pfad2")  
Set f3 = fs.OpenTextFile("pfad3", 2, True)  
do
da1 = f1.ReadAll
da2 = f2.ReadAll
x1 = StrComp(da1, da2, 1) '0 = binärer- / 1 = text-Vergleich   
If x1 <> 0 Then
f3.WriteLine da2
End If
Loop Until f1.AtEndOfStream
f1.Close
f2.Close
f3.Close
WScript.Quit

'------------------------Fertig----------------------------------------------'  
MsgBox "Fertig!", Abgeschlossen, vbInfo  

Content-ID: 158795

Url: https://administrator.de/forum/vbs-zwei-textdateien-vergleichen-und-die-unterschiede-in-eine-dritte-datei-schreiben-158795.html

Ausgedruckt am: 23.12.2024 um 23:12 Uhr

Logan000
Logan000 17.01.2011 um 12:10:35 Uhr
Goto Top
Moin Moin

Zitat von @Azubi1452:
Ich habe hier auch schon angefangen aber leider bekomme ich nichtmal eine Fehlermeldung wenn ich das Skript ausführe.
Könntet ihr mir einen Rat geben was falsch bzw. ich vergessen habe ?

Du hat vergessen mitzuteilen wo genau dein Problem liegt, bzw. was nicht funktioniert.

Gruß L.
76109
76109 17.01.2011 um 12:24:20 Uhr
Goto Top
Hallo Logan000!

Naja, ein paar Dinge sind ja nicht zu übersehenface-wink

1. Die Do-Schleife macht nur Sinn, wenn die Zeilen einzeln eingelesen werden (ReadLine anstatt ReadAll).
2. Die MsgBox am Ende kann nie ausgegeben werden, wenn das Skript zuvor mit WScript.Quit beendet wird.

Gruß Dieter
Azubi1452
Azubi1452 17.01.2011, aktualisiert am 18.10.2012 um 18:45:31 Uhr
Goto Top
Moin !

Sorry, ich dachte mein Problem ergibt sich aus meiner Beschreibung.

Also ich habe das Skript in einem anderen Beitrag gefunden. Kann es aber leider nicht so ganz verstehen.
Jedenfalls soll dieses Skript genau das machen was ich möchte. Nur leider tut es das nicht.

Als ich es denn kopiert und ein paar andere Fehlermeldungen schon von selbst "beseitigen" konnte stehe ich nun vor dem Problem, dass dieses Skript irgendwo hängen bleibt und ich nicht weiß was los ist, da ich keine Fehlermeldung bekomme.

Von hier habe ich den Code: Vergleich von zwei CSV-Dateien und Schreiben der Änderungen in eine dritte CSV-Datei

Gruß,
Azubi
bastla
bastla 17.01.2011 um 13:26:52 Uhr
Goto Top
Hallo Azubi1452!

Soferne Du den Lösungsweg nicht auf VBS einschränken willst / musst, könnte folgende CMD-Zeile genügen:
findstr /x /l /v /g:pfad pfad2 >pfad3
Ansonsten könntest Du natürlich beide Dateien per ".ReadAll" einlesen und die Zeilen der beiden Arrays in einer Schleife vergleichen - zumindest, wenn Du davon ausgehen kannst, dass es nur innerhalb einzelner Zeilen Unterschiede gibt, die Anordnung und Anzahl der Zeilen aber in beiden Dateien gleich ist ...

Grüße
bastla
Logan000
Logan000 17.01.2011 um 13:44:01 Uhr
Goto Top
Moin

@Dieter
Zitat von @76109:
Hallo Logan000!
Naja, ein paar Dinge sind ja nicht zu übersehenface-wink

Stimmt Wohl, aber dewegen wird das was unser Azubi realisieren möchte auch nicht unbedung klarer.
Und 2. zeigt noch ganz andere Schwächen auf.

@Azubi1452
Zitat von @Azubi1452:
...stehe ich nun vor dem Problem, dass dieses Skript irgendwo hängen bleibt und ich nicht weiß was los ist, da ich keine Fehlermeldung bekomme.
Das Skript läuft auch "Fehlerfrei" durch (siehe Didis Kommentar), was dir der Taskmanager auch bestätigen dürfte.
Was 1. angeht musst du dir natürlich überlegen wie du vergleichen möchtest (Zeilenweise, Wortweise, Zeichenweise,.....).
Weiter soltest du Dir überlegen ob es vorkommen kann, das die 1. Datei mehr Zeilen (Wörter. Zeichen,...) als die 2. hat und wie dein Skript damit umgehen soll.

Gruß L.
Azubi1452
Azubi1452 19.01.2011 um 09:46:30 Uhr
Goto Top
Hallo !

Danke für eure Antworten.

Der Befehl findstr gibt 16 Zeilen aus. Aber eigentlich dürften nur 14 gefunden werden weil gleich die ersten beiden Zeilen aus der Ergebnisdatei in beiden anderen Dateien vorhanden sind. Das kann ich mir bisher nicht erklären.

Ich habe auch schon überlegt die Datei Zeilenweise einzulesen...aber leider gibt es innerhalb der Dateien auch unterschiede in der Anordnung der Zeilen..

Ich bin im Moment ein wenig ratlos..

Gruß,
Azubi
bastla
bastla 19.01.2011 um 10:29:31 Uhr
Goto Top
Hallo Azubi1452!

Da die gesamte Zeile (Schalter "/x") verglichen wird, führen zB zusätzliche Leerzeichen (etwa am Zeilenende) zu einem Unterschied; ebenso wird Groß-/Kleinschreibung unterschieden (lässt sich mit "/i" verhindern) - ansonsten sollten gleiche Zeilen im Ergebnis nicht auftauchen ...

Und nur zur Sicherheit: Der zweite Schalter oben ist ein "L" ... face-wink

Grüße
bastla