Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Mengendeklaration/Aufzählungstyp (https://www.delphipraxis.net/122835-problem-mit-mengendeklaration-aufzaehlungstyp.html)

richard_boderich 22. Okt 2008 22:53


Problem mit Mengendeklaration/Aufzählungstyp
 
Nabend!

Also ich habe hier ein Problem bei der Mengen/Augfzählungsdeklaration in Delphi. Vielleicht kann mir da mal jemand helfen?

Ich habe folgende Constanten Stringwerte '109', '108' und '24'.

Ich möchte das Sinngemäß so haben.

Tteilmenge1 = '109', '108';
Tteilmenge2 = '24';

Tgesamtmenge = (Tteil1 + Tteil2), also dann '109', '108', '24'

wie könnte ich das in Delphi umsetzen! Momentan kackt mich der Compiler mit Typfehlermeldungen zu. Denke mal es liegt wohl an der fortgeschrittene Uhrzeit.

turboPASCAL 23. Okt 2008 00:21

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
Zitat:

Momentan knackt mich der Compiler mit Typfehlermeldungen zu. Denke mal es liegt wohl an der fortgeschrittene Uhrzeit.
Ja weil ein Type eine typisierung ist und keine Konstante oder Variable die einen Wert enthalten können.


Gegenfrage, handelt es sich bei den Mengen um Strings oder Zahlen ?

alzaimar 23. Okt 2008 06:24

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
Delphi-Quellcode:
Const
  Teilmenge1 = [109,108];
  Teilmenge2 = [24];

Var
  Vereinigungsmenge,
  Schnittmenge : Set Of Byte;

Begin
  Vereinigungsmenge := Teilmenge1+Teilmenge2;
  Schnittmenge := Teilmenge1*Teilmenge2;
End;

richard_boderich 23. Okt 2008 09:20

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
Es handelt sich um Strings ich würde auch gerne Strings verwenden, aber das sind erstens keine Ordinalen Typen und
zweitens benötige ich mehr als 256 Werte.

Ich benötige also sowas wie ein set of string (gibt es glaube ich nicht in delphi) und dieses set soll aus den einzelnen
constanten stringwerten bestehen. Also '109', '108', '24', ect. ect.

Dann würde ich gern Teilmengen definieren die nur bestimmte stringkonstanten aus der gesamtmenge beinhalten.

Und später im Programm dann so abfragen

Delphi-Quellcode:
if '109' in teilmenge1 then do something
if '109' in teilmenge2 then do was anderes
Also ich würde hier nur den Weg über array construkte sehen, aber vielleicht geht es ja auch irgendwie einfacher?
Jemand ne idee?

DeddyH 23. Okt 2008 09:27

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
Könntest Du das nicht elegant mit Stringlisten lösen?

Delphi-Quellcode:
if Liste1.IndexOf('109') > -1 then MachWas();
if Liste2.IndexOf('109') > -1 then MachWasAnderes();

richard_boderich 23. Okt 2008 09:31

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
@DeddyH

stimmt, das wäre möglich und auch bestimmt elegant. Gibt es eine Möglichkeit die Stringlist anders mit den Konstanten zu füllen als über die Methode add? Also eventuell ohne Schleife?

DeddyH 23. Okt 2008 09:36

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
Dazu hab ich momentan leider keinen genialen Einfall.

Hawkeye219 23. Okt 2008 10:38

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
Hallo Richard,

vielleicht kannst du es so versuchen:

Delphi-Quellcode:
var
  SL : TStrings;
begin
  SL := TStringList.Create;
  SL.CommaText := '10,20,30,40,50';
  SL.Free;
end;
Gruß Hawkeye

richard_boderich 23. Okt 2008 10:43

Re: Problem mit Mengendeklaration/Aufzählungstyp
 
@All

Habe es jetzt mit Arrays of String und AnsiIndexStr gelöst. Klappt wunderbar! Hat den Vorteil, das ich die einzelnen Stringwerte
als Konstanten direkt dem Array zuweisen kann und spart eine Menge Code&Overhead gegenüber den Stringlisten (keine Add Schleifen bei der Wertzuweisung, keine try Construkte, Kein Vergessen die Stringlist wieder freizugeben ect) und ist durch
AnsiIndexStr genauso elegant.

Danke nochmal an alle für eure Tips! :)

//Edit

@Hawkeye219

Sieht auch recht sauber und übersichtlich aus. Ist aber zusätzlicher Code im Implementation Teil, und ich müsste das ganze
5 mal machen. Weil ich ja wie gesagt betsimmte Teil-"Mengen" habe und für jede eine liste brauche. Trotzdem danke auch für
deinen Hinweis ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 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