Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Bei CASE Anweisungen mit Variablen arbeiten
pwsolaris - Do 12.05.11 07:25
Titel: Bei CASE Anweisungen mit Variablen arbeiten
Guten Morgen,
ich benutze momentan mehrere CASE Bedingungen. Bisher habe ich immer sowas genutzt wie z.B. :
Delphi-Quelltext
1: 2: 3: 4:
| case LampChn of 1 : Begin ... end; 2 : Begin ... end; end; |
oder auch
Delphi-Quelltext
1: 2: 3:
| case LampChn of 1..4 : Begin ... end; end; |
usw.
Jetzt möchte ich das ganze statt mit festen Zahlen mit Variablen lösen.
Mit einer Variablen klappt das auch ganz gut:
Delphi-Quelltext
1: 2: 3:
| case LampChn of 1..LampCnt : Begin ... end; end; |
Aber ich müsste das nun auch wie folgt machen:
Delphi-Quelltext
1: 2: 3:
| case LampChn of LampCnt .. LampCntMax : Begin ... end; end; |
Und genau da liegt das Problem...
Ich bekomme nun immer die Meldung, dass statt dem zwei Punkten zwischen den Variablen eine andere Anweisung erwartet wird.
Wie kann ich meinen Code nun so umbiegen, dass ich dort mit meinen Variablen arbeiten kann?
Nersgatt - Do 12.05.11 07:32
Ich vermutle LmpCnt ist keine Variable, sondern eine Konstante. Daher funktioniert das in dem Fall. Mit echten Variablen aber nicht.
jaenicke - Do 12.05.11 07:39
Der Grund ist, dass die case-Anweisung zur Designzeit optimiert und in Sprünge umgesetzt wird. Bei Variablen ist zur Designzeit der Wert aber nicht bekannt, daher geht das nicht.
pwsolaris - Do 12.05.11 07:41
LampCnt ist schon eine Variable... der Wert zählt an einem Gerät angeschlossene Lampen und diese können sich auch zur Laufzeit ändern.
Wie gesagt es funktioniert bei dem "1..LampCnt" Beispiel.
Wie könnte ich das Ganze denn sonst lösen, wenn es mit CASE nicht so richtig klappt.
Situation ist folgende:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| for ChNr := 0 to LampCntMax do begin case ChNr of 0 : Begin ... end;
1..LampCnt1 : Begin ... End;
LampCnt2 .. LampCntMax : Begin ... end; end; end; |
Ich könnte sonst ja in der FOR-Schleife auch die Werte mit einem IF abfragen... jedoch habe ich mehrere solcher Situationen und benutze sonst immer CASE. Und der Code soll ja auch irgendwie einheitlich wirken :D
jaenicke - Do 12.05.11 08:17
pwsolaris hat folgendes geschrieben : |
| Wie gesagt es funktioniert bei dem "1..LampCnt" Beispiel. |
Dann musst du wohl irgendwelche Erweiterungen benutzen. Vielleicht können die DDevExtensions oder ähnliche sowas.
Standardmäßig funktioniert sowas weder mit Delphi noch mit Lazarus. :nixweiss:
Womit arbeitest du denn gerade?
pwsolaris - Do 12.05.11 08:26
Ich erstelle sogennante "Helper" Dateien mit Delphi. Also es wird Delphi Syntax benutzt.
Diese Helper Dateien werden dann von einem Programm eingelesen und über einen Interpreter dann in Code umgewandelt und ausgeführt.
Habe das Problem aber nun auch behoben und einfach mit IF Abfragen gearbeitet. Sieht jetzt zwar etwas durcheinander aus aber es funktioniert...
jaenicke - Do 12.05.11 08:56
pwsolaris hat folgendes geschrieben : |
Ich erstelle sogennante "Helper" Dateien mit Delphi. Also es wird Delphi Syntax benutzt.
Diese Helper Dateien werden dann von einem Programm eingelesen und über einen Interpreter dann in Code umgewandelt und ausgeführt. |
Du stellst eine Frage zur Syntax, sagst aber nicht dazu, dass es sich gar nicht um Delphi handelt und woher die Syntax überhaupt kommt (welcher Interpreter, ...)?!? Sehr logisch... :roll: :autsch:
Delphi Syntax ist es jedenfalls nicht 100%ig, sonst hätte das case mit Variablen
gar nicht funktioniert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!