Autor |
Beitrag |
pwsolaris
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Do 12.05.11 08:25
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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 12.05.11 08:32
Ich vermutle LmpCnt ist keine Variable, sondern eine Konstante. Daher funktioniert das in dem Fall. Mit echten Variablen aber nicht.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 12.05.11 08: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 
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Do 12.05.11 08: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 
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 12.05.11 09: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.
Womit arbeitest du denn gerade?
|
|
pwsolaris 
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Do 12.05.11 09: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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 12.05.11 09: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...
Delphi Syntax ist es jedenfalls nicht 100%ig, sonst hätte das case mit Variablen gar nicht funktioniert.
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Do 12.05.11 10:48
Du arbeitest mit dem FOR-CASE-Paradigma. Warum?
1. Was spricht gegen if?
2. Warum die for-Schleife?
Warum nicht so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| begin for 1 to LampCnt1 do begin end;
for LampCnt2 to LampCntMax do begin end; end; |
|
|
|