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