Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Anzahl der Elemente einer Aufzählung (https://www.delphipraxis.net/171521-anzahl-der-elemente-einer-aufzaehlung.html)

Andreas L. 10. Nov 2012 16:10

Anzahl der Elemente einer Aufzählung
 
Hi,

wie kann ich die Anzahl der Elemente einer Enumeration ermitteln?

Folgendes funktioniert leider nicht:

Delphi-Quellcode:
type
  TCsScCategory = (
    cscText,
    cscInteger,
    cscFloat,
    cscDateTime,
    cscColor,
    cscURL,
    cscHTML,
    cscEncryption,
    cscHash
  );

...
...

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i := High(TCsScCategory);
  // i := Length(TCsScCategory);
  ShowMessage(IntToStr(i));
end;
Bei beiden Varianten erhalte ich vom Compiler die Meldung:

Zitat:

[DCC Fehler] Unit1.pas(42): E2029 '(' erwartet, aber ')' gefunden
Schöne Grüße,
Andreas

Furtbichler 10. Nov 2012 16:23

AW: Anzahl der Elemente einer Aufzählung
 
Nee, da hast Du einen anderen Fehler drin.
Das hier funktioniert:
Delphi-Quellcode:
Var
  Anzahl : Integer;

Begin
  Anzahl := Ord(High(TMeineAufzaehlung))-1;
Das funktioniert aber nur, wenn Du Delphi die Nummerierung der Aufzählungselemente überlässt (so, wie Du es ja auch gemacht hast).

Andreas L. 10. Nov 2012 16:39

AW: Anzahl der Elemente einer Aufzählung
 
Deine Variante funktioniert, nur das ich plus 1 statt Minus 1 rechnen muss.

Danke für deine Hilfe :)

SirThornberry 10. Nov 2012 18:08

AW: Anzahl der Elemente einer Aufzählung
 
Dann am besten gleich
Delphi-Quellcode:
ord(high(YourEnum)) - ord(low(YourEnum)) + 1

Andreas L. 10. Nov 2012 19:03

AW: Anzahl der Elemente einer Aufzählung
 
Zitat:

Zitat von SirThornberry (Beitrag 1190633)
Dann am besten gleich
Delphi-Quellcode:
ord(high(YourEnum)) - ord(low(YourEnum)) + 1

Und worin liegt bei deiner Methode der VOrteil zu der von Furtbichler?

Sir Rufo 10. Nov 2012 19:20

AW: Anzahl der Elemente einer Aufzählung
 
Die Furtbichler Variante liefert den Index des höchsten Wertes (8) zurück.
Die SirThornberry Variante liefert die Anzahl (8-0+1=9) zurück

himitsu 10. Nov 2012 19:21

AW: Anzahl der Elemente einer Aufzählung
 
Im Prinzip darin, daß die Zählung nicht unbedingt bei 0 begonnen werden muß.

Aber wenn man es ganz genau sieht, müßte man sogar noch genauer hingucken, denn auch zwischendurch kann was weggelassen werden, aber real paßt noch viel mehr in in diese Variable rein. (2 hoch (SizeOf(TMeineAufzaehlung) * 8))


(aber leider ist die RTTI seit jahrzehnten defekt, wenn es um Enums mit benutzerdefinierten Werten geht)


Delphi-Quellcode:
type
  TMeinGemeinerEnum = (Abc=3, Xyz=9);

Anzahl = 2
Low(TMeinGemeinerEnum) = Abc
High(TMeinGemeinerEnum) = Xyz
Ord(Low(TMeinGemeinerEnum)) = 3
Ord(High(TMeinGemeinerEnum)) = 9
Ord(High(TMeinGemeinerEnum)) + 1 = 10 (aka Lenght, wenn man bei 0 beginnt zu zählen)
Ord(High(TMeinGemeinerEnum)) - Ord(Low(TMeinGemeinerEnum)) + 1 = 7

Popov 10. Nov 2012 21:08

AW: Anzahl der Elemente einer Aufzählung
 
Zitat:

Zitat von Sir Rufo (Beitrag 1190644)
Die Furtbichler Variante liefert den Index des höchsten Wertes (8) zurück.
Die SirThornberry Variante liefert die Anzahl (8-0+1=9) zurück

Auch wenn es Null ist, es ist eine Zahl die da hin gehört.

Ach, in meinen Programmen findest du oft solche Konstrukte wie:
Delphi-Quellcode:
x - 1 + 1
. -1 weil x bei 0 anfängt und +1 weil mir das egal ist. Ne, natürlich nicht, sondern es hat meistens auch einen Grund. Und auch wenn x - 1 + 1 dämlich aussieht, nach einem Jahr kriegt man die Logik der Formel besser hin als wenn es fehlen würde.

Furtbichler 10. Nov 2012 21:26

AW: Anzahl der Elemente einer Aufzählung
 
Zitat:

Zitat von SirThornberry (Beitrag 1190633)
Dann am besten gleich
Delphi-Quellcode:
ord(high(YourEnum)) - ord(low(YourEnum)) + 1

Da High eh nur funktioniert, wenn man die Nummerierung nicht selbst vornimmt, ist das auch nicht 'richtiger', sondern genauso ungenügend, wie mein Vorschlag, der zudem noch falscher war.

Es gibt wohl keine vollständig korrekte Lösung.

Andreas L. 11. Nov 2012 05:48

AW: Anzahl der Elemente einer Aufzählung
 
Guten Morgen :)

Danke für die vielen informativen Antworten.

Für den Moment ist die Variante von Furtbichler für mich ausreichend.

Delphi-Quellcode:
  Anzahl := Ord(High(TMeineAufzaehlung)) + 1;


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

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