Vinzenz Mai: VBScript: 2 TXT Dateien auf Übereinstimmungen vergleichen

Beitrag lesen

Hallo,

ich habe folgendes Problem. 2 TXT Dateien (beinhalten Namen) sollen mittels VBS eingelesen und auf Übereinstimmungen geprüft werden.

warum machst Du das dann nicht ganz genau so?

Die erste Datei beinhaltet Namen nach den gesucht werden soll, die zweite Datei soll nach diesen Namen durchsucht werden. Wird der Name gefunden soll er in eine dritte TXT geschrieben werden.

warum machst Du das dann nicht ganz genau so?

Problem: Die Schleife ruft die Function für den ersten Datensatz nur einmal auf. Die restlichen Name werden mir zwar mittels "MsgBox aarMy(0)" angezeigt aber nicht in die Function übergeben

Deine Prozedur/Funktion TestSub (ein denkbar schlechter Name) bekommt überhaupt nichts übergeben, weil Du mit globalen Variablen arbeitest, ebenfalls eine denkbar schlechte Idee. Warum übergibst Du die Namen nicht?

und somit nicht mehr überprüft.

Das ist ein Irrtum. Selbstverständlich wird für jeden weiteren Eintrag die Testroutine ausgeführt. Dir ist nur nicht klar, dass dieser Test extrem schnell erledigt ist.

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("F:\Test VBS\it.txt")
Set objFile1 = objFSO.OpenTextFile("F:\Test VBS\bekannt.txt")
Set objFile2 = objFSO.CreateTextFile("F:\Test VBS\ausgabe.txt")

Wir fangen mit dem Abarbeiten an ...

Do until objFile1.AtEndOfStream
Zeile1 = objFile1.ReadLine
arrMy = split(Zeile1, " ")

... und finden in der ersten Runde den Eintrag in der ersten Zeile ...

MsgBox arrMy(0)

... den wir ausgeben
... anschließend wird zum ersten Mal die Testroutine aufgerufen

TestSub
loop

Public Function TestSub

Beim ersten Aufruf stehen wir am Anfang der Datei

Do until objFile.AtEndOfStream

... und lesen bis zum Ende

  	Zeile = objFile.ReadLine  
  	MsgBox Zeile  
  	If InStr(Zeile, arrMy(0)) > 0 Then  
  		objFile2.writeLine Zeile  

... schreiben gegebenenfalls in die Zieldatei

  	   Else  
  		MsgBox "nix"  
  	End If  

loop

... und haben nun unseren Dateizeiger am Ende des Textstreams stehen

End Function

Zweite Runde:

Zeile1 = objFile1.ReadLine
arrMy = split(Zeile1, " ")

... wir finden in der zweiten Runde den Eintrag in der zweiten Zeile ...

MsgBox arrMy(0)

... den wir ausgeben
... anschließend wird zum zweiten Mal die Testroutine aufgerufen

TestSub

Public Function TestSub

Beim zweiten Aufruf stehen wir bereits am Ende der Datei, weil wir dort
den ersten Durchlauf abgebrochen haben.

Do until objFile.AtEndOfStream
Zeile = objFile.ReadLine
MsgBox Zeile
If InStr(Zeile, arrMy(0)) > 0 Then
objFile2.writeLine Zeile
   Else
MsgBox "nix"
End If
loop

deswegen wird der Schleifenrumpf gar nicht erst ausgeführt ...
... und wir sind gleich fertig.

End Function

Das gleiche passiert Dir bei allen folgenden Durchläufen.

  
Wenn Deine Dateien nicht zu groß sind, also solange alles problemlos in den Hauptspeicher passt, rate ich Dir dazu, nicht ständig aus Dateien zu lesen, sondern - wie Du es anfangs schriebst - beide Dateien in je ein Array einzulesen, bei erfolgreichem Test den Eintrag in ein drittes Array zu schreiben und am Ende der Verarbeitung das dritte Array in eine Textdatei wegzuschreiben.  
  
  
Freundliche Grüße  
  
Vinzenz