• Hallo Community als ich letztens an einen Projekt saß was viel mit Ini's und aktualisierung von Werten zu tun hatte wollte ich nciht mehr mit Ini's arbeiten und habe eine AZI UDF geschrieben AZI bedeutet "Alternative zu Ini" erstmals habe ich sie geschrieben weil ich eienn einfachen Abruf übers Internet brauchte.


    Funktionen:

    Spoiler anzeigen


    _AZI_InetRead
    _AZI_Read
    _AZI_Write
    _AZI_DeleteEntry


    Code:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <File.au3>
    #include <String.au3>
    #include <Array.au3>
    #include <INet.au3>

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

    #cs
    Das hier ist die AZI UDF AZI steht für "Alternative zu Ini" da ich es satt hatte
    Ini's zu nutzen habe ich diese UDF geschrieben das Dateiformat ähnelt XML ist es
    aber nicht außerdem kann man AZI übers Internet abrufen was vom großen Voteil
    ist wenn man einen Login machen will

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

    #ce

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

    #cs
    Functions:
    _AZI_InetRead
    _AZI_Read
    _AZI_Write
    _AZI_DeleteEntry

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

    #ce

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

    #cs
    Function: _AZI_InetRead

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

    Parameter:-$url(URL zu der HTML Datei wo die Werte drinenstehen)
    -$name(Den Namen des Wertes den man auslesen will)

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

    #ce

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

    Func _AZI_INetRead($url,$name)

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

    $save = _INetGetSource($url)
    FileWrite(@TempDir & "temp.hfdsahlfslaf",$save)
    Local $working

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

    _FileReadToArray(@TempDir & "temp.hfdsahlfslaf",$working)
    FileDelete(@TempDir & "temp.hfdsahlfslaf")
    For $i = 1 to $working[0]
    $currentstr = $working[$i]
    $result = StringInStr($currentstr,"name=." & $name & ".")
    If $result <> 0 THen
    $cworking = $currentstr
    ExitLoop
    EndIf
    Next

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

    $name = _StringBetween($cworking,"name=.",".")
    $typ = _StringBetween($cworking,"typ=.",".")
    $trenner = "<entry name=." & $name[0] & ". typ=." & $typ[0] & ".>"
    $ausgabe1 = _StringBetween($cworking,$trenner,"</entry>")
    $ausgabestr = String($ausgabe1[0])
    $ausgabeint = Number($ausgabe1[0])

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

    Switch $typ[0]

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

    Case "int"
    Return $ausgabeint
    Case "str"
    Return $ausgabestr
    Case "bool"
    Return $ausgabeint
    Case Else
    SetError(3)

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

    EndSwitch
    EndFunc
    #cs
    Function: _AZI_Read

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

    Parameter:-$azifile(Pfad zu der AZI Datei wo die Werte drinenstehen)
    -$name(Den Namen des Wertes den man auslesen will)

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

    #ce
    Func _AZI_Read($azifile,$name)
    Local $working

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

    _FileReadToArray($azifile,$working)
    For $i = 1 to $working[0]
    $currentstr = $working[$i]
    $result = StringInStr($currentstr,"name=." & $name & ".")
    If $result <> 0 THen
    Global $cworking = $currentstr
    ExitLoop
    EndIf
    Next

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

    $name = _StringBetween($cworking,"name=.",".")
    $typ = _StringBetween($cworking,"typ=.",".")
    $trenner = "<entry name=." & $name[0] & ". typ=." & $typ[0] & ".>"
    $ausgabe1 = _StringBetween($cworking,$trenner,"</entry>")
    $ausgabe = $ausgabe1[0]

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

    $ausgabestr = String($ausgabe1[0])
    $ausgabeint = Number($ausgabe1[0])

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

    Switch $typ[0]

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

    Case "int"
    Return $ausgabeint
    Case "str"
    Return $ausgabestr
    Case "bool"
    Return $ausgabeint
    Case Else
    SetError(3)

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

    EndSwitch

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

    EndFunc

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

    #cs
    Function: _AZI_Write

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

    Parameter:-$azifile(Pfad zu der AZI Datei wo die Werte drinenstehen)
    -$name(Den Namen des Wertes den man erstellen will)
    -$typ(Typ des Wertes(int,bool,str))
    -$value(Den Wert den man erstellen will)
    #ce

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

    Func _AZI_Write($azifile,$name,$typ,$value)
    FileWriteLine($azifile,"<entry name=." & $name & ". typ=." & $typ & ".>" & $value & "</entry>")

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

    Return 1

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

    EndFunc

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

    #cs
    Function: _AZI_DeleteEntry

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

    Parameter:-$azifile(Pfad zu der AZI Datei wo die Werte drinenstehen)
    -$name(Den Namen des Wertes den man löschen will)
    #ce

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

    Func _AZI_DeleteEntry($azifile,$name)
    Local $working
    _FileReadToArray($azifile,$working)
    For $i = 1 to $working[0]
    $currentstr = $working[$i]
    $result = StringInStr($currentstr,"name=." & $name & ".")
    If $result <> 0 THen
    Global $i
    ExitLoop
    EndIf
    Next

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

    _FileWriteToLine($azifile,$i,"",1)

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

    Endfunc

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

    Ich suche noch viele Ideen für Funktionen würde mich auf Feedback und Vorschläge freuen

    • Offizieller Beitrag

    Hat denn niemand was für die UDF übrig?


    Wenn du dein Skript ausschließlich als gepackte Datei anhängst, wirst du wenig Resonanz haben. Dein Skript ist nicht groß, also poste es bitte direkt.
    Ich persönlich sehe mir Dateien fast ausschließlich online an. Wenn ich es erst noch herunterladen und entpacken muß ist mein Interesse dahin.. 8|

  • der grund warum ich es packe ist weil in den archiv ist ein example und und es wird gezeigt wie mab so einen entry mit der hand schreiben kann

    • Offizieller Beitrag

    Dann hebe doch mal hervor, warum man deine UDF anstatt den INI Befehlen benutzen soll.
    Wo liegen die Vorteile? Verkauf uns deine UDF.

  • 1.Weil man sich aussuchen kann wie man den Wert haben will bei einer Ini kriegst du ihn immer als String
    2.So ist es leichter über Internet Werte zu erhalten
    3.Mir war langweilig
    4.Ich werde noch mehr Optionen hinzufügen

    • Offizieller Beitrag

    Ok.
    Dann mal zu _AZI_INetRead und _AZI_Read : Wenn es jemand benutzen soll, sollte auch eine Variable zurückgegeben werden. Kann nicht auf Anhieb erkennen welche Variable zurückgegeben wird. Edit ich glaub ich war Blind, behaupte mal das Gegenteil.
    Zu _AZI_Write : Wo ist eine Standardvorgabe und eine Fehlerabfrage?
    Zu _AziDeleteEntry: Wo ist eine Fehlerabfrage und wie erfahre ich, das der Eintrag auch wirklich gelöscht ist ?

    Zur Zeit ist dein Script außer für dich wohl für keinen benutzbar, ohne etliche Änderungen daran zu machen.
    Das soll jetzt nicht dein Script runtermachen. Wenn es andere benutzen sollen, muß es aber auch Universell einsetzbar sein.

    Beispiel wenn ich dein _AZI_Read benutzen will, muß ich $ausgabestr, $ausgabeint deklarieren. Das ist nicht sehr praktisch. Auserdem muß ich nach deiner Funktion mir auch noch Gendanken machen welche von beiden Variablen ich benutzen muß und Voralledingen noch prüfen ob die Variablen auch richtig sind.

  • Ich habe jetzt mal die aktuellste Version hochgeladen

    1.Es wird eine Variable zurückgegeben und wenn man zu blind ist zu gucken was hinter Return steht ist das nicht mein Problem
    2.Wozu eine Standardvorgabe?
    3.Man erkennt wenn es gelöscht wurde daran wenn es nicht mehr in der Datei ist

    • Offizieller Beitrag

    Das mit dem Return habe ich übersehen, mein Fehler.
    Wenn du keine Vorschläge willst, dann behalte doch dein Script und werde glücklich.
    Funktion die keinerlei Fehlerbehandlung enthalten sind nich Universell.

    Zitat

    3.Man erkennt wenn es gelöscht wurde daran wenn es nicht mehr in der Datei ist


    Naja wenn die Entwickler von Autoit oder den UDF´s so gedacht hätten.... armes Autoit.

    • Offizieller Beitrag

    Deine SetError nach dem Return werden nie ausgeführt.
    Die Funktionen haben zu viele Fallstricke.
    Z.B. kann man mehrer Schlüssel mit dem selben Namen ertstellen. Was ist wenn INetGetSource nicht klappt?. Was passiert, wenn die zu lesende Datei nicht existiert?

    Hier hast du was zum testen, rechne immer damit das der Benutzer einen Fehler machen kann:

    [autoit]

    $a = _AZI_Write("example.azi","name","int",1)
    MsgBox(0,"",$a)
    _AZI_Write("example.azi","name","String","Test")
    _AZI_Write("example.azi","name1","Strung","Test")
    ;~ MsgBox(0,"",_AZI_Read("example.azi","name"));Fehler 1. Fund wird angezeigt, da mehrfach schreiben möglich
    ;~ MsgBox(0,"",_AZI_Read("example1.azi","name"));Fehler Subscript used with non-Array variable.:
    ;~ MsgBox(0,"",_AZI_Read("example.azi","name2"));Fehler Variable used without being declared.:
    ;~ MsgBox(0,"",_AZI_Read("example.azi","name1"))
    ;~ _AZI_INetRead("www.google.de","name");Fehler Variable used without being declared

    [/autoit]


    Entferne mal nacheinander die auskommentierungen, ohne entsprechende Fehlerabfrage wird es zum Programmabbruch kommen.