AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Anzahl der Elemente einer Aufzählung
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl der Elemente einer Aufzählung

Ein Thema von Andreas L. · begonnen am 10. Nov 2012 · letzter Beitrag vom 11. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#1

Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 16:10
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
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 16:23
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).
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 16:39
Deine Variante funktioniert, nur das ich plus 1 statt Minus 1 rechnen muss.

Danke für deine Hilfe
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 18:08
Dann am besten gleich
ord(high(YourEnum)) - ord(low(YourEnum)) + 1
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 19:03
Dann am besten gleich
ord(high(YourEnum)) - ord(low(YourEnum)) + 1
Und worin liegt bei deiner Methode der VOrteil zu der von Furtbichler?
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 19:20
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#7

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 19:21
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Nov 2012 um 19:27 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 21:08
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: 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.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: Anzahl der Elemente einer Aufzählung

  Alt 10. Nov 2012, 21:26
Dann am besten gleich
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.

Geändert von Furtbichler (10. Nov 2012 um 21:33 Uhr)
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Anzahl der Elemente einer Aufzählung

  Alt 11. Nov 2012, 05:48
Guten Morgen

Danke für die vielen informativen Antworten.

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

  Anzahl := Ord(High(TMeineAufzaehlung)) + 1;
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:16 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