Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBScript Zwei Arrays vergleichen und Abweichungen in drittes Array schreiben.

Frage Entwicklung VB for Applications

Mitglied: Quixtos

Quixtos (Level 1) - Jetzt verbinden

12.05.2009, aktualisiert 17:28 Uhr, 9596 Aufrufe, 12 Kommentare

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

01.
arrPrt1 = Array ("IBM1","IBM2","IBM4","IBM3") ' from controlfile 
02.
arrPrt2 = Array ("\\server\IBM1","\\server\IBM2") ' from terminalserver 
03.
  
04.
prtSrv = "\\server\" 'hostname printserver 
05.
Dim found 
06.
f = 0 
07.
    For m = 0 To UBound(arrPrt1)    
08.
      For n = 0 To UBound(arrPrt2) 
09.
          If UCase(prtSrv & arrPrt1(m)) = UCase(arrPrt2(n)) Then 
10.
            wscript.Echo "Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'match 
11.
            found = false 
12.
            exit for 
13.
          Else 
14.
            wscript.Echo "No Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'no match 
15.
            found = true 
16.
          End If 
17.
      Next 
18.
       
19.
      If found Then           
20.
          ReDim Preserve arrFinalList(f) 
21.
          arrFinalList(f) = prtSrv & arrPrt1(m) 
22.
           f = f + 1 
23.
           arrPrt4 = arrFinalList(f-1) 
24.
           wscript.Echo "Map: " & arrPrt4 'map no matched printer 
25.
      End If 
26.
    Next
Mitglied: bastla
12.05.2009 um 17:15 Uhr
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 Formatierung.
Bitte warten ..
Mitglied: Quixtos
12.05.2009 um 17:27 Uhr
SRY habe jetzt den Beitrag nach Formatierungshilfe editiert. Sieht doch gleich besser aus

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:

01.
arrPrt1 = Array ("IBM1","IBM2","IBM4","IBM3") ' from controlfile 
02.
arrPrt2 = Array ("\\server\IBM1","\\server\IBM2") ' from terminalserver 
03.
  
04.
prtSrv = "\\server\" 'hostname printserver 
05.
Dim found 
06.
f = 0 
07.
    For m = 0 To UBound(arrPrt1)    
08.
      For n = 0 To UBound(arrPrt2) 
09.
          If UCase(prtSrv & arrPrt1(m)) = UCase(arrPrt2(n)) Then 
10.
            wscript.Echo "Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'match 
11.
            found = false 
12.
            exit for 
13.
          Else 
14.
            wscript.Echo "No Match: " & prtSrv & arrPrt1(m) & " <> " & arrPrt2(n) 'no match 
15.
            found = true 
16.
          End If 
17.
      Next 
18.
       
19.
      If found Then           
20.
          ReDim Preserve arrFinalList(f) 
21.
          arrFinalList(f) = prtSrv & arrPrt1(m) 
22.
           f = f + 1 
23.
           arrPrt4 = arrFinalList(f-1) 
24.
      End If 
25.
    Next 
26.
    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.
Bitte warten ..
Mitglied: bastla
12.05.2009 um 17:46 Uhr
Hallo Quixtos!

Meinst Du das so (als Ersatz für die Zeilen ab 19)?
01.
    If found Then           
02.
        ReDim Preserve arrFinalList(f) 
03.
        arrFinalList(f) = prtSrv & arrPrt1(m) 
04.
        arrPrt4 = arrPrt4 & "," & arrFinalList(f) 
05.
        f = f + 1 
06.
    End If 
07.
Next 
08.
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
Bitte warten ..
Mitglied: Quixtos
12.05.2009 um 17:55 Uhr
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.
Bitte warten ..
Mitglied: bastla
12.05.2009 um 18:00 Uhr
... 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.
Bitte warten ..
Mitglied: Quixtos
12.05.2009 um 18:03 Uhr
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):

01.
      End If 
02.
    Next 
03.
wscript.Echo "Map: " & arrPrt4 'map no matched printer
und nicht so:

01.
      wscript.Echo "Map: " & arrPrt4 'map no matched printer 
02.
   End If 
03.
Next
irgendwo hab ich da einen hund drinnen.
Bitte warten ..
Mitglied: bastla
12.05.2009 um 18:06 Uhr
... 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
01.
For i = 0 To UBound(arrFinalList) 
02.
    WScript.Echo "Map: " & arrFinalList(i) 
03.
Next
ab Zeile 26 verwenden.
Bitte warten ..
Mitglied: Quixtos
12.05.2009 um 18:08 Uhr
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ß
Bitte warten ..
Mitglied: bastla
12.05.2009 um 18:19 Uhr
Hallo Quixtos!

Freut mich, dass es jetzt passt.

Grüße
bastla
Bitte warten ..
Mitglied: Quixtos
12.05.2009 um 18:19 Uhr
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?
Bitte warten ..
Mitglied: bastla
12.05.2009 um 18:25 Uhr
Kannst Du wohl so lassen - und das arr3 bekommt dann auch einen Sinn ...

Grüße
bastla
Bitte warten ..
Mitglied: Quixtos
12.05.2009 um 18:26 Uhr
Danke dir

schönen Abend noch.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Windows Server
AD-Berechtigungen von zwei Servern miteinander vergleichen (3)

Frage von s0m3ting zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...