listeneinträge speichern / abrufen

  • der titel beschreibt mein ziel, das problem ist, dass die funktion getList() nicht funktioniert

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

    #include <GUIConstants.au3>
    #include <GUIListBox.au3>
    #include <ListBoxConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #Include <GuiListView.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Fishlist", 224, 254, 332, 154)
    $List1 = GUICtrlCreateList("", 0, 0, 129, 253,$LBS_SORT)
    $Button1 = GUICtrlCreateButton("Add Player", 136, 8, 81, 25, 0)
    $Button2 = GUICtrlCreateButton("Delete", 136, 40, 81, 25, 0)
    $Button3 = GUICtrlCreateButton("Search", 136, 200, 81, 41, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _getList() ;füllt $list1 mit informationen aus list.log

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _Exit()
    case $Button1
    _add ()
    case $Button2
    _delete()
    EndSwitch
    WEnd

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

    func _add () ;fügt der liste ein item hinzu (getestet & läuft)
    $temp = InputBox("Add Player","Gib den Spielernamen an","","",100,40)
    if @error = 0 Then
    _GUICtrlListBox_AddString($List1,$temp)
    EndIf
    EndFunc

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

    func _delete () ;löscht das markierte item (getestet & läuft)
    $name = GUICtrlRead($list1)
    $temp = _GUICtrlListBox_FindString($List1, $name)
    if MsgBox(4,"Delete",$name & " löschen?") = 6 Then
    _GUICtrlListBox_DeleteString($List1,$temp)
    EndIf
    EndFunc

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

    func _getList () ;hier liegt das problem
    $file = FileOpen("list.log",0)
    for $i = 1 to _FileCountLines($file) ;für jede zeile im logfile-
    $text = FileReadLine("list.log",$i) ;wird die zeile ausgelesen -
    _GUICtrlListView_AddString($list1,$text) ;und der liste hinzugefügt (hier liegt das problem glaub ich
    Next
    FileClose($file)
    EndFunc ;oder auch nicht

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

    func _saveList () ;speichert den content der liste in list.log, 1 item / zeile (getestet & läuft)
    $log = FileOpen("list.log",2)
    For $i = 0 To _GUICtrlListBox_GetCount($List1) - 1
    FileWriteLine($log, _GUICtrlListBox_GetText($List1, $i))
    Next
    FileClose($log)
    EndFunc

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

    func _exit ()
    _saveList ()
    exit
    endfunc

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

    anstelle von GUICtrlListBox_AddString hab ich schon _GUICtrlListBox_AddItem versucht,
    außerdem GUICtrlSetData(string), ohne erfolg

  • Hallo Zombie36,

    hier dein geändertes Skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListBox.au3>
    #include <ListBoxConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

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

    Global $sFileName = @ScriptDir & "\list.log"
    ;Pfad zur Datei
    ;damit ist sichergestellt dass überall die gleiche Datei verwendet wird

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Fishlist", 224, 254, 332, 154)
    $List1 = GUICtrlCreateList("", 0, 0, 129, 253, $LBS_SORT)
    $Button1 = GUICtrlCreateButton("Add Player", 136, 8, 81, 25, 0)
    $Button2 = GUICtrlCreateButton("Delete", 136, 40, 81, 25, 0)
    $Button3 = GUICtrlCreateButton("Search", 136, 200, 81, 41, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    _getList() ;füllt $list1 mit informationen aus list.log

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _Exit()
    Case $Button1
    _add()
    Case $Button2
    _delete()
    EndSwitch
    WEnd

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

    Func _add() ;fügt der liste ein item hinzu (getestet & läuft)
    $temp = InputBox("Add Player", "Gib den Spielernamen an", "", "", 100, 40)
    If @error = 0 Then
    _GUICtrlListBox_AddString($List1, $temp)
    EndIf
    EndFunc ;==>_add

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

    Func _delete() ;löscht das markierte item (getestet & läuft)
    $name = GUICtrlRead($List1)
    $temp = _GUICtrlListBox_FindString($List1, $name)
    If MsgBox(4, "Delete", $name & " löschen?") = 6 Then
    _GUICtrlListBox_DeleteString($List1, $temp)
    EndIf
    EndFunc ;==>_delete

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

    Func _getList() ;hier liegt das problem
    $j = _FileCountLines($sFileName)
    ;Anzahl der Zeilen ermitteln funktioniert nicht bei geöffneter Datei
    $file = FileOpen($sFileName, 0)
    For $i = 1 To $j ;für jede zeile im logfile-
    $text = FileReadLine($file, $i) ;wird die zeile ausgelesen
    ;hier muss wenn FileOpen verwendet wird auch das zurückgegebne Handle verwendet werden
    ConsoleWrite($i & ":" & $text & @CRLF)
    _GUICtrlListBox_AddString($List1, $text) ;und der liste hinzugefügt (hier liegt das problem glaub ich
    ;_GUICtrlListVIEW_AddString war verwendet
    Next
    FileClose($file)
    EndFunc ;==>_getList

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

    Func _saveList() ;speichert den content der liste in list.log, 1 item / zeile (getestet & läuft)
    $log = FileOpen($sFileName, 2)
    For $i = 0 To _GUICtrlListBox_GetCount($List1) - 1
    FileWriteLine($log, _GUICtrlListBox_GetText($List1, $i))
    Next
    FileClose($log)
    EndFunc ;==>_saveList

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

    Func _exit()
    _saveList()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    ich habe meine Änderungen mit Kommentaren versehen, damit du den Fehler erkennst.
    Hier noch eine alternative zu deiner Funktion:

    [autoit]

    Func _getList() ;hier liegt das problem
    Local $afile[1]
    _FileReadToArray(@ScriptDir & "\list.log",$afile)
    If IsArray($afile) Then
    For $i = 1 To $afile[0]
    _GUICtrlListBox_AddString($List1,$afile[$i]) ;und der liste hinzugefügt
    Next
    EndIf
    EndFunc ;==>_getList

    [/autoit]

    LÄUFT bei grossen Textdateien deutlich schneller;

    mfg autoBert

  • SUPER! Vielen Dank für deine Bemühung(en) hier und in den anderen threads ;)

    es lag tatsächlich an fileopen + _filecountlines.

    wo autoit sonst so pingelig ist was fileopens angeht...^^

    edit:

    ist es möglich einzelne Listeneinträge mit einer hintergrundfarbe zu versehen (bsp. grün für online) oder muss ich das über bilder regeln?

    Einmal editiert, zuletzt von zombie36 (11. Dezember 2010 um 16:15)