[UDF] Einstellungen einlesen

    • Offizieller Beitrag

    Hallo,


    Eine kleine UDF, um ein eigenes Datenformat für Einstellungen einzulesen. Das Format soll so einfach sein, dass es auch Anwender editieren können. Daher ist es relativ "fehlertolerant" (man kann viele übliche Zeichen für die Trennung oder einen Kommentar verwenden).

    Wer es brauchen kann, darf es unter MIT-Lizenz nutzen.

    settings.au3
    [autoit]

    ; ##############################################################################
    ; Einstellungsverwaltung
    ; ##############################################################################

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

    #include <Array.au3>

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

    Global $__settings_content

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

    Func _readSettings($filename)
    $__settings_content = ObjCreate("System.Collections.Hashtable")
    Local $filecontent = FileRead($filename)
    If @error Then Return False
    ConsoleWrite($filecontent & @CRLF)

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

    Local $array, $key, $value, $nOffset = 0
    While 1
    $array = StringRegExp($filecontent, "(?m)^\s*((""([^""\n]*)"")|('([^'\n]*)')|([^#;/%].*?))\s*[:>|=]\s*((""([^""]*|\n*)"")|('([^'\n]*|\n*)')|([^\n]*))", 1, $nOffset)

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

    If @error = 0 Then
    $nOffset = @extended
    Else
    ExitLoop
    EndIf

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

    if $array[2] <> "" Then $key = $array[2]
    if $array[4] <> "" Then $key = $array[4]
    if $array[5] <> "" Then $key = $array[5]
    $key = StringLower($key)
    if UBound($array) > 11 and $array[11] <> "" Then $value = $array[11]
    if UBound($array) > 10 and $array[10] <> "" Then $value = $array[10]
    if $array[8] <> "" Then $value = $array[8]

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

    If $__settings_content.Contains($key) Then $__settings_content.remove($key)
    $__settings_content.add($key, $value)
    WEnd
    Return True
    EndFunc ;==>_readSettings

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

    Func _debugSettings()

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

    EndFunc ;==>_debugSettings

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

    Func _getBooleanSetting($name, $default = False)
    Local $nameInternal = StringLower($name)
    If $__settings_content.Contains($nameInternal) Then
    If $__settings_content($nameInternal) = "True" Or $__settings_content($nameInternal) = "Ja" Or $__settings_content($nameInternal) == "1" Or $__settings_content($nameInternal) == "Yes" Then Return True
    Return False
    EndIf
    Return $default
    EndFunc ;==>_getBooleanSetting

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

    Func _getStringSetting($name, $default = "")
    Local $nameInternal = StringLower($name)
    If $__settings_content.Contains($nameInternal) Then
    Return $__settings_content($nameInternal)
    EndIf
    Return $default
    EndFunc ;==>_getStringSetting

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

    Func _getIntegerSetting($name, $default = 0)
    Local $nameInternal = StringLower($name)
    If $__settings_content.Contains($nameInternal) Then
    Return Int($__settings_content($nameInternal))
    EndIf
    Return Int($default)
    EndFunc ;==>_getIntegerSetting

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

    ;~ _test()
    Func _test()
    _readSettings(@ScriptDir & "\Einstellungen_Test.txt")
    _debugSettings()
    ConsoleWrite('TestBool: ' & _getBooleanSetting('testbool') & @CRLF)
    ConsoleWrite('TestStr: ' & _getStringSetting('TestStr') & @CRLF)
    ConsoleWrite('TestInt: ' & _getIntegerSetting('TestINT') & @CRLF)
    ConsoleWrite('Übergangs-Test: ' & _getStringSetting('Übergangs-Test') & @CRLF)
    EndFunc ;==>_test

    [/autoit]
    Einstellungen_Test.txt

    Speichern ist bewusst nicht implementiert, es ist eher so gedacht wie bei Apache, dass man in der Textdatei von Hand konfiguriert und damit das Tool steuert, sobald es gestartet wird.


    Happy Coding!
    Johannes