do select, case

control structure

Syntax
do select numeric-expression (as alias)?
((case selector (| selector)*
   local-scope)+
(else
   local-scope)?
done


Purpose

do select evaluates its ~numeric-expression~ argument, compares it against the numeric values or ranges in the case alternatives, then selects the alternative that applies. It is an error to have more than one case alternative apply to the same value.

If none of the case alternatives apply, and there is an else declaration, then the else declaration is selected. Otherwise, none of the clauses are selected.

If a clause was selected, the actions in that clause are performed. Otherwise, none of the actions are performed.

The numeric ranges are inclusive. If the value falls between the upper and lower bounds, or matches either bound, the test succeeds and that case alternative is selected.

It is an error for a selecting value to match more than one case alternative. Each range set in a do select must describe a set of values separate from those in all the other range sets.

Example

The following example shows how do select is used to evaluate a numeric expression, and then compare that expression against the numeric values or ranges in the case alternative, in order to select the alternative that applies. If none of the case alternatives apply and there is an else clause, then the else is selected.

  process
     local integer i
  
     do select i
     case 1 | 3 | 5
        output "d" % i || " is either 1, 3, or 5.%n"
  
     case 2 | 4 | 6 to 10
        output "d" % i || " is either 2, 4, or 6 through 10.%n"
  
     else
        output "d" % i || " is something else entirely.%n"
     done