#cs Objekt: Dictionary Ein Dictionary-Objekt funktioniert wie ein assoziativer Array. Das heißt, es speichert Wert und Schlüssel in Paaren. Vorteile gegenüber einem Array: - Es muß nicht festgelegt werden, wie viele Objekte gespeichert werden sollen. Bei einem Array muß das Array im Voraus erstellt werden (oder später vergrößert werden). - Es ist keine Indexnummer zum Zugriff auf ein Element notwendig. Stattdessen kann über einen Schlüssel(begriff) auf das Element zugegriffen werden. Das Dictionary-Objekt hat nur eine konfigurierbare Eigenschaft: CompareMode Diese Eigenschaft beeinflusst, wie die Einträge im Dictionary-Objekt gefunden werden. Standardmäßig arbeitet das Dictionary-Objekt im Binärmodus. Das bedeutet, dass die einzelnen Schlüssel als ASCII-Werte gespeichert werden. Bei ASCII-Werten wird zwischen Großbuchstaben und Kleinbuchstaben unterschieden. Bei der Abfrage ist es also notwendig, die exakte Schreibweise des Schlüssels zu verwenden. Im Textmodus, werden Groß- und Kleinbuchstaben gleich behandelt. In diesem Modus kann kein Schlüssel mit dem Namen 'KEY' angelegt werden, wenn bereits ein Schlüssel mit dem Namen 'Key' vorhanden ist. Auch das Suchen ist viel einfacher. Die Suche nach 'key' würde die Einträge für 'KEY' und 'Key' zurückgeben. #ce ; Ein Dictionary-Objekt erstellen Const $BinaerMode = 0 Const $TextMode = 1 $oDictionary = ObjCreate('Scripting.Dictionary') ; jetzt standardmäßig im Binärmode $oDictionary.CompareMode = $TextMode ; den Textmode setzen ; Einträge zu einem Dictionary-Objekt hinzufügen ; Methode: Add ; Parameter: Schlüssel, Wert $oDictionary = ObjCreate('Scripting.Dictionary') $oDictionary.Add("Drucker 1", "Druckt") $oDictionary.Add("Drucker 2", "Offline") $oDictionary.Add("Drucker 3", "Druckt") ; Die Schlüsselnamen müssen eindeutig sein und dürfen nicht mehrfach auftreten. ; Zugriff auf nicht existenten Schlüssel ; Wird versucht, den Wert eines Schlüssels auszugeben, der nicht existiert, so wird dieser mit dem Wert Null angelegt. ; Hierbei wird jedoch kein Fehler erzeugt! ; Zahl der Einträge in einem Dictionary-Objekt abfragen $oDictionary = ObjCreate('Scripting.Dictionary') $oDictionary.Add("Drucker 1", "Druckt") $oDictionary.Add("Drucker 2", "Offline") $oDictionary.Add("Drucker 3", "Druckt") MsgBox(0, 'Anzahl Schlüssel-Wert Paare', $oDictionary.Count) ; Elemente eines Dictionary-Objekts aufzählen ; Methoden: Keys und Items $oDictionary = ObjCreate('Scripting.Dictionary') $oDictionary.Add("Drucker 1", "Druckt") $oDictionary.Add("Drucker 2", "Offline") $oDictionary.Add("Drucker 3", "Druckt") $colKeys = $oDictionary.Keys $str = '' For $strKey in $colKeys $str &= $strKey & @LF Next MsgBox(0, 'Schlüssel', $str) $colItems = $oDictionary.Items $str = '' For $strItem in $colItems $str &= $strItem & @LF Next MsgBox(0, 'Werte', $str) ; Um den Wert eines bestimmten Eintrags anzuzeigen, verwenden Sie die Methode Item. ; Die folgende Zeile zeigt zum Beispiel den Wert des Eintrags mit dem Schlüssel Drucker 3 an: MsgBox(0, 'Wert von Schlüssel: Printer 3', $oDictionary.Item("Printer 3")) ; Existenz eines Schlüssels prüfen ; Methode: Exists ; Großer Vorteil gegenüber Array: Es müssen nicht alle Daten durchsucht werden. ; Mit Exists wird die Existenz des Schlüssels abgefragt und 'True' oder 'False' zurückgegeben. $oDictionary = ObjCreate('Scripting.Dictionary') $oDictionary.Add("Drucker 1", "Druckt") $oDictionary.Add("Drucker 2", "Offline") $oDictionary.Add("Drucker 3", "Druckt") If $oDictionary.Exists("Drucker 4") Then MsgBox(0, '', "Drucker 4 ist vorhanden.") Else MsgBox(0, '', "Drucker 4 ist nicht vorhanden.") EndIf ; Element in einem Dictionary-Objekt ändern $oDictionary = ObjCreate('Scripting.Dictionary') $oDictionary.Add("atl-dc-01", "Kein Status") $oDictionary.Add("atl-dc-02", "Kein Status") $oDictionary.Add("atl-dc-03", "Kein Status") $colKeys = $oDictionary.Keys $str = '' For $strKey in $colKeys $str &= $strKey & ' ' & $oDictionary.Item($strKey) & @LF Next MsgBox(0, 'Vor Änderung', $str) $oDictionary.Item("atl-dc-01") = "Verfügbar" $oDictionary.Item("atl-dc-02") = "Verfügbar" $oDictionary.Item("atl-dc-03") = "Nicht verfügbar" $str = '' For $strKey in $colKeys $str &= $strKey & ' ' & $oDictionary.Item($strKey) & @LF Next MsgBox(0, 'Nach Änderung', $str) ; Elemente aus einem Dictionary-Objekt entfernen ; Methoden: Remove, RemoveAll ; alle Schlüssel löschen $oDictionary.RemoveAll ; einen bestimmten Schlüssel löschen $oDictionary.Remove("Key")