1Danke
ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
2571
2571
EMPFEHLEN
-
17.11.08 10:48 #1
- Registriert seit
- Dec 2003
- Ort
- Köln
- Beiträge
- 14
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 :1 2 3 4 5
Hallo Test ist gelöscht worden
Und in der Entfernen.txt befindet sich dann die Zeile:
Code :1 2
Hallo Test
So soll in der dritten Textdatei Ausgabe.txt einfach nur:
stehen.Code :1 2 3
ist gelöscht worden
Bisher löse ich es mit zwei Arrays die alle Zeilen einer Textdatei enthalten:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
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 :1 2 3 4 5 6 7 8
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
PatrickDarf dat dat ?
Dat darf dat !
Dat dat dat darf !?
-
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
-
17.11.08 11:14 #3
- Registriert seit
- Dec 2003
- Ort
- Köln
- Beiträge
- 14
Danke ronaldh für deine Antwort. Dein Tipp scheint einleuchtend zu sein, habe es ausprobiert:
Quasi so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
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...Geändert von TequillaSun (17.11.08 um 11:16 Uhr)
Darf dat dat ?
Dat darf dat !
Dat dat dat darf !?
-
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14
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?
-
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:
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...Code :1 2 3 4 5 6 7 8 9 10 11
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
-
17.11.08 12:40 #6
- Registriert seit
- Dec 2003
- Ort
- Köln
- Beiträge
- 14
Ei der Daus
Tut mir leid wenn vorhin ein solches hin und her war. Du hast mir ein ganzes Stück weiter geholfen. Danke noch einmal.
Grüße
PatrickDarf dat dat ?
Dat darf dat !
Dat dat dat darf !?
-
11.06.10 08:12 #7
- Registriert seit
- Jun 2010
- Beiträge
- 1
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
Ähnliche Themen
-
Vergleich zweier Grafikkarten
Von thomson1308 im Forum HardwareAntworten: 0Letzter Beitrag: 30.07.10, 13:43 -
SQL Vergleich zweier Tabellen
Von LordDarkness im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 11.07.10, 12:39 -
Vergleich zweier Dateien
Von RaketenPeter im Forum JavaAntworten: 10Letzter Beitrag: 16.05.08, 16:22 -
[C] Vergleich zweier SQL-Tabellen
Von Buba235 im Forum C/C++Antworten: 5Letzter Beitrag: 12.07.06, 12:02 -
Vergleich zweier Quellen
Von M-GT im Forum PHPAntworten: 4Letzter Beitrag: 10.04.06, 16:12





Zitieren
Login





