- 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
#include <GuiConstants.au3>
#include <GuiListView.au3>
; Dictionary Objekt erstellen
$oTest = _ObjDictCreate(1)
; Schlüsselpaare hinzufügen
_ObjDictAdd($oTest, 'Schlüssel1', 'Wert1')
_ObjDictAdd($oTest, 'Schlüssel2', 'Wert2')
_ObjDictAdd($oTest, 'Schlüssel3', 'Wert3')
; Anzeige aller Schlüssel-Wert Paare
_ObjDictList($oTest, 'Einträge hinzugefügt')
; Wert von 'Schlüssel1' auslesen
MsgBox(0, 'Wert von Schlüssel1', _ObjDictGetValue($oTest, 'Schlüssel1'))
; Wert von 'Schlüssel1' neu setzen
_ObjDictSetValue($oTest, 'Schlüssel1', 'neuer Wert')
MsgBox(0, ' geänderter Wert Schlüssel1', _ObjDictGetValue($oTest, 'Schlüssel1'))
; Anzahl Schlüssel-Wert Paare ermitteln
MsgBox(0, 'Anzahl Schlüssel-Wert Paare', _ObjDictCount($oTest))
; 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')
; 'Schlüssel2' löschen
_ObjDictDeleteKey($oTest, 'Schlüssel2')
_ObjDictList($oTest, 'Schlüssel2 gelöscht')
; alle Schlüssel löschen
_ObjDictDeleteKey($oTest, '')
_ObjDictList($oTest)
#cs
============================= OBJEKT 'Scripting.Dictionary' =======================================
*** 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)
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] )
===================================================================================================
#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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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
;==================================================================================================
; 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