HELPLIB.HLB  —  PASCAL  Statements  SELECT[ONE]
  The SELECT statement  causes  zero,  one,  or  more  of  several
  statements  to be executed.  The SELECTONE statement causes zero
  or one statements to be executed.  The execution depends on  the
  value of an ordinal expression called the select selector.

  The SELECT and SELECTONE statements  look  much  like  the  CASE
  statement  except  for  one  very powerful feature.  Namely, the
  labels of a  SELECT  or  SELECTONE  statement  can  be  run-time
  expressions  as  opposed to the CASE statement which only allows
  constant expressions.

  Syntax:

     SELECT select-selector OF
            [[{{select-label-list},...: statement};...]]
            [[ [[OTHERWISE {statement};...]]
               [[ALWAYS {statement};...]] ]]
            [[;]]
        END

     SELECTONE select-selector OF
            [[{{select-label-list},...: statement};...]]
            [[ OTHERWISE {statement};... ]]
            [[;]]
        END

  The 'select-selector' is an expression of an ordinal type.

  The 'select-label-list' is one or more select labels of the same
  ordinal  type  as  the  select selector, separated by commas.  A
  select label can be a single expression, such as 1, or  a  range
  of   expressions,   such   as   5..10.   The  expressions  in  a
  'select-label-list' can be full run-time expressions.

  When two expressions are provided as a lower  and  upper  bound,
  they  must  be  of  the same ordinal type.  There is no check to
  ensure that the lower bound expression is less than or equal  to
  the  upper  bound  expression.  If that occurs then there are no
  values of the select-selector that can be in the range.

  The 'statement' is any statement to be executed depending on the
  values of both the select-selector and the select-label.

  The  SELECT  statement  checks  to  see  if  the  value  of  the
  select-selector  is  contained in the select-label-list.  If so,
  then   the   corresponding   statement   is    executed.     The
  select-label-lists  are  checked  in the same lexical order that
  they appear in the source file.  The same value  can  appear  in
  more  than  one select-label-list.  All corresponding statements
  to select-label-lists are executed if the value is contained  in
  the  select-label-list.   By  contrast,  the SELECTONE statement
  stops processing after it  executes  the  first  statement  that
  corresponds   to   a   select-label-list   that   contains   the
  select-selector value.

  The optional OTHERWISE and ALWAYS clauses can appear  in  either
  order.   The  ALWAYS  clause  is always executed.  The OTHERWISE
  clause is executed only if none of the prior statements  (except
  for an optional ALWAYS statement) have been executed.

  The syntax for the SELECTONE statement is almost  identical  but
  does not provide for an ALWAYS clause.

1  –  Examples

  While the SELECT/SELECTONE statements can be used similar to the
  CASE statement.  For example,

     SELECT expression OF
      1: WRITELN('ONE');
      2: WRITELN('TWO');
      OTHERWISE WRITELN('not ONE or TWO')
      END

  a more subtle (and powerful)  form  uses  the  Boolean  constant
  'TRUE' as the select-selector.  For example,

     SELECTONE True OF
      expression < 10: WRITELN('Value is small');
      expression < 100: WRITELN('Value is medium');
      expression < 1000: WRITELN('Value is big');
      OTHERWISE WRITELN('Value is too big');
      END

     SELECTONE True OF
      expression = "AAA": writeln('String is AAA');
      expression = "BBB": writeln('String is BBB');
      expression = "CCC": writeln('String is CCC');
      OTHERWISE writeln('unknown string');
      END

     FOR i := 1 TO 10 DO
       SELECT True OF
        ODD(i): WRITELN('value ',i:1,' is odd');
        (i MOD 3) = 0:
                WRITELN('value ',i:1,' is also a multiple of 3');
        END;
Close Help