Problem beim Sortieren von Daten.

  • Hallo @all,
    ich melde mich hier mit einem (wahrscheinlich erbärmlichen) Problem.
    Ich habe eine Datei in der Zeilen nach folgendem Schema eingetragen sind.
    Datum|Uhrzeit|Beschreibung
    Ich möchte die Zeilen laden und, nach Datum sortiert, in die ListView einsortieren.
    Das einfügen klappt, aber immer wenn ich sortieren will, kommt ein AutpIt-Fehler.
    Kann mit jmd helfen??
    Code:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GuiListView.au3>
    $path = @TempDir &"/Termine.ter"
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Termin-Übersicht", 476, 808, 391, 31)
    $ListView1 = GUICtrlCreateListView("Datum|Uhrzeit|Beschreibung", 0, 0, 474, 806)
    GUICtrlSendMsg(-1, 0x101E, 0, 100)
    GUICtrlSendMsg(-1, 0x101E, 1, 70)
    GUICtrlSendMsg(-1, 0x101E, 2, 300)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    if FileExists($path) Then
    $count = _FileCountLines($path)
    for $i = 1 to $count
    $line = FileReadLine($path, $i)
    if $line <> "" Then
    GUICtrlCreateListViewItem($line, $ListView1)
    EndIf
    Next
    EndIf
    _GUICtrlListView_SortItems($ListView1, 3)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Aus der Hilfe zu _GUICtrlListView_SortItems:

    Zitat

    Bemerkungen
    Nur in Verbindung mit _GUICtrlListView_RegisterSortCallBack nutzbar.


    Schau dir mal das Beispiel an.

  • Und wie kann ich jetzt nach Daten sortieren?
    Eine Spalte ist für die Daten. Format: TT.MM.JJJJ
    Wie kann ich aufsteigend nach den Daten sortieren?

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • hab in der SuFu iwas gesehen mit sorieren von Formaten, jedoch stand da kein Lsg-Weg ;(

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Benutze zum sortieren lieber _GUICtrlListView_SimpleSort.

    • Offizieller Beitrag

    Ein Datum (im Listview) ist perse nur ein String. Demzufolge ist das Format TT.MM.JJJJ nicht sortierbar. Deshalb greifen auch viele Anwendungen auf sortierbare Formate wie: JJJJ-MM-TT oder JJJJMMTT zurück.
    Entweder du machst es ebenso oder du wandelst vor dem Sortieren und danach jeweils um.

  • ich bekomm das net auf die reihe -.-*
    kann mir das jemand bitte mit dem simpelsort erklären? ich werd aus der Hilfe nicht schlau

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Hier mal ein Bsp. - Sortierung durch Klick auf den Spaltenkopf.

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate('test')
    $lv = GUICtrlCreateListView('NR|Datum', 15,15,200,140)
    $hlv = GUICtrlGetHandle(-1)
    For $i = 1 to 15
    GUICtrlCreateListViewItem($i & '|' & Random(2000,2009,1) & '-' & StringFormat('%02d', Random(1,12,1)) & '-' & _
    StringFormat('%02d', Random(1,28,1)), $lv)
    Next
    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hlv)]

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

    Do
    Until GUIGetMsg() = -3

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hlv
    If Not IsHWnd($hWndListView) Then $hWndListView = GUICtrlGetHandle($hWndListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    EndIf
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • danke :)
    ich probiere deine Lösung gleich, aber ich hab im mom eine andere herausgefunden:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <GuiListView.au3>
    $path = @TempDir &"/Termine.ter"
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Termin-Übersicht", 476, 808, 391, 31)
    $ListView1 = GUICtrlCreateListView("Datum|Uhrzeit|Beschreibung", 0, 0, 474, 806)
    GUICtrlSendMsg(-1, 0x101E, 0, 100)
    GUICtrlSendMsg(-1, 0x101E, 1, 70)
    GUICtrlSendMsg(-1, 0x101E, 2, 300)
    Dim $a[1]
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    _GUICtrlListView_RegisterSortCallBack($ListView1)
    if FileExists($path) Then
    $count = _FileCountLines($path)
    for $i = 1 to $count
    $line = FileReadLine($path, $i)
    if $line <> "" Then
    GUICtrlCreateListViewItem($line, $ListView1)
    EndIf
    Next
    EndIf
    x2y()
    Dim $x[_GUICtrlListView_GetColumnCount($ListView1)]
    _GUICtrlListView_SimpleSort($ListView1,$x , 0)
    y2x()
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func x2y()
    $count = _GUICtrlListView_GetItemCount($ListView1)
    for $i = 0 to $count
    $item = _GUICtrlListView_GetItemText($ListView1, $i)
    $xitem = StringSplit($item, ".")
    if UBound($xitem) = 4 Then _GUICtrlListView_SetItemText($ListView1, $i, $xitem[3] & " " & $xitem[2] & " " & $xitem[1])
    Next
    EndFunc

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

    Func y2x()
    $count = _GUICtrlListView_GetItemCount($ListView1)
    for $i = 0 to $count
    $item = _GUICtrlListView_GetItemText($ListView1, $i)
    $xitem = StringSplit($item, " ")
    if UBound($xitem) = 4 Then _GUICtrlListView_SetItemText($ListView1, $i, $xitem[3] & "." & $xitem[2] & "." & $xitem[1])
    Next
    EndFunc

    [/autoit]

    so ich schaue mir deine Lösung mal an...danke :)

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]