Nutzt jemand die PureLVSort Lib?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: Nutzt jemand die PureLVSort Lib?

Beitrag von dige »

Hey!!! :D :D :D Vielen vielen Dank!!! :allright:

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..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: Nutzt jemand die PureLVSort Lib?

Beitrag 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?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: Nutzt jemand die PureLVSort Lib?

Beitrag 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...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten