AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TStringList absteigend sortieren

Ein Thema von XxnemesisxX49 · begonnen am 4. Sep 2012 · letzter Beitrag vom 5. Sep 2012
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.433 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: TStringList abwertend sortieren

  Alt 4. Sep 2012, 23:46
Dieses nennt sich z.B. "Natural Sort" oder Dergleichen.

Es gibt schon irgendwo fertige Funktionen für diesen Vergleich, aber im Prinzip läuft es auf das selbe Grundprinzip hinaus.
Die Strings werden in Buchstaben- und Nummernblöcke aufgeteilt und dann werden von vorne nach hinten die Blöcke "getrennt" verglichen.
Also ein Teil wird verglichen, bei Gleichheit wird der nächste Block verglichen und bei Ungleichheit wird dieses Ergebnis oder das letzte Ergebnis zurückgegeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 4. Sep 2012 um 23:50 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.647 Beiträge
 
Delphi 2007 Enterprise
 
#12

AW: TStringList abwertend sortieren

  Alt 4. Sep 2012, 23:48
Definiere "all zu schwer"
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#13

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 06:49
Gibt's da auch eine Lösung, die nicht all zu schwer ist?
Ja. Hast Du es schon selbst versucht? Wie würdest Du an die Sache herangehen?

Schau Dir mal die Befehle Delphi-Referenz durchsuchenPos und Delphi-Referenz durchsuchenCopy an.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#14

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 07:09
Je nach Datenherkunft bist Du am schnellsten wenn Du den numerischen Teil mit führenden "0" auf gleiche Längen bringst und dann wieder einen Stringcompare verwendest.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#15

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 09:16
ist zwar nicht meine Art trotzdem sticht mir immer wieder das "abwertend" im Titel ins Auge. Könntest du das bitte in "absteigend" ändern?
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#16

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 10:55
Gibt's da auch eine Lösung, die nicht all zu schwer ist?


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, SysUtils, Classes, Forms, StdCtrls, Controls;

type
  TZusatzDaten = class(TObject)
   public
     FVorname : string;
     FAlter : Integer;
     constructor Create(Vorname: string; Alter : Integer);
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
    sl : TStringList;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TZusatzDaten.Create(Vorname : string; Alter : Integer);
begin
  Self.FVorname := Vorname;
  Self.FAlter := Alter;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : Integer;
  Eintrag : TZusatzDaten;
begin
  Memo1.Clear;
  sl := TStringList.Create;

  try
    sl.AddObject('Franzen', TZusatzdaten.Create('Dieter', 36));
    sl.AddObject('Hansen', TZusatzdaten.Create('Hans', 45));
    sl.AddObject('Petersen', TZusatzdaten.Create('Klara', 21));

    // Wert an Position "Hansen" einfügen
    i := sl.IndexOf('Hansen');
    sl.InsertObject(i, 'Paulsen', TZusatzDaten.Create('Paul', 29));

    // Wert ändern
    Eintrag := TZusatzDaten(sl.Objects[0]);
    Eintrag.FVorname := 'Franz';

    // Wert anders ändern
    Eintrag := sl.Objects[3] as TZusatzDaten;
    Eintrag.FVorname := 'Peter';

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

    Memo1.Lines.Append('');
    Memo1.Lines.Append('sl Sortieren');
    sl.Sort; // Sortieren

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

    sl.Exchange(0,1); // die beiden Werte tauschen

    Memo1.Lines.Append('');
    Memo1.Lines.Append('Tauschen 0 & 1');

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

    // Nach Alter sortieren
    for i := sl.Count -1 downto 1 do
     for j := 1 to i do
      if TZusatzdaten(sl.Objects[j-1]).FAlter > TZusatzdaten(sl.Objects[j]).FAlter
       then sl.Exchange(j-1,j);

    Memo1.Lines.Append('');
    Memo1.Lines.Append('Nach Alter sortieren');

    for i := 0 to sl.Count -1 do
      Memo1.Lines.Append(sl[i] + ', ' + TZusatzdaten(sl.Objects[i]).FVorname + ' Alter: ' + IntToStr(TZusatzdaten(sl.Objects[i]).FAlter));

  finally
     for i := 0 to sl.Count -1 do
      if Assigned(sl.Objects[i])
       then sl.Objects[i].Free;

    sl.Free;
  end;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#17

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 11:30
Lösungen findest du eventuell auch in dem Thread mit dem lustigen Namen: Intelligentes BubleSort; sortieren wie im Windows Explorer
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#18

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 12:33
Das einfachste wäre nicht Zahl+Text in der Stringliste zu hinterlegen sondern eine Liste zu nehmen die zum Beispiel Records oder Objekte enthält so das du den Zahlen und Textteil direkt ansprechen kannst und nicht erst jedesmal den String in seine Bestandteile zerlegen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
XxnemesisxX49

Registriert seit: 4. Sep 2012
14 Beiträge
 
#19

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 14:52
Ja. Hast Du es schon selbst versucht? Wie würdest Du an die Sache herangehen?

Schau Dir mal die Befehle Delphi-Referenz durchsuchenPos und Delphi-Referenz durchsuchenCopy an.
Ja, langsam fängt mein Kopf auch schon an zu qualmen. Ich schätze mal, ich muss den String in 2 Teile teilen, die Zahlenteile sortieren und den Textteil dann wieder entsprechend hinzufügen?
Ich hoffe, das war nicht allzu falsch, aber ich arbeite mit Delphi nur einmal pro Woche in der Schule und das auch noch nicht so lange. Vor 2 Monaten wusste ich noch nicht einmal was eine TStringlist ist. Dementsprechend sind halt auch meine Kenntnisse

ist zwar nicht meine Art trotzdem sticht mir immer wieder das "abwertend" im Titel ins Auge. Könntest du das bitte in "absteigend" ändern?
Wenn du mir sagst, wie ich das mache.

Das einfachste wäre nicht Zahl+Text in der Stringliste zu hinterlegen sondern eine Liste zu nehmen die zum Beispiel Records oder Objekte enthält so das du den Zahlen und Textteil direkt ansprechen kannst und nicht erst jedesmal den String in seine Bestandteile zerlegen.
Ich habe aber bisher nur TStringlists gelernt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.824 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: TStringList abwertend sortieren

  Alt 5. Sep 2012, 15:03
Zitat:
Zitat von ibp:
ist zwar nicht meine Art trotzdem sticht mir immer wieder das "abwertend" im Titel ins Auge. Könntest du das bitte in "absteigend" ändern?
Wenn du mir sagst, wie ich das mache.
Deinen 1. Beitrag im erweiterten Modus bearbeiten
Markus Kinzler
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf