b.jim: VBScript: 2 TXT Dateien auf Übereinstimmungen vergleichen

Hallo zusammen,

ich habe folgendes Problem. 2 TXT Dateien (beinhalten Namen) sollen mittels VBS eingelesen und auf Übereinstimmungen geprüft werden. 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.

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 und somit nicht mehr überprüft. Für eure Hilfe wäre ich sehr dankbar.

Grüße

  
  
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")  
  
Do until objFile1.AtEndOfStream  
	Zeile1 = objFile1.ReadLine  
	arrMy = split(Zeile1, " ")  
	MsgBox arrMy(0)  
	TestSub  
loop  
  
Public Function TestSub  
  
        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  
		  
End Function  

  1. 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