Nicht angemeldet.
Hier können Sie Ihre eigenen Skripte und UDF's veröffentlichen undanderen zum Download anbieten oder von anderen herunterladen
Func _arraySort2D_MC(ByRef $avArray, $ColOrder) ;Parameterübergabe ;$avArray zu sorterendes Array ;$ColdOrder String mit den Sortieranweisungen, getrennt mit "|" für jede Spalte ; zulässige Angaben: ; nur Spaltenindex = normale Sortierung ; Spaltenindex%N = numerische Sortierung ; Spaltenindex%D = Sortierung nach Datum JJJJ/MM/TT ; Spaltenindex%G = Sortierung nach Geburtstag MM/TT/JJJJ ; z.B.: "1|2%N|3%D|0" die Reihenfolge für die Sortierung ist 1.,2., 3. 0. (0 basierend) ; die 1. Spalte wird Standard von _ArraySort verwendet ; die 2. Spalte (%N) wird bei der Sortierun numerisch behnadelt ; die 3. Spalte (%D) wird als Datum behandelt ; ; es müssen alle Spalten des Arrays in den Sortieranweisungen vorkommen ; ===================================================================== ;Rückgabe: 0 Fehler (nicht alle Spalten in $ColOrder definert ; 1 Erfolg ;Autor: AutoBert 2010 ;============================================================================================================== $aCols = StringSplit($ColOrder, "|") ;consolewrite($aCols[0] & " " & UBound($array, 2) & @CRLF) If $aCols[0] <> UBound($avArray, 2) Then MsgBox(16, "Fehler:", "unterschiedliche Spaltenanzahl!") Return 0 EndIf Local $aColformat = $aCols Local $sRow For $i = 1 To $aColformat[0] ;$aColformat[$i] = StringRight($aColformat[$i], 1) $aCols[$i] = StringReplace($aCols[$i], "N", "") $aCols[$i] = StringReplace($aCols[$i], "D", "") Next _ArrayDelete($aColformat, 0) _ArrayDelete($aCols, 0) Local $iCols = UBound($aColformat) For $i = 0 To UBound($avArray) - 1 $sRow = "" For $j = 0 To $iCols - 1 $iCol = $aCols[$j] Switch StringUpper(StringRight($aColformat[$j], 1)) Case "N" ;numerisch $sRow &= StringFormat("%99s", $avArray[$i][$iCol]) Case "D" ;Datum JJJJ/MM/TT ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols]) $aDate = StringSplit($avArray[$i][$iCol], ".") $sRow &= $aDate[3] & "." & $aDate[2] & "." & $aDate[1] Case "G" ;Geburtstags-Datum MM/TT/JJJJ ;;consolewrite("D: " & $aColformat[$j] & " " & $avArray[$i][$iCols]) $aDate = StringSplit($avArray[$i][$iCol], ".") $sRow &= StringRight("0" & $aDate[2],2) & "." & StringRight("0" & $aDate[1],2) & "." & $aDate[3] Case Else $sRow &= $avArray[$i][$iCol] EndSwitch If $j <> $iCols - 1 Then $sRow &= "|" Next $avArray[$i][0] = $sRow ;consolewrite($sRow & @CRLF) Next _ArraySort($avArray) ;_ArrayDisplay($avArray) ;_ArrayDisplay($aColformat, "FormatStrings") ;_ArrayDisplay($aCols, "Cols") ;consolewrite($iCols & @CRLF) For $i = 0 To UBound($avArray) - 1 $aSplit = StringSplit($avArray[$i][0], "|", 2) For $j = 0 To $iCols - 1 $iCol = $aCols[$j] Switch StringRight($aColformat[$j],1) ; Case "X" ;#cs Case "N" ;numerisch $avArray[$i][$iCol] = StringStripWS($aSplit[$j], 1) ;consolewrite(" N: " & $avArray[$i][$iCol]) Case "D" ;Datum JJJJ/MM/TT $aDate = StringSplit($aSplit[$j], ".") $avArray[$i][$iCol] = $aDate[3] & "." & $aDate[2] & "." & $aDate[1] ;consolewrite(" D: " & $avArray[$i][$iCol]) Case "G" ;Geburtstags-Datum MM/TT/JJJJ $aDate = StringSplit($aSplit[$j], ".") $avArray[$i][$iCol] = $aDate[2] & "." & $aDate[1] & "." & $aDate[3] ;consolewrite(" D: " & $avArray[$i][$iCol]) ;#ce Case Else $avArray[$i][$iCol] = $aSplit[$j] ;consolewrite(" : " & $avArray[$i][$iCol]) EndSwitch Next ;consolewrite(@CRLF) Next return 1 ;_ArrayDisplay($avArray) EndFunc ;==>_arraySort2D_MC ;************************************************************************************************************* ;ab hier Beispiel zum verwenden ;************************************************************************************************************* #include <array.au3> #include <date.au3> #include <arraySort2D_MC.au3> Dim $array[9999][2] For $i = 0 To 9998 $array[$i][0] = Chr(Random(65, 67, 1)) & Chr(Random(65, 67, 1)) & Chr(Random(65, 67, 1)) & Chr(Random(65, 67, 1)) & Chr(Random(65, 67, 1)) & Chr(Random(65, 67, 1)) & Chr(Random(65, 67, 1)) & Chr(Random(65, 67, 1)) $array[$i][1] = Random(1, 31, 1) & "." & Random(1, 12, 1) & "." & Random(1960, 2000, 1); Pseudo-Datum ohne Prüfung auf Existenz z.B.31.02.2010 durchaus möglich Next _ArrayDisplay($array,"Unsortiert") $bench_start = TimerInit() _arraySort2D_MC($array, "1%G|0") $bench_end = Round(TimerDiff($bench_start), 2) ConsoleWrite("Laufzeit: " & $bench_end & " ms!" & @CRLF) _ArrayDisplay($array,"sortiert nach Geburtsdatum in " & $bench_end & " ms")
Dauerhaft angemeldet bleiben?