0

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

null
    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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!

    • Michael_Martin.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

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

    • Michael_Martin.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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?

    • Michael_Martin.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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
  • 3412Ansichten