Sortieren ist VERBUGGT!

  • Hey

    Ich habe eine Combobox:

    [autoit]

    GUICtrlCreateCombo("", 5, 5, 100, 190)

    [/autoit]

    Und diese lasse ich Dateien eines bestimmten Dateityps (in meinem Fall .w3g) auflisten:

    [autoit]

    _GUICtrlComboBox_BeginUpdate($combobox)
    _GUICtrlComboBox_ResetContent($combobox)
    _GUICtrlComboBox_AddDir($combobox, $directory & "\*.w3g")
    _GUICtrlComboBox_EndUpdate($combobox)

    [/autoit]


    Dies klappt absolut ohne Probleme.

    Ich möchte jetzt, dass man die Liste entweder aufsteigend oder absteigend sortieren kann.
    Aber schon beim einfachen (aufsteigenden) Sortieren scheiterte es bei mir.

    Meine Idee war die Dateinamen von der Combobox in einem Array zu speichern, dieses dann zu sortieren und dessen Werte danach wieder in die Combobox einzufügen.

    Mein Versuch ist:

    [autoit]

    $filesArray = _GUICtrlComboBox_GetListArray($combobox)
    $uBound = UBound($filesArray)
    _ArraySort($filesArray)
    _GUICtrlComboBox_BeginUpdate($combobox)
    _GUICtrlComboBox_ResetContent($combobox)
    For $i = 1 To $uBound - 1
    _GUICtrlComboBox_AddString($combobox, $filesArray[$i])
    Next
    _GUICtrlComboBox_EndUpdate($combobox)

    [/autoit]

    Da kommt aber totaler Unsinn bei raus.
    Ich habe zum Testen folgende Dateien erstellt:
    1.w3g
    2.w3g
    3.w3g
    4.w3g
    5.w3g

    Sie werden genau so in der Combobox richtig angezeigt.
    Wenn ich jedoch jetzt die Dinge zum aufsteigenden Sortieren (siehe oben) durchführe, sieht die Combobox danach so aus:
    2.w3g
    3.w3g
    4.w3g
    5
    5.w3g

    Es fehlt 1.w3g und außerdem wird 5 (ohne Dateiendung) einfach so eingefügt.
    Komisch :/


    Sorry für die vielen Informationen/den langen Text, aber ich dachte mir so kann das Problem schneller gelöst werden.
    Ich hoffe auf baldige Hilfe!

    MfG

    Einmal editiert, zuletzt von pete_gzome (19. Januar 2010 um 21:38)

    • Offizieller Beitrag

    Feld 0 deines Array´s $filesArray wird mitsortiert und deshalb der Fehler. Versuch es so:

    Spoiler anzeigen
    [autoit]

    $filesArray = _GUICtrlComboBox_GetListArray($combobox)
    _ArrayDelete($filesArray ,0)
    $uBound = UBound($filesArray)
    _ArraySort($filesArray)
    _GUICtrlComboBox_BeginUpdate($combobox)
    _GUICtrlComboBox_ResetContent($combobox)
    For $i = 0 To $uBound - 1
    _GUICtrlComboBox_AddString($combobox, $filesArray[$i])
    Next
    _GUICtrlComboBox_EndUpdate($combobox)

    [/autoit]
  • Ich weiß es nicht auswendig, aber es kann sein, dass _ArrayAdd noch ein Element hinzufügt (Anzahl?)
    Mach auf jeden Fall mal nach Zeile 3 ein _ArrayDisplay($filesArray) hin

    Stimmt, Raupi hat natürlich Recht.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Danke für die schnellen Antworten. Es klappt schon mal halb^^

    Die komische 5 ist weg, jetzt fehlt nur noch 1.w3g, das immer noch nicht angezeigt wird.

    • Offizieller Beitrag

    Kann es sein das du Zeile 7 nicht geändert hast ? Wenn ja dann kommt der Fehler daher, weil Feld 0 1.w3g enthällt.

    [autoit]

    For $i = 0 To $uBound - 1 ; 0 weil jetzt das Array nur noch die Dateinamen und nicht mehr das Index enthällt.

    [/autoit]
  • Ach ja, stimmt. Die kleine Änderung habe ich glatt übersehen!

    Vielen Dank, es klappt wunderbar :rock:

  • Hallo pete_gzome,

    hier mal ein Beispiel zum Einsatz vom _ArraySort (auf deinem Code aus #1 aufbauend)

    Spoiler anzeigen
    [autoit]

    #include <GuiComboBox.au3>
    #include <Array.au3>

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

    $hGui = GUICreate("Sortieren ....", 300, 250, 10, 10)
    $combobox = GUICtrlCreateCombo("", 10, 10, 150, 100)
    $hbtnSort = GUICtrlCreateButton("&Sortieren", 200, 10, 80, 20)
    $hbtnExit = GUICtrlCreateButton("Be&enden", 200, 50, 80, 20)
    For $I = 5 To 1 Step -1
    _GUICtrlComboBox_AddString($combobox, " " & $I)
    Next
    For $I = 6 To 9
    _GUICtrlComboBox_AddString($combobox, " " & $I)
    Next
    For $I = 20 To 10 Step -1
    _GUICtrlComboBox_AddString($combobox, $I)
    Next

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    If $msg = $hbtnSort Then
    $filesArray = _GUICtrlComboBox_GetListArray($combobox)
    _ArrayDisplay($filesArray)
    $uBound = UBound($filesArray)
    _ArraySort($filesArray, 0, 1)
    _ArrayDisplay($filesArray)
    _GUICtrlComboBox_BeginUpdate($combobox)
    _GUICtrlComboBox_ResetContent($combobox)
    For $I = 1 To $uBound - 1
    _GUICtrlComboBox_AddString($combobox, $filesArray[$I])
    Next
    _GUICtrlComboBox_EndUpdate($combobox)
    EndIf
    If $msg = $hbtnExit Then Exit
    WEnd

    [/autoit]

    mfg Auto)Bert