Problem mit ini Read -.-

  • Da bin ich wieder. :rolleyes:

    So, habe in meinen Notenrechner jetzt verschiedene neue Funktionen eingefügt, unter anderem wollte ich auch das die ini.Datei nicht nur eingelesen, sonder auch ausgelesen wird. Und da häng ich jetzt richtig. Hab mir jetzt alle möglichen Tuts angeschaut, ich komm einfach nicht drauf warum es nicht klappt. :wacko:

    Hier mal der (Problem)Code

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("KevKevs Notenrechner", 325, 359, 343, 187)
    $Englischlabel = GUICtrlCreateLabel("Englisch", 32, 40, 68, 17)
    $Deutschlabel = GUICtrlCreateLabel("Deutsch", 32, 80, 68, 17)
    $ReWelabel = GUICtrlCreateLabel("ReWe", 32, 120, 59, 17)
    $BWLlabel = GUICtrlCreateLabel("BWL", 32, 160, 60, 17)
    $Uefalabel = GUICtrlCreateLabel("Uefa", 32, 200, 59, 17)
    $Sozilabel = GUICtrlCreateLabel("Sozi", 192, 40, 40, 17)
    $PAlabel = GUICtrlCreateLabel("PA", 192, 80, 42, 17)
    $Sportlabel = GUICtrlCreateLabel("Sport", 192, 120, 37, 17)
    $Relilabel = GUICtrlCreateLabel("Reli", 192, 160, 38, 17)
    $DVlabel = GUICtrlCreateLabel("DV", 192, 200, 35, 17)
    $VWLlabel = GUICtrlCreateLabel("VWL", 32, 240, 60, 17)
    $TVlabel = GUICtrlCreateLabel("TV", 192, 240, 34, 17)
    $iEnglisch = GUICtrlCreateInput("", 120, 40, 41, 21)
    $iDeutsch = GUICtrlCreateInput("", 120, 80, 41, 21)
    $iReWe = GUICtrlCreateInput("", 120, 120, 41, 21)
    $iBWL = GUICtrlCreateInput("", 120, 160, 41, 21)
    $iUefa = GUICtrlCreateInput("", 120, 200, 41, 21)
    $iVWL = GUICtrlCreateInput("", 120, 240, 41, 21)
    $iSozi = GUICtrlCreateInput("", 248, 40, 41, 21)
    $iPA = GUICtrlCreateInput("", 248, 80, 41, 21)
    $iSport = GUICtrlCreateInput("", 248, 120, 41, 21)
    $iReli = GUICtrlCreateInput("", 248, 160, 41, 21)
    $iDV = GUICtrlCreateInput("", 248, 200, 41, 21)
    $iTV = GUICtrlCreateInput("", 248, 240, 41, 21)
    $ND = GUICtrlCreateButton("Notendurschnitt", 32, 280, 89, 33, 0)
    $Speichern = GUICtrlCreateButton("Speichern", 136, 280, 65, 33, 0)
    $Copyright = GUICtrlCreateLabel("Copyright", 200, 336, 48, 17)
    $Auslesen = GUICtrlCreateButton("Auslesen", 136, 320, 65, 33, 0)
    $Kevin = GUICtrlCreateLabel("Kevin", 248, 336, 31, 17)
    $Soldner = GUICtrlCreateLabel("Soldner", 280, 336, 40, 17)
    GUICtrlCreateLabel("", 224, 288, 4, 4)
    GUICtrlCreateLabel("Erg", 216, 280, 73, 33)
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; Automatisches Auslesen der ini.Datei ohne Button
    $iEnglisch=IniRead("Noten.ini","Noten","Englisch","0")
    $iDeutsch=IniRead("Noten.ini","Noten","Deutsch","0")
    $iReWe=IniRead("Noten.ini","Noten","ReWe","0")
    $iBWL=IniRead("Noten.ini","Noten","BWL","0")
    $iUefa=IniRead("Noten.ini","Noten","UeFa","0")
    $iVWL=IniRead("Noten.ini","Noten","VWL","0")
    $iSozi=IniRead("Noten.ini","Noten","Sozi","0")
    $iPA=IniRead("Noten.ini","Noten","PA","0")
    $iSport=IniRead("Noten.ini","Noten","Sport","0")
    $iReli=IniRead("Noten.ini","Noten","Reli","0")
    $iDV=IniRead("Noten.ini","Noten","DV","0")
    $iTV=IniRead("Noten.ini","Noten","TV","0")

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

    If GUICtrlRead($iBWL) < 1 Or GUICtrlRead($iDV) < 1 Or GUICtrlRead($iPA) < 1 Or GUICtrlRead($iReli) < 1 Or GUICtrlRead($iReWe) < 1 Or GUICtrlRead($iSozi) < 1 Or GUICtrlRead($iSport) < 1 Or GUICtrlRead($iTV) < 1 Or GUICtrlRead($iUefa) < 1 Or GUICtrlRead($iVWL) < 1 Or GUICtrlRead($iDeutsch) < 1 7 Or GUICtrlRead($iEnglisch) < 1 Then
    MsgBox ( 16, "Error", "Fehler beim Auslesen der ini.Datei")
    EndIf

    [/autoit]

    Folgendes soll passieren:

    Wenn das Programm geöffnet wird, sollen die Werte aus der .ini automatisch in die Inputboxen eingetragen werden.

    Ja, und das Problem ist das das nicht klappt.^^ Ich weis nicht wieso, in allen Tuts wird es immer so angezeigt:

    Noten.ini = Die .ini die ausgelesen werden soll
    Noten = Die Sektion die ausgelesen soll
    Englisch = Der Key der ausgelesen werden soll
    0 = Das, was angezeigt werden soll wenn das auslesen fehlschlägt oder der Wert nicht existiert

    Die Variable davor soll ja angeben, wo der Wert aus der .ini hingeschrieben werden soll.

    Dummerweise passiert rein gar nichts, weder beim Automatischen Auslesen noch beim Auslesen per Button.
    Sufu spuckt nix aus, tuts helfen mir nicht weiter und ich selber komm schon gleich gar nicht drauf. :wacko: Kann mir bitte jemand sagen was ich falsch mache oder ob das überhaupt funktioniert? :pinch:

    Einmal editiert, zuletzt von Destiny of Faith (16. Juli 2011 um 23:00)

  • ich bin zwar nicht gut aber ich hätts so gemacht

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    Dim $Input[12]
    Dim $Read[12]

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

    $Form1_1 = GUICreate("KevKevs Notenrechner", 325, 359, 343, 187)
    GUICtrlCreateLabel("Englisch", 32, 40, 68, 17)
    GUICtrlCreateLabel("Deutsch", 32, 80, 68, 17)
    GUICtrlCreateLabel("ReWe", 32, 120, 59, 17)
    GUICtrlCreateLabel("BWL", 32, 160, 60, 17)
    GUICtrlCreateLabel("Uefa", 32, 200, 59, 17)
    GUICtrlCreateLabel("Sozi", 192, 40, 40, 17)
    GUICtrlCreateLabel("PA", 192, 80, 42, 17)
    GUICtrlCreateLabel("Sport", 192, 120, 37, 17)
    GUICtrlCreateLabel("Reli", 192, 160, 38, 17)
    GUICtrlCreateLabel("DV", 192, 200, 35, 17)
    GUICtrlCreateLabel("VWL", 32, 240, 60, 17)
    GUICtrlCreateLabel("TV", 192, 240, 34, 17)
    $Input[0] = GUICtrlCreateInput("", 120, 40, 41, 21)
    $Input[1] = GUICtrlCreateInput("", 120, 80, 41, 21)
    $Input[2] = GUICtrlCreateInput("", 120, 120, 41, 21)
    $Input[3] = GUICtrlCreateInput("", 120, 160, 41, 21)
    $Input[4] = GUICtrlCreateInput("", 120, 200, 41, 21)
    $Input[5] = GUICtrlCreateInput("", 120, 240, 41, 21)
    $Input[6] = GUICtrlCreateInput("", 248, 40, 41, 21)
    $Input[7] = GUICtrlCreateInput("", 248, 80, 41, 21)
    $Input[8] = GUICtrlCreateInput("", 248, 120, 41, 21)
    $Input[9] = GUICtrlCreateInput("", 248, 160, 41, 21)
    $Input[10] = GUICtrlCreateInput("", 248, 200, 41, 21)
    $Input[11] = GUICtrlCreateInput("", 248, 240, 41, 21)
    $ND = GUICtrlCreateButton("Notendurschnitt", 32, 280, 89, 33, 0)
    $Speichern = GUICtrlCreateButton("Speichern", 136, 280, 65, 33, 0)
    $Copyright = GUICtrlCreateLabel("Copyright", 200, 336, 48, 17)
    $Auslesen = GUICtrlCreateButton("Auslesen", 136, 320, 65, 33, 0)
    $Kevin = GUICtrlCreateLabel("Kevin", 248, 336, 31, 17)
    $Soldner = GUICtrlCreateLabel("Soldner", 280, 336, 40, 17)
    GUICtrlCreateLabel("", 224, 288, 4, 4)
    GUICtrlCreateLabel("Erg", 216, 280, 73, 33)
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Speichern
    Speichern()
    Case $Auslesen
    Einlesen()
    EndSwitch
    WEnd
    Func Einlesen()
    For $i = 0 to 11
    GUICtrlSetData($Input[$i],IniRead("Noten.ini","Noten",$i,""))
    Next
    EndFunc
    Func Speichern()
    For $i = 0 to 11
    $Read[$i] = GUICtrlRead($Input[$i])
    IniWrite("Noten.ini","Noten",$i,$Read[$i])
    Next
    EndFunc

    [/autoit]
  • Danke für die Idee, aber ich wollte eigentlich nicht das ganze Script umschreiben, sondern nur das IniRead richtig haben :S Der Rest funktioniert ja tadellos

  • Versuch mal aus

    [autoit]

    "Noten.ini"

    [/autoit][autoit]

    @ScriptDir & "\Noten.ini"

    [/autoit]


    zumachen

    Und warum bei der Abfrage ein GUICtrlRead? Das Script liest ja die Variablen aus, die sich aus IniRead ergeben haben, nichts aus der GUI.

  • Ne klappt nicht. :S

    Und das unten gehört so, das sollte ne Fehlermeldung werden die nicht ganz fertiggewordne ist. Fehlt ja auch noch das then.^^

    Einmal editiert, zuletzt von Destiny of Faith (16. Juli 2011 um 23:02)

  • Danke für die Idee, aber ich wollte eigentlich nicht das ganze Script umschreiben, sondern nur das IniRead richtig haben :S Der Rest funktioniert ja tadellos

    Na du hättest sein Script aber nur mal ansehen müssen um zu verstehen wie man das richtig macht. Ich erklär dir was du falsch machst.

    1. Wenn du ein Label oder Input oder sonst ein GUI Control erstellst erhältst du eine ID. Diese speicherst du in der Variable die du diesem Control zuweist. Soweit passt ja alles bei dir
    2. Nun gehst du aber her und überschreibst dir diese gespeicherten IDs der Controls, weil du die selbe Varibale dem iniread zuweist. Du hast den Inhalt aus der ini zwar nun in der Variable, aber nicht im Control.
    3. Da du die ID des Controls jetzt überschrieben hast wars das. Dein Control ist jetzt wertlos weil du es nicht mehr über die ID ansprechen oder verändern kannst, vergleichbar mit Plastikäpfeln in einem Möbelhaus. :P

    Wie macht man das jetzt richtig?

    [autoit]


    $iEnglisch = GUICtrlCreateInput("", 120, 40, 41, 21)
    ;....
    $irgendwas = IniRead("Noten.ini","Noten","Englisch","0")
    guictrlsetdata($iEnglisch,$irgendwas)

    [/autoit]

    Merke:

    1. Finger weg von Variablen die du für GUI Controls verwendest. Allgemein sollte man eine Variable nicht mehrfach für unterschiedliche Dinge nutzen, ausser es handelt sich nur um eine temporäre Variable deren Inhalt du später nicht mehr brauchst.
    2. Den Inhalt eines GUI Controls ändert man sogut wie immer mit guictrlsetdata()

  • Thx. :***

    Der letzte Satz war ausschlaggebend - habs jetz endlich so hinbekommen wies sein soll. :D

    [autoit]

    ; Automatisches Auslesen der ini.Datei ohne Button
    $iEnglisch2=IniRead("Noten.ini","Noten","Englisch","0")
    GUIctrlsetdata ( $iEnglisch, $iEnglisch2)
    $iDeutsch2=IniRead("Noten.ini","Noten","Deutsch","0")
    GUIctrlsetdata ( $iDeutsch, $iDeutsch2)
    $iReWe2=IniRead("Noten.ini","Noten","ReWe","0")
    GUIctrlsetdata ( $iReWe, $iReWe2)
    $iBWL2=IniRead("Noten.ini","Noten","BWL","0")
    GUIctrlsetdata ( $iBWL, $iBWL2)
    $iUefa2=IniRead("Noten.ini","Noten","UeFa","0")
    GUIctrlsetdata ( $iUefa, $iUefa2)
    $iVWL2=IniRead("Noten.ini","Noten","VWL","0")
    GUIctrlsetdata ( $iVWL, $iVWL2)
    $iSozi2=IniRead("Noten.ini","Noten","Sozi","0")
    GUIctrlsetdata ( $iSozi, $iSozi2)
    $iPA2=IniRead("Noten.ini","Noten","PA","0")
    GUIctrlsetdata ( $iPA, $iPA2)
    $iSport2=IniRead("Noten.ini","Noten","Sport","0")
    GUIctrlsetdata ( $iSport, $iSport2)
    $iReli2=IniRead("Noten.ini","Noten","Reli","0")
    GUIctrlsetdata ( $iReli, $iReli2)
    $iDV2=IniRead("Noten.ini","Noten","DV","0")
    GUIctrlsetdata ( $iDV, $iDV2)
    $iTV2=IniRead("Noten.ini","Noten","TV","0")
    GUIctrlsetdata ( $iTV, $iTV2)

    [/autoit]