quixtos
Goto Top

VBScript Zwei Arrays vergleichen und Abweichungen in drittes Array schreiben.

Hallo,

ich habe ein VBScript das 2 Arrays miteinander vergleicht und die Abweichungen in ein drittes Array schreibt. Wenn Ihr den Code unten in durch euren Compiler schickt werdet Ihr auch sehen das alles soweit klappt.

Jetzt habe ich aber das Problem das ich die "Funktion" ('map no matched printer) 3 Zeile von unten, nach "End If > Next" abfagen möchte. Mache ich dies bekomme ich nur einen Wert aus dem dritten Array zurück anstatt 2 werte.

Villeicht könnt Ihr mir helfen. Danke

arrPrt1 = Array ("IBM1","IBM2","IBM4","IBM3") ' from controlfile  
arrPrt2 = Array ("\\server\IBM1","\\server\IBM2") ' from terminalserver  
 
prtSrv = "\\server\" 'hostname printserver  
Dim found
f = 0
    For m = 0 To UBound(arrPrt1)   
      For n = 0 To UBound(arrPrt2)
          If UCase(prtSrv & arrPrt1(m)) = UCase(arrPrt2(n)) Then
            wscript.Echo "Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'match  
            found = false
            exit for
          Else
            wscript.Echo "No Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'no match  
            found = true
          End If
      Next
      
      If found Then          
          ReDim Preserve arrFinalList(f)
          arrFinalList(f) = prtSrv & arrPrt1(m)
           f = f + 1
           arrPrt4 = arrFinalList(f-1)
           wscript.Echo "Map: " & arrPrt4 'map no matched printer  
      End If
    Next

Content-Key: 115902

Url: https://administrator.de/contentid/115902

Printed on: April 26, 2024 at 17:04 o'clock

Member: bastla
bastla May 12, 2009 at 15:15:23 (UTC)
Goto Top
Hallo Quixtos und willkommen im Forum!

Leider ist mir nicht wirklich klar, welche 2 Werte Du erwarten würdest ...

Grüße
bastla

P.S.: Bitte verwende zum Posten von Code die entsprechende .
Member: Quixtos
Quixtos May 12, 2009 at 15:27:06 (UTC)
Goto Top
SRY habe jetzt den Beitrag nach Formatierungshilfe editiert. Sieht doch gleich besser aus face-smile

Naja im normalfall sollte er mir IBM3 und IBM 4 ausgeben. Er gibt mir aber immer nur die zuletzt verglichene aus:

IBM3, IBM4 = msgbox IBM4
IBM4, IBM3 = msgbox IBM3

wenn ich die Abfrage "wscript.Echo "Map: " & arrPrt4 'map no matched printer" nach "End If, Next" starte so wie hier z.B:

arrPrt1 = Array ("IBM1","IBM2","IBM4","IBM3") ' from controlfile  
arrPrt2 = Array ("\\server\IBM1","\\server\IBM2") ' from terminalserver  
 
prtSrv = "\\server\" 'hostname printserver  
Dim found
f = 0
    For m = 0 To UBound(arrPrt1)   
      For n = 0 To UBound(arrPrt2)
          If UCase(prtSrv & arrPrt1(m)) = UCase(arrPrt2(n)) Then
            wscript.Echo "Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'match  
            found = false
            exit for
          Else
            wscript.Echo "No Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'no match  
            found = true
          End If
      Next
      
      If found Then          
          ReDim Preserve arrFinalList(f)
          arrFinalList(f) = prtSrv & arrPrt1(m)
           f = f + 1
           arrPrt4 = arrFinalList(f-1)
      End If
    Next
    wscript.Echo "Map: " & arrPrt4 'map no matched printer  

Starte ich die Abfrage "wscript.Echo "Map: " & arrPrt4 'map no matched printer" vor "End If, Next" bekomme ich beide Werte (also IBM3 + IBM4) zurück.
Member: bastla
bastla May 12, 2009 at 15:46:05 (UTC)
Goto Top
Hallo Quixtos!

Meinst Du das so (als Ersatz für die Zeilen ab 19)?
    If found Then          
        ReDim Preserve arrFinalList(f)
        arrFinalList(f) = prtSrv & arrPrt1(m)
        arrPrt4 = arrPrt4 & "," & arrFinalList(f)  
        f = f + 1
    End If
Next
WScript.Echo "Map: " & Mid(arrPrt4, 2) 'map no matched printer  
Je eine Ausgabe für "Map ..." erhältst Du ja bei Deinem ursprünglichen Entwurf schon ...

Grüße
bastla
Member: Quixtos
Quixtos May 12, 2009 at 15:55:37 (UTC)
Goto Top
Nein er soll mir 2 Msgboxen ausgeben. 1x mit IBM3 und 1x mit IBM4. Wenn ich das Script aber wie in meinem letzten Post starte bekomme ich nur eine msgbox mit IBM3 zurück.
Member: bastla
bastla May 12, 2009 at 16:00:48 (UTC)
Goto Top
... und wenn Du das Script aus dem Eröffnungsbeitrag verwendest?

BTW: Komfortabler ist es (zumindest für mich), beim Testen "cscript" zu verwenden und keine MsgBoxes, sondern nur ein paar Zeilen in einem CMD-Fenster zu erhalten.
Member: Quixtos
Quixtos May 12, 2009 at 16:03:30 (UTC)
Goto Top
bekomme ich 2 msgboxen. 1x mit IBM3 und 1x mit IBM4. Mein Problem ist aber das ich die Abfrage des arrPrt4 so brauche (ab Zeile 24):

      End If
    Next
wscript.Echo "Map: " & arrPrt4 'map no matched printer  

und nicht so:

      wscript.Echo "Map: " & arrPrt4 'map no matched printer  
   End If
Next

irgendwo hab ich da einen hund drinnen.
Member: bastla
bastla May 12, 2009 at 16:06:13 (UTC)
Goto Top
... und warum? Vielleicht gehst Du mal kurz auf den Sinn der ganzen Aktion ein ...

Abgesehen davon - wozu dient eigentlich "arrFinalList"? Du könntest ja einfach
For i = 0 To UBound(arrFinalList)
    WScript.Echo "Map: " & arrFinalList(i)  
Next
ab Zeile 26 verwenden.
Member: Quixtos
Quixtos May 12, 2009 at 16:08:59 (UTC)
Goto Top
Bingo!

Jetzt klappst so wie ich es mir vorstelle. Ich kann zwar VBScripten aber auf dem Gebiet Array Scripting bin ich wie man in Österreich so schön sagt ein "geistiges Nackerbatzerl".

Danke dir für deine Rasche und unbürokratische Hilfe.

Gruß
Member: bastla
bastla May 12, 2009 at 16:19:27 (UTC)
Goto Top
Hallo Quixtos!

Freut mich, dass es jetzt passt. face-smile

Grüße
bastla
Member: Quixtos
Quixtos May 12, 2009 at 16:19:33 (UTC)
Goto Top
Hintergrund warum dieses Script:

arr1 = Drucker die von einer Steuerdate extra eingelesen wurden (also vorgabe)

arr2 = Drucker die am Client schon verbunden sind (werden vorher ausgelesen)

jetzt möchte ich einen vergleich. Welche Drucker sind schon verbunden und welche drucker aus der Steuerdatei (arr1) nicht.

Hier kommt das arr3 ins Spiel. Wenn es einen Match von arr1 und arr2 gibt soll er das ignorieren. Gibt es keinen Match soll er diese Drucker oder auch Value in arr3 schreiben.

Habe ich die komplette prozedur durch verbinde ich die Drucker aus arr3 mittels add.windowsprinterconnection.

Sollte also so jetzt hinauen oder hast du eine bessere idee?
Member: bastla
bastla May 12, 2009 at 16:25:30 (UTC)
Goto Top
Kannst Du wohl so lassen - und das arr3 bekommt dann auch einen Sinn ... face-wink

Grüße
bastla
Member: Quixtos
Quixtos May 12, 2009 at 16:26:05 (UTC)
Goto Top
Danke dir face-smile

schönen Abend noch.