VBScript - Auslesen zweier Textdateien und Vergleich

TequillaSun

Grünschnabel
Hallo liebe Gemeinde,
verzeiht mir wenn ich eine schon so oft gestellte Frage nochmals stelle, doch mir stellt sich folgendes Problem:

Ich habe zwei Textdateien | Inhalt.txt und Entfernen.txt.
Aus diesen beiden Textdateien sollen jeweils alle Zeilen gelesen werden und bei ungleichheit in eine dritte Datei geschrieben werden. Ich hoffe, es ist bis hier hin verständlich was ich machen möchte.

Nehmen wir an Inhalt.txt enthält zunächst zwei Zeilen mit folgendem Schema:

Code:
Hallo
Test
ist
gelöscht
worden

Und in der Entfernen.txt befindet sich dann die Zeile:
Code:
Hallo
Test

So soll in der dritten Textdatei Ausgabe.txt einfach nur:

Code:
ist
gelöscht
worden
stehen.

Bisher löse ich es mit zwei Arrays die alle Zeilen einer Textdatei enthalten:


Code:
Const ForReading=1, ForWriting=2, ForAppending=8
Set objFSO = CreateObject("Scripting.FileSystemObject")
set objInhalt = objFSO.OpenTextFile(C:\Inhalt.txt,1)


strInhalt= objDuplicateFree.readAll
aInhalt = Split(strInhalt,vbCrLf)
.....

'selbiges auch mit der Entfernen.txt
.....


For each Inhalt in aInhalt
  For Each Eintrag in aEntfernen
        If Inhalt <> Eintrag Then
          set objZiel=objFSO.OpenTextFile("C:\Ziel.txt", ForAppending, true)
          objZiel.WriteLine Inhalt
          objZiel.Close
        End If
  Next
Next

Erstes Problem:
Die Zeilen in der Zieldatei sehen so aus:

Code:
Hallo
Test
ist
ist
gelöscht
gelöscht
worden
worden

Zweites Problem:
Man sieht, dass die Zeilen noch immer vorhanden, also nicht wie gewünscht entfernt worden sind.
-------------------------------------------------

Ich hoffe ich konnte mein Problem gut Schildern. Wie im Titel genannt, handelt sich es um ein VBScript. Falls noch Fragen offen sind: Bitte stellen, ich versche sie zu beantworten.

Grüße
Patrick
 

ronaldh

Erfahrenes Mitglied
Du musst wohl nur die Logik Deiner verschachtelten Schleifen umstellen. Dazu setzt Du vorher eine Variable auf False, und dann, wenn Du einen passenden Eintrag findest auf True, und schreibst erst nach Beendigung der inneren Schleife den Satz weg, abhängig davon, ob Deine Variable nur True oder False ist.

Grüsse
ronaldh
 

TequillaSun

Grünschnabel
Danke ronaldh für deine Antwort. Dein Tipp scheint einleuchtend zu sein, habe es ausprobiert:

Quasi so:
Code:
vorhanden=0
For each Inhalt in aInhalt
  For Each Eintrag in aEntfernen
        If Inhalt = Eintrag Then
        vorhanden=1
        End If
  Next
If vorhanden=0 then
          set objZiel=objFSO.OpenTextFile("C:\Ziel.txt", ForAppending, true)
          objZiel.WriteLine Inhalt
          objZiel.Close
End If
Next

Richtig?

Jedoch gibt mir dann der Debugger einen Fehler aus:
Unexpected Next in Line 169, also das letzte Next für die äußere Schleife.

Ich steh irgendwie auf dem Schlauch...
 
Zuletzt bearbeitet:

ronaldh

Erfahrenes Mitglied
Ist das der ganze Code? Eigentlich sieht das soweit richtig aus (was die jeweiligen Schleifen anbetrifft), jedoch muss natürlich vorhanden bei jedem Durchlauf der Hauptschleife auf 0 gesetzt werden, sonst kann es ja nicht funktionieren.

Code:
For each Inhalt in aInhalt
     vorhanden=0
     For Each Eintrag in aEntfernen
           If Inhalt = Eintrag Then
                 vorhanden=1
                 Exit For
           End If
    Next
    If vorhanden=0 then
          set objZiel=objFSO.OpenTextFile("C:\Ziel.txt", ForAppending, true)
          objZiel.WriteLine Inhalt
          objZiel.Close
    End If
Next

Oder gibt es noch Abfragen außerhalb der Schleifen?
 

ronaldh

Erfahrenes Mitglied
Ok, ich sehe gerade anhand der Mail, dass die Schleife zuerst unvollständig war, das hast Du inzwischen ja offensichtlich geändert (in meiner Mail sah die Schleife noch wie folgt aus:
Code:
For each duplicate in aDuplicateFree
  For Each entry in aEntries
		 		 If duplicate = entry Then
		 		 vorhanden=1
		 		 End If
  Next
  If vorhanden=0 Then
		 set objZiel= objFSO.OpenTextFile("C:\temp\output\Ziel.txt", 8, true)
		 objZiel.WriteLine duplicate
		 objZiel.Close
Next
Und da fehlt natürlich ein End If. Wäre schön, wenn Du den Fehler bereits gefunden hast, dann nicht nur den Code im Post zu ändern, sondern auch den Text, denn so wie die Schleife nun in Deinem Post ist, kann der Fehler ja eigentlich nicht mehr auftreten...
 

Vladimir6892

Grünschnabel
Hi zusammen ich bin ebenfalls VBScript Anfänger und habe die Aufgabe bekommen ebenfalls zwei Listen zu vergleichen und das Resultat in eine neu erstellte dritte liste auszugeben.
Bsp:
Liste 1:
Name1;Vorname1;Anmeldename1
Name2;Vorname2;Anmeldename2

Liste 2:
Name1;Vorname1;E-Mail1
Name3;Vorname3;Email3

Liste 3 :(Ziel, würden dann so aussehen)
Name;Vorname;Anmeldename;E-Mail
Name2;Vorname2;Anmeldename2,; Noch einmal Anmeldename2, da keine E-Mail vorhanden
Name3;Vorname3;Email3; noch einmal e-mail, da kein Anmeldename vorhanden

Wie Ihr seht gibt es 3 Status
-In Liste 1 und 2 vorhanden
-Nur in Liste 1 vorhanden
-Nur in Liste 2 vorhanden

Die Listen können Textfiles sein und können bis zu mehreren Tausend Einträgen haben.
Hauptsache ist die zwei Listen zu Readen und zu einer zu fusionieren(Writen)

Ich hoffe Ihr könnt mir helfen.

Freundliche Grüsse Vladimir
 

Neue Beiträge