Auswertung Schützen

  • Hallo liebe AutoITler,

    ich habe ein kleines Problem, ich habe eine CSV Datei mit folgendem Inhalt:

    Die erste Spalte gibt die Gruppenzugehörigkeit an.
    Ist nichts vorhanden, ist es ein Einzelschütze.
    Zweite Spalte ist der Gruppenname.
    Dritte Spalte ist der Name des Schützen.
    Vierte Spalte ist das Geschlecht.
    Fünfte Spalte ist die Ringtreffer.

    Kann man eine GUI erstellen, die mir 4 Auswertungen bringt?

    1. Auswertung
    Alle Ringtreffer die Verein als Gruppenzugehörigkeit haben sollen unter einem Gruppennamen dargestellt werden als Summe.
    Summe absteigend mit Ranking.

    2. Auswertung
    Alle Ringtreffer die Betrieb als Gruppenzugehörigkeit haben sollen unter einem Gruppennamen dargestellt werden als Summe.
    Summe absteigend mit Ranking.

    3. Alle Männlichen Schützen mit Raking absteigend

    4. ALle Weiblichen Schützen mit Ranking absteigend


    Alles auf einer GUI nebeneinander.
    Ist sowas möglich?
    Wenn es möglich wäre, dann mit Reload Button, wenn die CSV geändert wurde, das die Statistik sich aktualisiert.

    Gruß
    Ronnie

  • Klar ist das möglich ! Fang an :)

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    • Offizieller Beitrag

    Die Auswertung geht am Schnellsten mit SQLite. Ich hab das mal umgesetzt und gebe die Werte in die Console aus.
    Du kannst auch statt _SQLite_Exec() mit _SQlite_Query() & _SQLite_FetchData() arbeiten. Dann erhältst du als Ergebnis ein Array von dem aus du die Werte in deine GUI eintragen kannst.

    Spoiler anzeigen
    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Global $file = @ScriptDir & '\test.csv'
    Global $aRow, $aCSV, $aSplit, $strSQL = ''
    _SQLite_Startup()
    _SQLite_Open() ; Datenbank (im Arbeitsspeicher) erstellen

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

    ; Tabelle erstellen
    _SQLite_Exec(-1, "Create table tblTest (gruppe,m_name,schuetze,gender,result);")

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

    ; Werte eintragen
    _FileReadToArray($file, $aCSV)
    For $i = 1 To UBound($aCSV) -1
    $aSplit = StringSplit($aCSV[$i], ';')
    $strSQL &= "Insert into tblTest values ("
    For $j = 1 To UBound($aSplit) -1
    $strSQL &= "'" & $aSplit[$j] & "',"
    Next
    $strSQL = StringTrimRight($strSQL, 1)
    $strSQL &= ");" & @CRLF
    Next
    _SQLite_Exec(-1, $strSQL)

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

    ; Grupenergebnisse
    $strSQL = "SELECT gruppe,SUM(result) FROM tblTest WHERE gruppe != '' GROUP BY gruppe;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    ; Ergebnisse Gruppe 'Verein'
    $strSQL = "SELECT * FROM tblTest WHERE gruppe = 'Verein' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    ; Ergebnisse Gruppe 'Betrieb'
    $strSQL = "SELECT * FROM tblTest WHERE gruppe = 'Betrieb' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    ; Ergebnisse nach Geschlecht
    ; männlich
    $strSQL = "SELECT schuetze,result FROM tblTest WHERE gender = 'm' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")
    ; weiblich
    $strSQL = "SELECT schuetze,result FROM tblTest WHERE gender = 'w' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    _SQLite_Close()
    _SQLite_Shutdown()

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

    Func _cb($aRow)
    For $s In $aRow
    ConsoleWrite($s & @TAB)
    Next
    ConsoleWrite(@LF)
    EndFunc

    [/autoit]

    Edit:
    Ich hab dir mal eine Komplettlösung erstellt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <GuiListView.au3>
    #include <File.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Global $file = @ScriptDir & '\test.csv'
    Global $aRow, $aCSV, $aSplit, $strSQL, $aResult, $iRows, $iColumns
    Global $hListView1, $hListView2, $hListView3

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

    _SQLite_Startup()
    _SQLite_Open() ; Datenbank (im Arbeitsspeicher) erstellen
    _createTable()

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

    Global $gui = GUICreate('Ergebnisse', 800, 400)
    $btLoad = GUICtrlCreateButton('Lade CSV', 190, 35, 70, 20)
    $ListView1 = GUICtrlCreateListView('Gruppe|Ergebnis', 520, 10, 270, 80)
    $hListView1 = GUICtrlGetHandle($ListView1)
    $ListView2 = GUICtrlCreateListView('Gruppe|Mannschaft|Schütze|Geschlecht|Ergebnis', 10, 100, 500, 290)
    $hListView2 = GUICtrlGetHandle($ListView2)
    $ListView3 = GUICtrlCreateListView('Schütze|Geschlecht|Ergebnis', 520, 100, 270, 290)
    $hListView3 = GUICtrlGetHandle($ListView3)
    _GUICtrlListView_SetColumnWidth($hListView1, 0, 210)
    _GUICtrlListView_SetColumnWidth($hListView1, 1, $LVSCW_AUTOSIZE_USEHEADER )
    _GUICtrlListView_SetColumnWidth($hListView2, 0, 120)
    _GUICtrlListView_SetColumnWidth($hListView2, 1, 140)
    _GUICtrlListView_SetColumnWidth($hListView2, 2, 115)
    _GUICtrlListView_SetColumnWidth($hListView2, 3, 65)
    _GUICtrlListView_SetColumnWidth($hListView2, 4, $LVSCW_AUTOSIZE_USEHEADER )
    _GUICtrlListView_SetColumnWidth($hListView3, 0, 145)
    _GUICtrlListView_SetColumnWidth($hListView3, 1, 65)
    _GUICtrlListView_SetColumnWidth($hListView3, 2, $LVSCW_AUTOSIZE_USEHEADER )
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    _SQLite_Close()
    _SQLite_Shutdown()
    Exit
    Case $btLoad
    _GUICtrlListView_DeleteAllItems($hListView1)
    _GUICtrlListView_DeleteAllItems($hListView2)
    _GUICtrlListView_DeleteAllItems($hListView3)
    If _SQLite_Exec(-1, "DELETE FROM tblTest;") = $SQLITE_OK Then
    _readFromFile()
    _getGroups()
    _getGroup()
    _getByGender()
    Else
    MsgBox(0, 'Fehler', 'Tabelle Löschen fehlgeschlagen.')
    EndIf
    EndSwitch
    WEnd

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

    Func _createTable() ; Tabelle erstellen
    If _SQLite_Exec(-1, "CREATE TABLE [tblTest] (" & _
    "gruppe VARCHAR[30] NULL," & _
    "m_name VARCHAR[30] NULL," & _
    "schuetze VARCHAR[30] NULL," & _
    "gender BYTE[1] NULL," & _
    "result INT NULL);") <> $SQLITE_OK Then MsgBox(0, 'Fehler', 'Tabelle erstellen fehlgeschlagen.')
    EndFunc

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

    Func _readFromFile() ; Werte eintragen
    _FileReadToArray($file, $aCSV)
    For $i = 1 To UBound($aCSV) -1
    $aSplit = StringSplit($aCSV[$i], ';')
    $strSQL &= "Insert into tblTest values ("
    For $j = 1 To UBound($aSplit) -1
    $strSQL &= "'" & $aSplit[$j] & "',"
    Next
    $strSQL = StringTrimRight($strSQL, 1)
    $strSQL &= ");" & @CRLF
    Next
    If _SQLite_Exec(-1, $strSQL) <> $SQLITE_OK Then MsgBox(0, 'Fehler', 'Einfügen Werte fehlgeschlagen.')
    EndFunc

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

    Func _getGroups() ; Grupenergebnisse
    $strSQL = "SELECT gruppe,SUM(result) FROM [tblTest] GROUP BY gruppe ORDER BY SUM(result) DESC;"
    If _SQLite_GetTable2d (-1, $strSQL, $aResult, $iRows, $iColumns) = $SQLITE_OK Then
    _GetData($ListView1)
    EndIf
    EndFunc

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

    Func _getGroup() ; Ergebnisse nach Gruppen
    $strSQL = "SELECT DISTINCT gruppe FROM [tblTest];"
    If _SQLite_GetTable(-1, $strSQL, $aResult, $iRows, $iColumns) <> $SQLITE_OK Then Return
    Local $array = $aResult
    For $i = 2 To $array[0]
    $strSQL = "SELECT * FROM [tblTest] WHERE gruppe = '" & $array[$i] & "' ORDER BY result DESC;"
    If _SQLite_GetTable2d (-1, $strSQL, $aResult, $iRows, $iColumns) = $SQLITE_OK Then _
    _GetData($ListView2)
    If $i < $array[0] Then GUICtrlCreateListViewItem('=============|=============|============|======|=====', $ListView2)
    Next
    EndFunc

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

    Func _getByGender() ; Ergebnisse nach Geschlecht
    $strSQL = "SELECT DISTINCT gender FROM [tblTest];"
    If _SQLite_GetTable(-1, $strSQL, $aResult, $iRows, $iColumns) <> $SQLITE_OK Then Return
    Local $array = $aResult, $iCount = $iRows
    For $i = 2 To 1 +$iCount
    $strSQL = "SELECT schuetze,gender,result FROM [tblTest] WHERE gender = '" & $array[$i] & "' ORDER BY result DESC;"
    If _SQLite_GetTable2d (-1, $strSQL, $aResult, $iRows, $iColumns) = $SQLITE_OK Then _
    _GetData($ListView3)
    If $i < $iCount+1 Then GUICtrlCreateListViewItem('============|======|=====', $ListView3)
    Next
    EndFunc

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

    Func _GetData(ByRef $ListView) ; schreibe in ListView
    If Not IsArray($aResult) Then Return
    Local $sMsg = ''
    For $i = 1 To UBound($aResult) -1
    For $j = 0 To UBound($aResult,2) -1
    $sMsg &= $aResult[$i][$j] & '|'
    Next
    GUICtrlCreateListViewItem(StringTrimRight($sMsg, 1), $ListView)
    $sMsg = ''
    Next
    $aResult = '' ; Ergebnisarray leeren
    EndFunc

    [/autoit]