switch-case Verhalten
Hallo Zusammen,
besteht die Möglichkeit das für verschiedene Style Varianten eine switch-case-Verknüpfung nicht funktioniert?
Gebe ich folgenden Code ein, funktioniert die Style Variante:
var Zeiten := switch Umrechnung(Art_, gearbeitet_) do
case 21:
round('Stunden Aufträge' + Fahrtstunden - Pause, 2)
case 22:
0
case 23:
8
case 24:
8
case 25:
8
case 26:
-8
case 31:
round('Stunden Aufträge' + Fahrtstunden - Pause, 2)
case 32:
round('Stunden Aufträge' + Fahrtstunden - Pause, 2)
case 33:
round('Stunden Aufträge' + Fahrtstunden - Pause, 2)
case 34:
8
case 35:
8
case 36:
-8
end;
styled(Nachkomma(Zeiten), if Zeiten > 0 and Zeiten < 8 then
"rgb(255, 255, 240)"
else
if Zeiten = 8 then
"rgb(235, 255, 235)"
else
if Zeiten > 8 and Zeiten <= 10 then
"rgb(193, 255, 193)"
else
if Zeiten > 10 then "rgb(255, 0, 0)" else void end
end
end
end, if Zeiten > 10 then "white" else "black" end, "")
Trage ich allerdings anstatt die verschachtelten if-then-Anweisungen in eine switch-case-Verknüpfung, wird die Style Funktion nicht ausgeführt.
var Stil := switch Zeiten do
case > 0 and < 8:
"rgb(255, 255, 240)"
case = 8:
"rgb(235, 255, 235)"
case > 8 and <= 10:
"rgb(193, 255, 193)"
case > 10:
"rgb(255, 0, 0)"
end;
styled(Nachkomma(Zeiten), Stil, if Zeiten > 10 then "white" else "black" end, "")
besteht eine Möglichkeit doch die switch-case Anweisung hierfür zu verwenden?
Danke Euch
7 Antworten
-
Soweit ich weiß, lässt sich case nur mit jeweils einem absoluten Wert nutzen ("case X: "). Mathematische Zeichen und Verknüpfungen mit "and/or" funktionieren nicht. In obigem Beispiel müsste man also jede mögliche Zahl einzeln abfragen (case 1: ... case 2: ... usw.), weshalb die if-Variante hier wohl die effizientere sein dürfte.
-
Doch, es gibt ein Trick:
---
var Stil := switch Zeiten > 0 do
case Zeiten < 8:
"rgb(255, 255, 240)"
case Zeiten = 8:
"rgb(235, 255, 235)"
case Zeiten > 8 and <= 10:
"rgb(193, 255, 193)"
case Zeiten > 10:
"rgb(255, 0, 0)"
end;
---
Und bevor die Diskussion anfängt, warum es nicht dokumentiert ist:
https://ninoxdb.de/de/manual/erweiterte-Berechnungen/kontrollstrukturen
Leo
-
Aaah! Danke für den Hinweis. Das hätte ich eher wissen sollen. Was habe ich seinerzeit mit dem switch/case herumprobiert, bis ich mich dann irgendwann mit den vermeintlichen Einschränkungen abgefunden hatte …
Für mich sind da zwei neue Informationen: Erstens das „> 0“ in der switch-Zeile, zweitens, dass man beim case das Feld/die Variable angeben kann/muss. Allerdings wohl bei jedem Vergleich, so dass es m. E. heißen müsste: "case Zeiten > 8 and Zeiten <= 10:“.
Wieder was dazugelernt. Vielen Dank!
-
Vielen Dank Leo für diesen sehr nützlichen Tipp.
-
Hallo Leo,
also deine Formel funktioniert bis leider auf die >8 and <=10. Dort bleibt der Hintergrund weis. Scheint also wirklich so zu sein, daß in einer switch-case-Anweisung keinen Vergleich durchführen kann. :-(
-
Ich zitiere mich mal selbst:
>> Allerdings wohl bei jedem Vergleich, so dass es m. E. heißen müsste: "case Zeiten > 8 and Zeiten <= 10:“.
Liegt's vielleicht daran?
-
Habe den Fehler entdeckt.
var Stil := switch Zeiten > 0 do
case Zeiten < 8:
"rgb(255, 255, 240)"
case Zeiten = 8:
"rgb(235, 255, 235)"
case Zeiten > 8 and Zeiten <= 10:
"rgb(193, 255, 193)"
case Zeiten > 10:
"rgb(255, 0, 0)"
end;Vor <=10 fehlt "Zeiten". Jetzt funktioniert es einwandfrei. Nochmals vielen Dank Leo!
Content aside
- vor 5 JahrenZuletzt aktiv
- 7Antworten
- 3434Ansichten