Dynamische Strings auslesen und deren Zahlen absteigend formatieren

  • Hallo,

    Ich hab zurzeit einige Quiz-Bots am laufen und diese funktionieren in moment reibungslos mit 6695 Fragen ohne Fehler.

    Nun möchte ich ein Punkte-System einbauen um jeden einzelnen User Punkte zu verteilen und anzuzeigen.

    Das ganze sollte in einer .txt oder .ini abgerufen und gespeichert werden wobei das schema folgendes wäre:

    [ID=1#USER=blabla2#P=54#]
    [ID=2#USER=blabla4554#P=500#]
    [ID=3#USER=blabla8778#P=2580#]
    [ID=4#USER=blabla876#P=34#]
    [ID=5#USER=blabla7677#P=289#]

    ID und User sind selbsterklärend und P sind sie Punkte von den jeweiligen User.

    Folgendes hab ich schon gelöst oder könnte ich problemlos lösen ( habs noch im kopf xD):

    Neuen User eintragen + 2 Punkte als start speichern , Einzelne User abfragen und deren Punkte anzeigen.

    Wenn Antwort richtig -> Userinfo holen +2 Punkte addieren und danach wieder speichern.

    Nun kommt der Teil wo ich feststecke:

    Ich würde gerne am Schluss des Quizes (nach 20 fragen oda so) die Gesamtpunktezahl der höchsten letzten User anzeigen lassen.


    Sowie die Gesamt-Highscore wo die Top 10 User mit den meisten Punkten absteigend angezeigt werden.

    Mein Problem: Wenn ich die komplette Userliste abrufe (mit punkten) wie kann die sie dann Formatieren damit ich die höchste Punktzahl als erster stehen habe ?

    Hier mal ein blödes beispiel:

    (würde es aba gerne ohne Listview machen. z.b. nur eine Variable wo alle daten temporär gespeichert sind)


    [autoit]

    GUICreate("blub",200,500)
    $list = GUICtrlCreateList("",10,10,-1,-1,$LBS_SORT)
    $num = 1
    $check = 0
    GUISetState()
    $file1 = FileOpen(@ScriptDir & "\hust.txt", 0)

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

    If $file1 = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf
    $file = FileRead($file1)
    _GUICtrlListBox_BeginUpdate($list)
    Do
    $check = $check+1
    $opennum = _StringBetween($file,"[ID="&$check&"#","]")
    If @error Then
    $num = 0
    Else
    $user = _StringBetween($opennum[0],"USER=","#")
    $points = _StringBetween($opennum[0],"P=","#")
    _GUICtrlListBox_AddString($list,$points[0]&"#"&$user[0])
    ;MsgBox(0,"dhdh",$user[0])
    Endif
    Until $num = 0
    _GUICtrlListBox_EndUpdate($list)
    _GUICtrlListBox_Sort($list)
    MsgBox(4160, "Information", "Item 5 Text: " & _GUICtrlListBox_GetText($list, 1))
    MsgBox(0,"passt",GUICtrlRead($list))
    While 1

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

    WEnd
    FileClose($file1)

    [/autoit]


    naja danke schonmal für die hilfe die ihr mir geben könnt.

    MfG reeZZer

    2 Mal editiert, zuletzt von reeZZer (13. August 2009 um 19:22)

  • So siehst du die Spieler nach Punkten geordnet.

    Spoiler anzeigen
    [autoit]

    #include<File.au3>
    #include<Array.au3>

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

    Opt("MustDeclareVars", 1)
    Local $file, $split

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

    _FileReadToArray(@ScriptDir&"\Points.txt", $file)

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

    Dim $stats[UBound($file)-1][3]

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

    For $i = 1 To UBound($file) -1
    $split = StringRegExp($file[$i], "\[ID\=(.+?)\#USER\=(.+?)\#P\=(.+?)\#\]", 1)
    $stats[$i-1][0] = Number($split[0])
    $stats[$i-1][1] = $split[1]
    $stats[$i-1][2] = Number($split[2])
    Next

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

    _ArraySort($stats, 1, 0, 0, 2)
    _ArrayDisplay($stats)

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Danke FireFlyer, läuft nun alles Perfekt :)


    Punkte-System erfolgreich eingebunden :D


    MfG reeZZer

    Einmal editiert, zuletzt von reeZZer (13. August 2009 um 19:20)