Seite 1 von 1

Prüfen ob Konstantensammlung eine bestimte Konstante enthält

Verfasst: 28.01.2015 17:00
von Tommy
Hallo
Ich kan mit | mehrere Konstanten kombinieren aber wie prüfe ich ob
eine bestimmte drinne is? Ich habe drei Konstanten mit verschieden
Werte und alle drei werden an eine Prozedure übergeben.

Code: Alles auswählen

MeineProcedure(#Test_AAA|#Test_BBB|#Test_CCC)
Wie kan ich ermitteln ob #Test_AAA mit übergeben wurde? Ich habe
versucht mit & zu prüfen aber das scheint falsch zu sein.
Mein aktueller Code:

Code: Alles auswählen

#Test_AAA = 1
#Test_BBB = 2
#Test_CCC = 3

Debug #Test_AAA|#Test_BBB
Debug #Test_AAA|#Test_CCC
Debug #Test_BBB|#Test_CCC
Debug #Test_AAA|#Test_BBB|#Test_CCC

Debug ""

Debug (#Test_AAA|#Test_BBB|#Test_CCC) & #Test_AAA
Debug (#Test_AAA|#Test_BBB)           & #Test_AAA
Debug (#Test_AAA)                     & #Test_AAA
Debug (#Test_BBB|#Test_CCC)           & #Test_AAA
Debug (#Test_CCC)                     & #Test_AAA
Da sagt er überall "1". Wie kann ich herausfinden ob #Test_AAA über-
geben wurde? Ich hoffe ihr wisst was ich meine. :)

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Verfasst: 28.01.2015 17:10
von mhs
Deine Konstanten müssen Binär aufsteigend sein, damit jedes Bit nur einmal gesetzt und überprüft werden kann. Also 1, 2, 4, 8, 16, 32, 64, ...

Code: Alles auswählen

#KONST_1 = 1
#KONST_2 = 2
#KONST_3 = 4
#KONST_4 = 8

Value.i = #KONST_1 | #KONST_3

Debug Value & #KONST_1
Debug Value & #KONST_2
Debug Value & #KONST_3
Debug Value & #KONST_4

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Verfasst: 28.01.2015 17:11
von GronkhLP
Müssen die Werte deiner Konstanten nicht eindeutg sein? Zum Beispiel so:

Code: Alles auswählen

#Test_AAA = 1
#Test_BBB = 2
#Test_CCC = 4
Ich bin mir nicht ganz sicher, ob das der richtige Weg ist, aber die Werte müssen m.E. in sochen Abständen sein. 1, 2, 4, 8, 16, 32, 64, ...

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Verfasst: 28.01.2015 17:11
von STARGÅTE
Diese Methode geht nur, wenn die Bitmuster der Konstanten sich nicht überschneiden.
Mit andere Worten, du musst deine Konstanten wie Folgt aufsteigen lassen:
1, 2, 4, 8, 16, 32, 64, ...

Danach kannst du mit | die Konstanten verbinden und mit & dann wieder trennen:

Code: Alles auswählen

#Flag1 = 1
#Flag2 = 2
#Flag3 = 4
#Flag4 = 8

A = #Flag2 | #Flag3

Debug Bool(A & #Flag1)
Debug Bool(A & #Flag2)
Debug Bool(A & #Flag3)
Debug Bool(A & #Flag4)

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Verfasst: 28.01.2015 17:20
von Tommy
Ahh an den Werten lags, super danke für die schnellen
Lösungen von euch :allright:
Nebenfrage: Gibt es bei Enumeration die Möglichkeit
binär hochzählen zu lassen? So was wie Enumeration 1 Step *2

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Verfasst: 28.01.2015 17:21
von RSBasic

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Verfasst: 28.01.2015 17:31
von Tommy
Super :allright:
Die Macro Varianten funktionieren alle gut. Wie geht es mit der Lösung
von WPö? Sind das nur Variablen oder wie wende ich das an?

Re: Prüfen ob Konstantensammlung eine bestimte Konstante ent

Verfasst: 28.01.2015 18:28
von GronkhLP
Es sind nur Variablen, die er manuell deklariert, weil seine Projekte bisher nicht so groß waren, dass er Enumeration unbedingt brauchte.