2D Array sortieren

  • Hi Leutz,

    kann man mit arraysort eigentlich auch ein 2d Array sortieren?
    Ich habe nun alle syntaktischen Varianten durch(zumindest, die mir einfallen) und es klappt einfach nicht.

    Aus einem Verzeichnis moechte ich eine Fileliste einlesen. (arraytofilelist)
    Dann moechet ich in ein anderes 2D Array die Ordner reinschreiben und in die 2te Spalte die Uhrzeit, wann Sie kreiert wurden.

    ROW0 COL0 COL1
    [0]
    [1] c:\test\neuer ordner1 14111
    [2] c:\test\neuer ordner2 09734

    Soo schaut das Array dann aus. Die 2te Spalte ist die Zeitangabe von _NowDate zu CreateDate in Sekunden.

    Nun mag ich die beiden Ordner in dem Array so sortieren, dass die Werte in der 2ten Spalte aufsteigend sind.
    Natuerlich muss er in der ersten Spalte die Ordner mittauschen...

    Brauch dazu vieleicht die Funktion sort_array2D von Bugfix?
    Mein Script gibt immer einen Fehler, wenn ich versuche mit ArraySort zu arbeiten.

    [autoit]

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

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

    Dim $BIGARRAY[20][2]

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

    $backupdir = "e:\test\"

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

    $filelist = _FileListToArray( "E:\test", "*", 2)
    ;_ArrayDisplay($filelist,"$FileList")

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

    for $i = 1 To $filelist[0]
    $BIGARRAY[$i][0] = $backupdir & $filelist[$i]
    $difference = FileGetTime($FileList[$i], 1)
    $differenceformat = $difference[0] & "/" & $difference[1] & "/" & $difference[2] & " " & $difference[3] & ":" & $difference[4] & ":" & $difference[5]
    $BIGARRAY[$i][1] = _DateDiff( 's', $differenceformat ,_NowCalc())
    Next

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

    ;_ArrayDisplay($filelist,"$FileList")
    ;_ArrayDisplay($BIGARRAY,"$FileList")

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

    ;_ArraySort( $BIGARRAY , 1 )
    _ArrayDisplay($BIGARRAY,"$FileList")

    [/autoit]


    MFG

    CAT

  • Hi,
    Nö dieses "einfache" sortieren geht mit der normalen Sortierfunktion.
    Du hast lediglich vergessen anzugeben, welche Spalte sortiert werden soll

    [autoit]

    _ArraySort($BIGARRAY, 1, 0, 0, 1)

    [/autoit]
  • Noe, ;)

    Danke fuer die Antwort, es geht aber nicht.

    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "E:\test\FileGetTime.au3" /autoit3dir "C:\Program Files (x86)\AutoIt3" /UserParams
    +>14:49:04 Starting AutoIt3Wrapper v.1.10.1.7 Environment(Language:0407 Keyboard:00000409 OS:WIN_VISTA/Service Pack 1 CPU:X64)
    >Running AU3Check (1.54.10.0) from:C:\Program Files (x86)\AutoIt3
    +>14:49:05 AU3Check ended.rc:0
    >Running:(3.2.10.0):C:\Program Files (x86)\AutoIt3\autoit3.exe "E:\test\FileGetTime.au3"
    C:\Program Files (x86)\AutoIt3\Include\Array.au3 (680) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    Local $pivot = $array[Int(($left + $right) / 2) ]
    Local $pivot = ^ ERROR
    ->14:49:08 AutoIT3.exe ended.rc:1
    >Exit code: 1 Time: 4.179

    Diese Fehlermeldung gib SCITE beim ausfuehren aus. Habe Deine Zeile dann nur anstatt meiner eingebaut.

    CAT

    • Offizieller Beitrag

    Ich habe Dein Script mal angepasst:

    Spoiler anzeigen
    [autoit]


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

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

    $backupdir = "e:\test\"

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

    $filelist = _FileListToArray($backupdir, "*", 2) ; <-- hier geändert
    ;~ _ArrayDisplay($filelist,"$FileList")
    If Not @error Then
    Global $BIGARRAY[$filelist[0]+1][2] ; Lieber erst hier dimensionieren (Anzahl der Verzeichnisse bekannt)

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

    for $i = 1 To $filelist[0]
    $BIGARRAY[$i][0] = $backupdir & $filelist[$i]
    $difference = FileGetTime($backupdir & $FileList[$i], 1, 0) ; <-- hier geändert
    $differenceformat = $difference[0] & "/" & $difference[1] & "/" & $difference[2] & " " & $difference[3] & ":" & $difference[4] & ":" & $difference[5]
    $BIGARRAY[$i][1] = _DateDiff( 's', $differenceformat ,_NowCalc())
    Next

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

    ;_ArrayDisplay($filelist,"$FileList")
    ;_ArrayDisplay($BIGARRAY,"$FileList")

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

    ;_ArraySort( $BIGARRAY , 1 )
    _ArraySort($BIGARRAY, 1, 0, 0, 1) ; <-- hier geändert
    _ArrayDisplay($BIGARRAY,"$FileList")
    EndIf

    [/autoit]
  • Kommando zureuck!

    Ich habe gerade mal mein AutoIt auf die aktuelle Version upgedatet.
    Nun funktioniert es ploetzlich. *peinlich


    CAT

  • Hi,
    komisch bei mir gehts auch.
    hast du auch die neueste Scite Version vom 14.08.2008, AutoIt 3.2.12.1 drauf?
    Vielleicht liegts ja daran.
    Oder eben Vista :rofl: