AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Listbox sortierverfahren für text + Zahl
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox sortierverfahren für text + Zahl

Ein Thema von Van HelF · begonnen am 19. Feb 2007 · letzter Beitrag vom 24. Okt 2007
Antwort Antwort
Van HelF

Registriert seit: 24. Okt 2005
Ort: Karlsbrunn
195 Beiträge
 
Delphi 7 Personal
 
#1

Listbox sortierverfahren für text + Zahl

  Alt 19. Feb 2007, 12:55
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?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Listbox sortierverfahren für text + Zahl

  Alt 19. Feb 2007, 14:03
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Listbox sortierverfahren für text + Zahl

  Alt 19. Feb 2007, 14:21
Man nennt das natürliche Sortierung.
Siehe: http://www.delphipraxis.net/internal...ct.php?t=56869
Andreas
  Mit Zitat antworten Zitat
dAb

Registriert seit: 24. Okt 2007
Ort: Breuberg
3 Beiträge
 
#4

Re: Listbox sortierverfahren für text + Zahl

  Alt 24. Okt 2007, 18:47
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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Listbox sortierverfahren für text + Zahl

  Alt 24. Okt 2007, 18:50
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?)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
dAb

Registriert seit: 24. Okt 2007
Ort: Breuberg
3 Beiträge
 
#6

Re: Listbox sortierverfahren für text + Zahl

  Alt 24. Okt 2007, 18:54
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"
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Listbox sortierverfahren für text + Zahl

  Alt 24. Okt 2007, 19:04
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Listbox sortierverfahren für text + Zahl

  Alt 24. Okt 2007, 19:05
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
Heiko
  Mit Zitat antworten Zitat
dAb

Registriert seit: 24. Okt 2007
Ort: Breuberg
3 Beiträge
 
#9

Re: Listbox sortierverfahren für text + Zahl

  Alt 24. Okt 2007, 19:17
Danke.

Wie bekomme ich denn die TStringList in den Code?

Kenne mich nicht so aus...

Zu CutsomSort? Wie benutze ich das? Kann mit der Hilfe nicht viel anfangen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Listbox sortierverfahren für text + Zahl

  Alt 24. Okt 2007, 19:33
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz