UDF-Sammlung: Objekt Dictionary

    • Offizieller Beitrag

    Ich habe zu dem Objekt Dictionary (s. hier) eine UDF-Sammlung erstellt.

    *** Funktionssammlung ***

    _ObjDictCreate(Modus)
    Erzeugt ein Dictionary Objekt im Binär- (default) oder Textmodus
    Gibt das Handle des Objektes zurück

    _ObjDictAdd(Objekt, Schlüssel, Wert)
    Fügt einem Dictionary Objekt ein Schlüssel-Wert Paar hinzu

    _ObjDictGetValue(Objekt, Schlüssel)
    Liest den Wert für einen Schlüssel aus

    _ObjDictSetValue(Objekt, Schlüssel, Wert)
    Setzt einen neuen Wert für einen Schlüssel

    _ObjDictCount(Objekt)
    Gibt die Anzahl der Schlüssel-Wert Paare zurück

    _ObjDictSearch(Objekt, Schlüssel)
    Prüft ob der Schlüssel existiert, liefert 'TRUE' wenn gefunden

    _ObjDictDeleteKey(Objekt, Schlüssel)
    Löscht den angegebenen Schlüssel (und dessen Wert)
    Wird statt eines Schlüsselnamens '' übergeben,
    werden alle Schlüssel gelöscht (Standard)

    _ObjDictList(Objekt)
    Eine GUI mit einem ListView zeigt alle Schlüssel-Wert Paare

    _IniReadSectionToObjDict(Objekt, INI-Pfad, Sektion)
    Liest die angegebene INI-Sektion in das Objekt
    Gibt Anzahl gelesener Paare zurück

    _IniWriteSectionFromObjDict(Objekt, INI-Pfad, Sektion)
    Schreibt die Schlüssel-Wert Paare des Objekts in die angegebene Sektion
    der INI-Datei
    Gibt Anzahl geschriebener Paare zurück

    _FileReadToObjDict(Objekt, TextDatei-Pfad, Seperator)
    Liest aus einer Textdatei alle Schlüssel-Wert Paare zeilenweise ein (1 Paar/Zeile)
    Standard-Seperator ist '|', kann hier angepaßt werden
    Gibt Anzahl gelesener Paare zurück

    _FileWriteFromObjDict(Objekt, TextDatei-Pfad, Seperator, Overwrite)
    Schreibt die Schlüssel-Wert Paare des Objekts in die angegebene Datei (1 Paar/Zeile)
    Standard-Seperator ist '|', kann hier angepaßt werden
    Gibt Anzahl geschriebener Paare zurück

    Edit 24.10.07: _FileReadToObjDict() und _FileWriteFromObjDict() fertiggestellt

    Edit 25.10.07:
    Ergänzungen für SciTE
    - Einträge für Autovervollständigung erstellt
    - Abkürzungen erstellt
    - Programm zur Aktualisierung der Autovervollständigungs- und Abkürzungsdatei erstellt (verwendet angehängte INI)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GuiListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; Dictionary Objekt erstellen
    $oTest = _ObjDictCreate(1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Schlüsselpaare hinzufügen
    _ObjDictAdd($oTest, 'Schlüssel1', 'Wert1')
    _ObjDictAdd($oTest, 'Schlüssel2', 'Wert2')
    _ObjDictAdd($oTest, 'Schlüssel3', 'Wert3')

    [/autoit] [autoit][/autoit] [autoit]

    ; Anzeige aller Schlüssel-Wert Paare
    _ObjDictList($oTest, 'Einträge hinzugefügt')

    [/autoit] [autoit][/autoit] [autoit]

    ; Wert von 'Schlüssel1' auslesen
    MsgBox(0, 'Wert von Schlüssel1', _ObjDictGetValue($oTest, 'Schlüssel1'))

    [/autoit] [autoit][/autoit] [autoit]

    ; Wert von 'Schlüssel1' neu setzen
    _ObjDictSetValue($oTest, 'Schlüssel1', 'neuer Wert')
    MsgBox(0, ' geänderter Wert Schlüssel1', _ObjDictGetValue($oTest, 'Schlüssel1'))

    [/autoit] [autoit][/autoit] [autoit]

    ; Anzahl Schlüssel-Wert Paare ermitteln
    MsgBox(0, 'Anzahl Schlüssel-Wert Paare', _ObjDictCount($oTest))

    [/autoit] [autoit][/autoit] [autoit]

    ; Suchen ob 'Schlüssel3' vorhanden
    If _ObjDictSearch($oTest, 'Schlüssel3') Then
    MsgBox(0, 'Ergebnis Suche', 'Schlüssel3 - vorhanden')
    EndIf
    _ObjDictList($oTest, 'vor dem Löschen')

    [/autoit] [autoit][/autoit] [autoit]

    ; 'Schlüssel2' löschen
    _ObjDictDeleteKey($oTest, 'Schlüssel2')
    _ObjDictList($oTest, 'Schlüssel2 gelöscht')

    [/autoit] [autoit][/autoit] [autoit]

    ; alle Schlüssel löschen
    _ObjDictDeleteKey($oTest, '')
    _ObjDictList($oTest)

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    ============================= OBJEKT 'Scripting.Dictionary' =======================================
    *** Funktionssammlung ***

    [/autoit] [autoit][/autoit] [autoit]

    _ObjDictCreate(Modus)
    Erzeugt ein Dictionary Objekt im Binär- (default) oder Textmodus
    Gibt das Handle des Objektes zurück

    _ObjDictAdd(Objekt, Schlüssel, Wert)
    Fügt einem Dictionary Objekt ein Schlüssel-Wert Paar hinzu

    _ObjDictGetValue(Objekt, Schlüssel)
    Liest den Wert für einen Schlüssel aus

    _ObjDictSetValue(Objekt, Schlüssel)
    Setzt einen neuen Wert für einen Schlüssel

    _ObjDictCount(Objekt)
    Gibt die Anzahl der Schlüssel-Wert Paare zurück

    _ObjDictSearch(Objekt, Schlüssel)
    Prüft ob der Schlüssel existiert, liefert 'TRUE' wenn gefunden

    _ObjDictDeleteKey(Objekt, Schlüssel)
    Löscht den angegebenen Schlüssel (und dessen Wert)
    Wird statt eines Schlüsselnamens '' übergeben,
    werden alle Schlüssel gelöscht (Standard)

    _ObjDictList(Objekt)
    Eine GUI mit einem ListView zeigt alle Schlüssel-Wert Paare

    _IniReadSectionToObjDict(Objekt, INI-Pfad, Sektion)
    Liest die angegebene INI-Sektion in das Objekt
    Gibt die Anzahl der gelesenen Schlüssel-Wert Paare zurück

    _IniWriteSectionFromObjDict(Objekt, INI-Pfad, Sektion)
    Schreibt die Schlüssel-Wert Paare des Objekts in die angegebene Sektion
    der INI-Datei
    Gibt die Anzahl der geschriebenen Schlüssel-Wert Paare zurück

    _FileReadToObjDict(Objekt, TextDatei-Pfad, Seperator)
    Liest aus einer Textdatei alle Schlüssel-Wert Paare zeilenweise ein (1 Paar/Zeile)
    Standard-Seperator ist '|', kann hier angepaßt werden
    Gibt die Anzahl der gelesenen Schlüssel-Wert Paare zurück

    _FileWriteFromObjDict(Objekt, TextDatei-Pfad, Seperator, Overwrite)
    Schreibt die Schlüssel-Wert Paare des Objekts in die angegebene Datei (1 Paar/Zeile).
    Mit Overwrite='TRUE' (Standard) wird die angegebene Datei, falls sie bereits existiert,
    überschrieben. Mit 'FALSE' wird an eine bestehende Datei angehängt.
    Standard-Seperator ist '|', kann hier angepaßt werden.
    Gibt die Anzahl der geschriebenen Schlüssel-Wert Paare zurück

    Autor: BugFix ( [email='bugfix@autoit.de'][/email] )

    [/autoit] [autoit][/autoit] [autoit]

    ===================================================================================================
    #ce
    #include <GuiConstants.au3>
    #include <GuiListView.au3>
    ;==================================================================================================
    ; Parameter: $MODE
    ; 0 Binär (default)
    ; 1 Text
    ; Return: Objekt Handle
    ;==================================================================================================
    Func _ObjDictCreate($MODE=0)
    $oDICT = ObjCreate('Scripting.Dictionary')
    If $MODE <> 0 Then $oDICT.CompareMode = 1
    Return $oDICT
    EndFunc ;==>_ObjDictCreate

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $KEY - Schlüssel
    ; $VALUE - Wert
    ; Return: Erfolg: 0
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 2 Schlüssel ohne Inhalt übergeben
    ; 3 Wert hat keinen Inhalt
    ; 4 Schlüssel bereits vorhanden
    ;==================================================================================================
    Func _ObjDictAdd(ByRef $oDICT, $KEY, $VALUE)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf $KEY = '' Then
    SetError(2)
    Return -1
    ElseIf $VALUE = '' Then
    SetError(3)
    Return -1
    ElseIf $oDICT.Exists($KEY) Then
    SetError(4)
    Return -1
    EndIf
    $oDICT.Add($KEY, $VALUE)
    Return 0
    EndFunc ;==>_ObjDictAdd

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $KEY - Schlüssel
    ; Return: Erfolg: Wert des Schlüssels
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 2 Schlüssel ohne Inhalt übergeben
    ; 5 Schlüssel nicht vorhanden
    ;==================================================================================================
    Func _ObjDictGetValue(ByRef $oDICT, $KEY)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf $KEY = '' Then
    SetError(2)
    Return -1
    ElseIf Not $oDICT.Exists($KEY) Then
    SetError(5)
    Return -1
    EndIf
    Return $oDICT.Item($KEY)
    EndFunc ;==>_ObjDictGetValue

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $KEY - Schlüssel
    ; $VALUE - Wert
    ; Return: Erfolg: 0
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 2 Schlüssel ohne Inhalt übergeben
    ; 3 Wert hat keinen Inhalt
    ; 5 Schlüssel nicht vorhanden
    ;==================================================================================================
    Func _ObjDictSetValue(ByRef $oDICT, $KEY, $VALUE)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf $KEY = '' Then
    SetError(2)
    Return -1
    ElseIf $VALUE = '' Then
    SetError(3)
    Return -1
    ElseIf Not $oDICT.Exists($KEY) Then
    SetError(5)
    Return -1
    EndIf
    $oDICT.Item($KEY) = $VALUE
    Return 0
    EndFunc ;==>_ObjDictSetValue

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; Return: Erfolg: Anzahl der Schlüssel-Wert Paare
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ;==================================================================================================
    Func _ObjDictCount(ByRef $oDICT)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    EndIf
    Return $oDICT.Count
    EndFunc ;==>_ObjDictCount

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $KEY - Schlüssel
    ; Return: Erfolg: TRUE Schlüssel vorhanden
    ; FALSE Schlüssel nicht vorhanden
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 2 Schlüssel ohne Inhalt übergeben
    ;==================================================================================================
    Func _ObjDictSearch(ByRef $oDICT, $KEY)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf $KEY = '' Then
    SetError(2)
    Return -1
    ElseIf Not $oDICT.Exists($KEY) Then
    Return False
    Else
    Return True
    EndIf
    EndFunc ;==>_ObjDictSearch

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $KEY - Schlüssel (default='')
    ; mit $KEY = '' werden alle Schlüssel gelöscht
    ; Return: Erfolg: 0
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ;==================================================================================================
    Func _ObjDictDeleteKey(ByRef $oDICT, $KEY='')
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    EndIf
    If $KEY = '' Then
    $oDICT.RemoveAll
    Return 0
    ElseIf Not $oDICT.Exists($KEY) Then
    SetError(5)
    Return -1
    EndIf
    $oDICT.Remove($KEY)
    Return 0
    EndFunc ;==>_ObjDictDeleteKey

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $TITLE - Fenstertitel (optional)
    ; Return: Erfolg: GUI mit ListView
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; Requirements: #include <GuiConstants.au3>
    ; #include <GuiListView.au3>
    ;==================================================================================================
    Func _ObjDictList(ByRef $oDICT, $TITLE='Elemente: Objekt Dictionary')
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    EndIf
    Local $count = $oDICT.Count
    Local $SaveMode = Opt("GUIOnEventMode",0), $ListGUI, $oDictLV, $btnClose, $msg
    $ListGUI = GUICreate($TITLE, 600, 400, (@DesktopWidth - 600)/2, (@DesktopHeight - 400)/2)
    $btnClose = GUICtrlCreateButton('&Ende', 40, 360, 70, 22)
    GUICtrlSetResizing($btnClose, BitOR($GUI_DockRight, $GUI_DockBottom, $GUI_DockSize))
    GUICtrlDelete($oDictLV)
    $oDictLV = GUICtrlCreateListView('Schlüssel|Wert', 10, 10, 580, 340, BitOR($LVS_SHOWSELALWAYS, _
    $LVS_EDITLABELS), BitOR($LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP, $LVS_EX_FULLROWSELECT, $LVS_EX_REGIONAL))
    If $count > 0 Then
    Local $strKey, $colKeys = $oDICT.Keys
    For $strKey In $colKeys
    GUICtrlCreateListViewItem($strKey & '|' & $oDICT.Item($strKey), $oDictLV)
    Next
    Else
    WinSetTitle($ListGUI, '', 'Das Objekt Dictionary enthält keine Elemente!')
    EndIf
    GUISetState(@SW_SHOW, $ListGUI)
    While 1
    $msg = GUIGetMsg(1)
    If $msg[1] = $ListGUI And _
    ($msg[0] = $GUI_EVENT_CLOSE Or $msg[0] = $btnClose) Then ExitLoop
    WEnd
    GUIDelete($ListGUI)
    Opt("GUIOnEventMode",$SaveMode)
    EndFunc ;==>ObjDictList

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $PathINI - Pfad der INI-Datei
    ; $SECTION - Sektion die gelesen werden soll
    ; Return: Erfolg: Anzahl der eingelesenen Schlüssel-Wert Paare
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 6 INI-Pfad nicht vorhanden
    ; 7 kein Sektionsname
    ; 8 INI-Sektion konnte nicht gelesen werden oder leer
    ;==================================================================================================
    Func _IniReadSectionToObjDict(ByRef $oDICT, $PathINI, $SECTION)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf Not FileExists($PathINI) Then
    SetError(6)
    Return -1
    ElseIf $SECTION = '' Then
    SetError(7)
    Return -1
    EndIf
    Local $arSECTION = IniReadSection($PathINI, $SECTION)
    If Not IsArray($arSECTION) Then
    SetError(8)
    Return -1
    EndIf
    For $i = 1 To $arSECTION[0][0]
    $oDICT.Add($arSECTION[$i][0], $arSECTION[$i][1])
    Next
    Return $arSECTION[0][0]
    EndFunc ;==>_IniReadSectionToObjDict

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $PathINI - Pfad der INI-Datei
    ; $SECTION - Sektion die gelesen werden soll
    ; Return: Erfolg: Anzahl der geschriebenen Schlüssel-Wert Paare
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 7 kein Sektionsname
    ; 9 INI-Sektion konnte nicht geschrieben werden
    ;==================================================================================================
    Func _IniWriteSectionFromObjDict(ByRef $oDICT, $PathINI, $SECTION)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf $SECTION = '' Then
    SetError(7)
    Return -1
    EndIf
    Local $arSECTION[$oDICT.Count][2], $i = 0
    Local $strKey, $colKeys = $oDICT.Keys
    For $strKey In $colKeys
    $arSECTION[$i][0] = $strKey
    $arSECTION[$i][1] = $oDICT.Item($strKey)
    $i += 1
    Next
    If IniWriteSection($PathINI, $SECTION, $arSECTION, 0) = 1 Then
    Return $oDICT.Count
    Else
    SetError(9)
    Return -1
    EndIf
    EndFunc ;==>_IniWriteSectionFromObjDict

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $PathFile - Pfad der Datei
    ; $SEPERATOR - Trennzeichen zwischen Wert u. Schlüssel, Standard: '|'
    ; Return: Erfolg: Anzahl der eingelesenen Schlüssel-Wert Paare
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 6 Datei-Pfad nicht vorhanden
    ; 7 Leerstring als Seperator übergeben
    ; 8 Datei konnte nicht gelesen werden
    ;==================================================================================================
    Func _FileReadToObjDict(ByRef $oDICT, $PathFile, $SEPERATOR='|')
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf Not FileExists($PathFile) Then
    SetError(6)
    Return -1
    ElseIf $SEPERATOR = '' Then
    SetError(7)
    Return -1
    EndIf
    Local $fh = FileOpen($PathFile, 0), $line
    Local $val
    If $fh = -1 Then
    SetError(8)
    Return -1
    EndIf
    While 1
    $line = FileReadLine($fh)
    If @error = -1 Then ExitLoop
    $val = StringSplit($line, $SEPERATOR)
    If $val[0] > 1 Then
    $oDICT.Add($val[1], $val[2])
    EndIf
    Wend
    FileClose($fh)
    Return $oDICT.Count
    EndFunc ;==>_FileReadToObjDict

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $PathFile - Pfad der Datei
    ; $SEPERATOR - Trennzeichen zwischen Wert u. Schlüssel, Standard: '|'
    ; $OVERWRITE - Falls Datei existiert, wird sie überschrieben (Standard).
    ; Mit 'FALSE' wird an bestehende Datei angehängt.
    ; Return: Erfolg: Anzahl der geschriebenen Schlüssel-Wert Paare
    ; Fehler: -1
    ; Fehlerwert: 1 Objekt existiert nicht
    ; 7 Leerstring als Seperator übergeben
    ; 8 Datei konnte nicht geschrieben werden
    ;==================================================================================================
    Func _FileWriteFromObjDict(ByRef $oDICT, $PathFile, $SEPERATOR='|', $OVERWRITE=True)
    If Not IsObj($oDICT) Then
    SetError(1)
    Return -1
    ElseIf $SEPERATOR = '' Then
    SetError(7)
    Return -1
    EndIf
    If $OVERWRITE Then
    Local $fh = FileOpen($PathFile, 34)
    Else
    Local $fh = FileOpen($PathFile, 33)
    EndIf
    Local $strKey, $colKeys = $oDICT.Keys
    For $strKey In $colKeys
    FileWriteLine($fh, $strKey & $SEPERATOR & $oDICT.Item($strKey))
    If @error Then
    SetError(8)
    Return -1
    EndIf
    Next
    FileClose($fh)
    Return $oDICT.Count
    EndFunc ;==>_FileWriteFromObjDict

    [/autoit]
    • Offizieller Beitrag

    Servus.
    Habe ein Problem mit objDict_Set_abbrev_calltip, das Script kann die Datei au3.keywords.abbreviations.properties nicht finden.
    Ist die bei der Autoit v 3.3.0.0 nicht mehr enthalten ?

    • Offizieller Beitrag

    as Script kann die Datei au3.keywords.abbreviations.properties nicht finden.
    Ist die bei der Autoit v 3.3.0.0 nicht mehr enthalten ?


    Es wurden zwar einige Pfade in SciTE mal geändert, aber die Datei existiert noch:
    C:\Programme\AutoIt3\SciTE\Properties\au3.keywords.abbreviations.properties
    Falls sie nicht da ist - probier doch mal sie einfach zu erstellen.