Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TStringlist sortieren (https://www.delphipraxis.net/84134-tstringlist-sortieren.html)

little_budda 11. Jan 2007 20:38


TStringlist sortieren
 
Hallo,

ich habe mir eine Stringliste deklariert mit folgendem Code
Delphi-Quellcode:
...
  slOutList : tstrings;
...
  slOutList := tstringlist.create();
...
Nun sind ca 400 Einträge in der Liste und ich würde sie gern alphabetisch sortieren.
Hier im Forum finde ich jede Menge Beispiele mit ".sort"
Nur wenn ich folgen Code probiere
Delphi-Quellcode:
...
  slOutList.sort;
...
sagt mir mein Compiler immer "Undefinierter Bezeichner 'sort'

Wo bitte liegt mein Fehler?

Gruß Holger.

:gruebel:

Bernhard Geyer 11. Jan 2007 20:43

Re: TStringlist sortieren
 
Sort gibt nur bei TStringList und nicht bei TStrings.
Und da deine Variable vom Typ TStrings ist ...

mkinzler 11. Jan 2007 20:50

Re: TStringlist sortieren
 
Zitat:

Zitat von Bernhard Geyer
Sort gibt nur bei TStringList und nicht bei TStrings.
Und da deine Variable vom Typ TStrings ist ...

???
Das dürfte doch kein Problem sein, da TStringList ja ne implementierende Abelitung der abstrakten Klasse TStrings ist.

Man muß nur Casten:


Delphi-Quellcode:
(slOutList as TStringList).sort;

little_budda 11. Jan 2007 21:03

Re: TStringlist sortieren
 
Danke.

Mit "slOutList as TStringList" klappt es

Gruß Holger.

Bernhard Geyer 11. Jan 2007 21:23

Re: TStringlist sortieren
 
Zitat:

Zitat von mkinzler
Zitat:

Zitat von Bernhard Geyer
Sort gibt nur bei TStringList und nicht bei TStrings.
Und da deine Variable vom Typ TStrings ist ...

???
Das dürfte doch kein Problem sein, da TStringList ja ne implementierende Abelitung der abstrakten Klasse TStrings ist.

Man muß nur Casten:


Delphi-Quellcode:
(slOutList as TStringList).sort;

Stimmt schon. Wenn schon 'ne lokale Variable dann gleich den passenden Typ nehmen. Sonst casted man blindlinks: Ah TStrings hab ich: Caste ich mal schnell nach TStringlist und schon paßt es.

3_of_8 11. Jan 2007 21:26

Re: TStringlist sortieren
 
Wieso überhaupt TStrings deklarieren und nicht TStringList? Die Abstraktion braucht man in dem Fall ja extrem selten.

marabu 12. Jan 2007 08:06

Re: TStringlist sortieren
 
Hallo Manuel,

Zitat:

Zitat von 3_of_8
Wieso überhaupt TStrings deklarieren und nicht TStringList?

Informatiker lernen, dass man Variablen stets nur für diejenige Superklasse vereinbart, deren Methoden und Eigenschaften man zu nutzen gedenkt. Es handelt sich dabei um eine Spielart von information hiding. Dieses universelle Grundprinzip kennen nicht nur Software Ingenieure ...

Grüße vom marabu

Union 12. Jan 2007 08:42

Re: TStringlist sortieren
 
In diesem Fall (nämlich wenn man eine in der Superklasse nicht deklarierte Methode verwenden will, e.g. sort) hat man sich aber dann elegant vor sich selbst versteckt. Wenn man weiss was man will, sollte man natürlich so arbeiten, u.a. bei Streams.

bernau 12. Jan 2007 09:29

Re: TStringlist sortieren
 
Zitat:

Zitat von marabu
Zitat:

Zitat von 3_of_8
Wieso überhaupt TStrings deklarieren und nicht TStringList?

Informatiker lernen, dass man Variablen stets nur für diejenige Superklasse vereinbart, deren Methoden und Eigenschaften man zu nutzen gedenkt. Es handelt sich dabei um eine Spielart von information hiding. Dieses universelle Grundprinzip kennen nicht nur Software Ingenieure ...

Ist für mich nicht logisch. (Liegt vieleicht daran, daß ich kein studierter Informatiker bin, sondern nur ein autodidaktischer Programmierer :-)

Ich denke, wenn ich in einer Procedure ein Object deklariere, dann verwende ich als Variable auch den Type den ich brauche. Un anscheinend gedenkt little_budda ja die Functionen von TStringlist zu verwenden. Warum dann nicht die Variable als TStringlist deklarieren?


Gerd

marabu 12. Jan 2007 09:53

Re: TStringlist sortieren
 
Hallo Gerd,

die eigentliche Frage hatte Bernhard schon in Beitrag #2 beantwortet. Mein Beitrag bezog sich auf die Frage von Manuel:

Zitat:

Zitat von 3_of_8
Wieso überhaupt TStrings deklarieren und nicht TStringList? Die Abstraktion braucht man in dem Fall ja extrem selten.

Durch den hervorgehoben Nachsatz habe ich die Frage als allgemeine Frage angesehen und versucht eine allgemeine Antwort zu geben.

Meine Antwort möchte ich so verstanden wissen:

Wird eine StringList instanziert, dann verwende ich eine Objektvariable vom Typ TStrings, wenn ich sowieso nur die von TStrings bereit gestellten Methoden verwenden möchte. Da Holger im konkreten Fall die Methode Sort() verwenden möchte, ist es kein Verstoß gegen das Universalprinzip die Objektvariable als TStringList zu deklarieren. Nur die unmotivierte Deklaration als TStringList ist unprofessionell.

Ich fürchte nach genauem Lesen, dass auch Union meinen Beitrag falsch interpretiert haben könnte und hoffe mit dieser Lesehilfe auf mehr Verständnis.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.
Seite 1 von 2  1 2      

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