Seite 4 von 4
Re: Nutzt jemand die PureLVSort Lib?
Verfasst: 21.10.2015 16:20
von dige
Hey!!!

Vielen vielen Dank!!!
Das ist schon mal ein großer Schritt. Habt Ihr noch eine Idee, wie man die Sortierung
verbessern kann?
PureLVSort hatte auch den ColumnType #PureLVSORT_FileSize
und konnte damit Werte wie "1.23 GB", "235.51 MB", "1021 KB"
korrekt sortieren..
Re: Nutzt jemand die PureLVSort Lib?
Verfasst: 22.10.2015 22:55
von dige
Bräuchte mal eine Inspiration. Wie kann man folgende Strings performant sortieren:
1.24 MB
20.00 KB
1000 Byte
...
Muss man für jeweils die Einheit ermitteln und den Wert auf eine vergleichbare Basis umrechnen?
Re: Nutzt jemand die PureLVSort Lib?
Verfasst: 23.10.2015 11:31
von dige
Habs jetzt mal so gemacht und zwei Procs ergänzt um formatierte Dateigrößen korrekt zu sortieren:
Code: Alles auswählen
Procedure.q StringToBytes (sEntry.s)
Protected Result.q
Select UCase(Right(sEntry, 2))
Case "TB" : Result = ValF(sEntry) * 1099511627776
Case "GB" : Result = ValF(sEntry) * 1073741824
Case "MB" : Result = ValF(sEntry) * 1048576
Case "KB" : Result = ValF(sEntry) * 1024
Default : Result = Val(sEntry)
EndSelect
ProcedureReturn Result
EndProcedure
Code: Alles auswählen
Procedure CompareFileSize(sEntry1.s, sEntry2.s, SortOrder.b)
; ' -----------------------------------------------------
; ' Gibt zurück, ob das erste der beiden unterschiedlichen
; ' Elemente nach Maßgabe des Parameters SortOrder größer
; ' (1 bei aufsteigender Sortierung) oder kleiner (-1 bei
; ' aufsteigender Sortierung) als das zweite Element ist.
; ' Gleiche Elemente wurden bereits in CompareFunc ausge-
; ' schlossen; für sie wäre sonst 0 zurückzugeben.
; ' -----------------------------------------------------
; ' Rückgabewert je nach erwünschter Sortierung:
If SortOrder = #AscSort
; Aufsteigende Sortierung zweier unterschiedlicher Zahlen
If StringToBytes(sEntry1) < StringToBytes(sEntry2)
ProcedureReturn -1
Else
ProcedureReturn 1
EndIf
Else ; Absteigende Sortierung
If StringToBytes(sEntry1) > StringToBytes(sEntry2)
ProcedureReturn -1
Else
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Werde jetzt noch die Automatik durch definierbare Sortiertypen ersetzen.
Dann kann ich die PureLVSort Lib löschen...