![]() |
Listbox sortierverfahren für text + Zahl
Hallo,
ich habe mich im forum ungesehen, aber nur sortierverfahren für text oder zahl gefunden. Ich möchte z.b. folgendes sortieren: reihe 1 eintrag 1 reihe 1 eintrag 2 . . reihe 2 eintrag 1 reihe 2 eintrag 2 . . reihe 10 eintrag 1 reihe 10 eintrag 2 beim normales sorted der listbox steht dann reihe 10 vor reihe 2. gibt es eine möglichkeit beides zu berücksichtigen, so dass es praktisch wie oben angezeigt wird? |
Re: Listbox sortierverfahren für text + Zahl
Hallo Van HelF,
das wird Dir mit einer Standardsortierfunktion nicht gelingen. Wo bekommst die die Werte her? Kannst Du die Stringlist nicht gleich sortiert erzeugen? Ggf. könntest Du die Einträge sonst auch so normalisieren, dass sie als String sortierbar sind... reihe 001 eintrag 001 reihe 001 eintrag 002 . . reihe 002 eintrag 001 reihe 002 eintrag 002 . . reihe 010 eintrag 001 reihe 010 eintrag 002 Ansonsten kannst Du die Daten in eine TStringlist übertragen dieser eine Sortierfunktion zuweisen. Über MyStringList.Sort(MySortFunction) kannst Du diese dann sortieren. In MySortFunction musst Du die Zeichenketten auswerten und sagen, welche nach oben oder unten gehören... Nach dem Sortieren die Daten dann wieder in deine ListBox zurück schreiben. Stahli |
Re: Listbox sortierverfahren für text + Zahl
|
Re: Listbox sortierverfahren für text + Zahl
Hallo,
Ich habe auch so ein Problem. Mein Programm erstellt beliebig viele ListBox-Einträge. Es geht um eine Punktetabelle, die dann natürlich bei listbox.sorted:=true falsch rum sortiert wird. Wie kann ich das ganze jetzt umkehren? Ist das möglich? Idee Nummer 1: Die Einträge nach dem Sortieren vertauschen Den ersten und letzten Eintrag kann ich ja ohne Probleme austauschen lassen. Aber wenn es mehrere Einträge sind, kann man das dann auch irgendwie machen?
Code:
listbox1.Sorted:=true;
if listbox1.count > 1 then begin listbox1.Items.Exchange(listbox1.Count-1,listbox1.Count-listbox1.count); end; Idee Nummer 2: Selbst sortieren Oder das ganze vllt mit einer extra Prozedur regeln? Habe hier mal zwei, allerdings kommt da dann beim "then begin" bzw. "do begin" ein Fehler. :gruebel:
Code:
procedure sortieren;
var i,j,k,m:byte; puffer:pointer; listbox1:TList; begin for j:=1 to (m-1) do begin for i:=j+1 to m do if listbox1.Items[j]>listbox1.Items[i] then begin puffer:=listbox1.Items[j]; listbox1.Items[j]:=listbox1.Items[i]; listbox1.Items[i]:=puffer; end; end; end;
Code:
procedure sortieren;
var temp, i:byte; listbox1: TList; begin for i:=0 to (listbox1.Count / 2) do begin temp := listbox1.Items[i]; listbox1.Items[i] := listbox1.Items[listbox1.Count - 1 - i]; listbox1.Items[listbox1.Count - 1 - i] := temp; end; end; Wäre überaus nett, wenn mir jemand helfen kann. :) |
Re: Listbox sortierverfahren für text + Zahl
Beim ersten Codestück wird m nicht initialisiert und beim zweiten hast du einen Integer als Laufvariable und versuchst, ihn bis zu einem Float-Wert laufen zu lassen. Verwende statt / einfach div.
(Außerdem bezweifle ich, dass das funktioniert... woher hast du denn den Code? Warum wird da ein Pointer als Temp-Variable verwendet?) |
Re: Listbox sortierverfahren für text + Zahl
Das erste selbst gemacht, das zweite hat jemand anders gemacht. Also das mit m könntest du vllt verbessern?
Und beim Zweiten kommen dann zwei Fehler von wegen "Incompatible types: 'Byte' and 'Pointer' Edit: Ok, vbeim Ersten müsste dann vor die Schleife listbox1.count:=m denke ich mal. Wurde vergessen. Bleibt aber trotzdem der Fehler "Operator not applicable to this operand type" |
Re: Listbox sortierverfahren für text + Zahl
Ich bin mir nicht ganz sicher, aber es könnte sein, dass man in Delphi Strings nicht mit größer/kleiner verlgeichen kann. Such mal nach Funktionen wie StrCompare, AnsiStrCompare usw.
|
Re: Listbox sortierverfahren für text + Zahl
Hallo,
wenn es eine normale ListBox ist, würde ich die Einträge zuerst in eine TStringList packen, dann CustomSort benutzen (siehe Hilfe) und die Einträge dann frei sortiert in die ListBox packen. Stehen Sie schon drin, trotzdem genau so. Aus der ListBox in die StringList: StringList.Assign(ListBox.Items) sortieren, ListBox leeren und wieder sortiert rein. Heiko |
Re: Listbox sortierverfahren für text + Zahl
Danke.
Wie bekomme ich denn die TStringList in den Code? :mrgreen: Kenne mich nicht so aus... Zu CutsomSort? Wie benutze ich das? Kann mit der Hilfe nicht viel anfangen. :oops: |
Re: Listbox sortierverfahren für text + Zahl
Hallo,
also ein bisschen Suchen solltest du schon mal. Zu CustomSort gibt es in Google Beispiele.
Delphi-Quellcode:
var
SL: TStringList; begin SL:= TStringList.Create; try SL.Assign ... CustomSort finally SL.Free; end; end; Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz