Gleiche List Items zusammenfassen

  • Ich will mir ne Gui baseln mit 2 Listviews. Wie kann ich eine Liste filtern und die gefilterten Ergbnisse in einer Tabelle und einer Zeile zusammenfassen ?


    Spoiler anzeigen


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>

    Global $Listart[20],$Edit1,$Listarttime[20],$Listart2[20],$Edit2,$Listart2time[20]
    $Form1 = GUICreate("Form1", 678, 537, 192, 114)
    $Edit1 = GUICtrlCreateListView("Name|Liter", 80, 56, 505, 129)
    GUICtrlCreateListViewItem("Wasser|2",$Edit1)
    GUICtrlCreateListViewItem("Bier|2",$Edit1)
    GUICtrlCreateListViewItem("Bier|3",$Edit1)
    GUICtrlCreateListViewItem("Cola|7",$Edit1)
    GUICtrlCreateListViewItem("Bier|3",$Edit1)
    $Edit2 =GUICtrlCreateListView("Name|Liter",81, 287, 505, 129)

    $Button1 = GUICtrlCreateButton("Button1", 216, 216, 219, 49, $WS_GROUP)
    GUISetState(@SW_SHOW)


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button1
    $count = _GUICtrlListView_GetItemCount($Edit1)-1

    For $i = 0 To $count
    $Listart[$i] &= _GUICtrlListView_GetItemText($Edit1, $i, 0)
    $Listarttime[$i] &= _GUICtrlListView_GetItemText($Edit1, $i, 1)

    if $Listart[$i]="Bier" then
    $count2 = _GUICtrlListView_GetItemCount($Edit2)

    For $n = 0 To $count2
    $Listart2[$n] &= _GUICtrlListView_GetItemText($Edit2, $n, 0)
    if StringCompare($Listart[$i],$Listart2[$n])=0 Then
    $Listart2time[$n] &= _GUICtrlListView_GetItemText($Edit2, $n, 1)
    $new=$Listart2time[$n]+$Listarttime[$i]
    _GUICtrlListView_SetItemText($Edit2, $n,$new, 1)
    Else
    GUICtrlCreateListViewItem($Listart[$i]&"|"&$Listarttime[$i],$Edit2)
    EndIf
    next
    EndIf
    next
    EndSwitch
    WEnd

  • Hallo billemg,

    eine kurze und wie ich meine auch schnelle Routine (über Umweg Array):

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    #include <Array.au3>

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

    Global $Listart[20], $Edit1, $Listarttime[20], $Listart2[20], $Edit2, $Listart2time[20]
    $Form1 = GUICreate("Form1", 678, 537, 192, 114)
    $Edit1 = GUICtrlCreateListView("Name|Liter", 80, 56, 505, 129)
    GUICtrlCreateListViewItem("Wasser|2", $Edit1)
    GUICtrlCreateListViewItem("Bier|2", $Edit1)
    GUICtrlCreateListViewItem("Bier|3", $Edit1)
    GUICtrlCreateListViewItem("Cola|7", $Edit1)
    GUICtrlCreateListViewItem("Bier|3", $Edit1)
    $Edit2 = GUICtrlCreateListView("Name|Liter", 81, 287, 505, 129)

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

    $Button1 = GUICtrlCreateButton("Button1", 216, 216, 219, 49, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $count = _GUICtrlListView_GetItemCount($Edit1)
    Dim $aTmp[$count][2]
    For $i = 0 To $count -1
    $aSplit = _GUICtrlListView_GetItemTextArray($Edit1,$i)
    $aTmp[$i][0] = $aSplit[1]
    $aTmp[$i][1] = $aSplit[2]
    Next
    _ArraySort($aTmp)
    $aUnique = _ArrayUnique($aTmp)
    for $i = 1 to $aUnique[0]
    $aFind = _ArrayFindAll($aTmp,$aUnique[$i])
    $iMenge = 0
    for $j = 0 to UBound($aFind) -1
    $iMenge += $aTmp[$aFind[$j]][1]
    Next
    GUICtrlCreateListViewItem($aUnique[$i] & "|" & $iMenge,$Edit2)
    Next
    EndSwitch
    WEnd

    [/autoit]

    schau dir am besten die verwendeten Funktionen in der Hilfe an, damit du sie auch verstehst.

    Verwende doch zukünftig auch die AutoIt-TAG's im Spoiler

    mfg autoBert