switch-case Verhalten

M

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

Ninox Profile

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.

Ninox Profile

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

 

Ninox Profile

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!

M

Vielen Dank Leo für diesen sehr nützlichen Tipp.

M

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. :-(

Ninox Profile

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?

M

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!

Reply