Iniwrite

  • ICh habe in einer meiner Anwendungen eine Funktion wo man durch einen Button eine GUI öffnet auf der man einen Namen eintragen kann, aus einer Combobox auswählen kann und in Einem Editfeld etwas eingeben kann.
    Meine frage:
    KAnn man in eine Ini zu einem NAmen auch mehrere Einträge speichern?
    Wie soll ich das ganze dann aufbauen?
    und wie kann ich es wieder ausgeben?
    Mein Stück Quellcode wo es drinnen sein soll schaut so aus:

    [autoit]


    Func ZeigeAnmerkungen()


    $Form1_1 = GUICreate("Verstösse Melden", 764, 481, 335, 244)
    $Input1 = GUICtrlCreateInput("Name", 136, 16, 617, 21)
    $Label1 = GUICtrlCreateLabel("Name des Schülers", 8, 16, 96, 17)
    $Combo1 = GUICtrlCreateCombo("Verstoss", 136, 48, 617, 25)
    GUICtrlSetData(-1, "1 Körperverletzung|2 Rauferei (kleiner)|3 Diebstahl|4 Schwänzen|5 Zu spät erscheinen|6 Fluchen|7 Disziplin")
    $Edit1 = GUICtrlCreateEdit("", 136, 72, 473, 337, BitOR($ES_AUTOHSCROLL,$ES_WANTRETURN), 0)
    GUICtrlSetData(-1, StringFormat("Zeile 1\r\nZeile 2"))
    $Label2 = GUICtrlCreateLabel("Anmerkungen zum Verstoss", 0, 72, 135, 17)
    $Button1 = GUICtrlCreateButton("Speichern", 144, 424, 81, 25, 0)
    $Button2 = GUICtrlCreateButton("Cancel", 536, 424, 81, 25, 0)
    GUISetState(@SW_SHOW)

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUISwitch( $Form1 )
    GUIDelete( $Form1_1 )
    ExitLoop
    Case $Button2
    GUISwitch( $Form1 )
    GUIDelete( $Form1_1 )
    ExitLoop
    EndSwitch
    WEnd
    EndFunc

    [/autoit]
  • Servous,

    also ich würde es so machen, alles in eine ini Datei speichern als einen langen String, und beim auslesen den String wieder in die Bestandteile zerlegen (StringSplit)

    Speichern würde ich eh in etwa so

    "Name;Verstoss;Anmerkung;", wobei das Simikolon als späteren Erkennungspunkt für StringSplit gilt, um den langen String wieder in seine Bestandteile zu Spalten.

    Gruß Marvin

  • Hallo PowerCore,

    wenn du die Schülername als Sketionsnamen nimmst kannst du es so machen:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    ; *** End added by AutoIt3Wrapper ***
    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Add_Constants=n
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    Local $sIni = @ScriptDir & "\Meldungen.ini"

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

    $Form1_1 = GUICreate("Verstösse Melden", 764, 481, 335, 244)
    $idInpSchueler = GUICtrlCreateInput("Name", 136, 16, 617, 21)
    $Label1 = GUICtrlCreateLabel("Name des Schülers", 8, 16, 96, 17)
    $idCboVerstoss = GUICtrlCreateCombo("Verstoss", 136, 48, 617, 25)
    GUICtrlSetData(-1, "1 Körperverletzung|2 Rauferei (kleiner)|3 Diebstahl|4 Schwänzen|5 Zu spät erscheinen|6 Fluchen|7 Disziplin")
    $idEdtVerstoesse = GUICtrlCreateEdit("", 136, 72, 473, 337, BitOR($ES_AUTOHSCROLL, $ES_WANTRETURN), 0)
    GUICtrlSetData(-1, StringFormat("Zeile 1\r\nZeile 2"))
    $Label2 = GUICtrlCreateLabel("Anmerkungen zum Verstoss", 0, 72, 135, 17)
    $idBtnSave = GUICtrlCreateButton("Speichern", 144, 424, 81, 25, 0)
    $idBtnCancel = GUICtrlCreateButton("Cancel", 536, 424, 81, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ;GUISwitch( $Form1 )
    GUIDelete($Form1_1)
    ExitLoop
    Case $idInpSchueler
    $sVerStoesse = ""
    $iVerNr = 0
    $sSchueler = GUICtrlRead($idInpSchueler)
    $aSchueler = IniReadSection($sIni, $sSchueler)
    If Not @error Then
    $iVerNr = $aSchueler[0][0]
    For $i = 1 To $aSchueler[0][0]
    $sVerStoesse &= $aSchueler[$i][1] & @CRLF
    Next
    EndIf
    GUICtrlSetData($idEdtVerstoesse, $sVerStoesse)
    Case $idBtnSave
    $sVerstoss = GUICtrlRead($idCboVerstoss)
    $sVerStoesse &= $sVerstoss & @CRLF
    GUICtrlSetData($idEdtVerstoesse, $sVerStoesse)
    IniWrite($sIni, $sSchueler, $iVerNr + 1, $sVerstoss)
    Case $idBtnCancel
    ;GUISwitch( $Form1 )
    GUIDelete($Form1_1)
    ExitLoop
    EndSwitch
    WEnd

    [/autoit]

    du solltest aber meines Erachtens dich mit SQLite beschäftigen um dort die Daten zu speichern. Ausserdem würde ich das Edit-Control gegen ein ListView-Control austauschen in dem du dann noch Datum und evtl. weitere Bemerkungen anzeigen kannst,

    mfg autoBert