Die EGL-Anweisung case stellt eine Alternative zu verschachtelten if-Anweisungen dar. Anhand von Auswertungen wählt EGL aus diversen Alternativen eine Gruppe von Anweisungen für die Ausführung aus. Die Anweisung case ähnelt einer C-Anweisung des Typs 'switch' oder einer COBOL-Anweisung des Typs EVALUATE.
Für die Anweisung sind zwei Hauptformate verfügbar. Bei der ersten Version wertet EGL ein einzelnes Kriterium aus und sucht in den when-Klauseln nach einem übereinstimmenden Wert. Bei der zweiten Version wird von Ihnen kein übergeordnetes Kriterium angegeben und EGL wertet der Reihe nach einen logischen Ausdruck für die einzelnen when-Anweisungen aus, wobei der Code für den ersten Ausdruck ausgeführt wird, der als wahr ausgewertet wird. Bei der ersten Version wird von EGL als einzige Bedingung nur die einfache Übereinstimmung mit dem Kriterium ausgewertet. Die zweite Bedingung bietet eine höhere Flexibilität. Die Vergleiche können auf Ungleichungen, Wertebereichen etc. basieren.
Alle übrigen Kriterien sind nicht zulässig. Sie können beispielsweise nicht einen Datensatz mit einem anderen oder ein Ein-/Ausgabeobjekt (z. B. einen Datensatz des Typs SerialRecord) mit endOfFile vergleichen.
Wie in COBOL (aber im Unterschied zu C) wird die Steuerung nicht von einer Klausel when an die nächste weitergegeben. Nachdem die Anweisungen in einer Klausel when oder otherwise ausgeführt wurden, wird die Steuerung an die EGL-Anweisung übergeben, die direkt im Anschluss an die case-Anweisung folgt. Wird von EGL keine Übereinstimmung für eine Klausel when und keine Klausel otherwise gefunden, geht die Steuerung auch an die nächste Anweisung über, die im Anschluss an eine Anweisung case folgt, ohne einen Fehler auszulösen.
Enthält eine einzelne Klausel mehrere Abgleichausdrücke (siehe 'Beispiele' in diesem Abschnitt), wertet EGL die betreffenden Ausdrücke von links nach rechts aus und stoppt, wenn eine Übereinstimmung gefunden wurde.

Wenn Sie ein Kriterium für criterion angeben (erstes Syntaxdiagramm), müssen die nachfolgenden when-Klauseln mindestens einen Abgleichausdruck (matchExpr) enthalten. Wenn Sie kein Kriterium für criterion angeben (zweites Syntaxdiagramm), müssen alle nachfolgenden when-Klauseln einen logischen Ausdruck (logicalExpr) enthalten.
Wenn Sie eine Klausel ohne EGL-Anweisungen schreiben, wird die Steuerung von der case-Schleife ohne Aufruf der Klausel otherwise übergeben.
Eine Anweisung case kann eine beliebige Anzahl von when-Klauseln enthalten.
case (myRecord.requestID)
when (1)
myFirstFunction();
when (2, 3, 4)
try
call myProgram;
onException(iex InvocationException)
myCallFunction(fileEx);
end
otherwise
myDefaultFunction();
end
Program calc3
x INT = 3;
y INT = 5;
z INT = 7;
function main()
case
when (x == 3)
writeStdOut("x passes");
when (y == 5)
writeStdOut("y passes");
when (z == 7)
writeStdOut("z passes");
otherwise
writeStdErr("You should not see this msg");
end
end
In der Konsole werden die Wörter 'x passes' angezeigt. Die Anweisung case endet, wenn ein Ausdruck gefunden wird, der als wahr ausgewertet wird.