Introduction

Language Structure

IB Statements

File System

Comet 32 Runtime

Index

SELECT statement

Syntax:
SELECT CASE test expression

  CASE expression list 1
       [statement block 1]

  CASE expression list 2
       [statement block 2]
  .
  .
  .
  CASE expression list n
       [statement block n]

  [CASE ANY MATCH]
       [statement block]

  [CASE ELSE]
       [statement block]

ENDSELECT
Discussion: Executes none or one of the several statement blocks, depending on the value of the test expression.

The statement blocks do not need to be indented. They are shown that way for the sake of clarity and source code readability.

The test expression may be any numeric or string expression.

The expression list elements may have any of the following forms:

  1. expression or expression list (expression list elements are separated with a semicolon)
  2. FROM expression TO expression
  3. FROM expression THRU expression
  4. IS relational-operator expression
The expressions and operators in the expression list must be compatible with the test expression. The word "IS" must precede any relational operators. The word "FROM" must precede any range specification. The word "TO" means up to but not including. The word "THRU" means up to and including.

The selected expression is tested in sequence for each of the CASE clauses. Upon reaching the first successful test, the statement block following the CASE is executed, and control is then passed to one of two places:

  1. If the structure does not contain a CASE ANY MATCH clause control is passed to the statement following the ENDSELECT statement.

  2. If the structure contains a CASE ANY MATCH clause, control is passed to it. Following the execution of the CASE ANY MATCH statement block, control is passed to the statement following the ENDSELECT statement.

If no match is found and the structure contains a CASE ELSE clause, control is passed to it. The CASE ELSE statement block is executed and control is passed to the statement following the ENDSELECT statement.

A BREAK statement may be used in the CASE structure. If there is a CASE ANY MATCH clause, control is passed to it. If not, the BREAK statement transfers control to the statement following the ENDSELECT statement.

Example:

SELECT CASE TEMP                     ! use the TEMP variable

CASE IS GT 102                       ! a relational operator clause
PRINT (0) "It's over 102 degrees"    ! conditional PRINT

CASE 100;101;102                     ! multiple expressions
PRINT (0) "It's a bit above 100"     ! conditional PRINT

IF TEMP LT 102 BREAK                 ! if true, jump to end
   PRINT (0) " and heading higher"   ! otherwise, PRINT
ENDIF                                ! end of IF structure

CASE FROM 80 THRU 99                 ! range of values
PRINT (0) "It is mighty warm today"  ! conditional PRINT

CASE ANY MATCH                       ! if any of above match
PRINT (0) "Hope is it warm tomorrow" ! conditional PRINT

CASE ELSE                            ! if none of above match
PRINT (0) "It is below 80 degrees"   ! conditional PRINT

ENDSELECT                            ! end of CASE structure
Additional discussion: The SELECT structure encompasses several Internet Basic keywords, including SELECT, CASE, ENDSELECT, FROM, TO, THRU, IS, ANY, and MATCH. The basic outline of a CASE structure is:
  SELECT CASE test expression ! identify the test expression

  CASE expression list 1      ! test the first case
     [statement block 1]      ! execute if first case is valid

  CASE expression list 2      ! test the second case
     [statement block 2]      ! execute if second case is valid
  .
  .
  .
  CASE expression list n      ! test the nth case
     [statement block n]      ! execute if nth case is valid

  CASE ANY MATCH              ! if any of the above cases are
     [statement block]        ! matched, execute this block of code
                              ! and jump to end of structure
                              ! (this is an optional clause)

  CASE ELSE                   ! otherwise,
     [statement block]        ! execute this block of code
                              ! (this is an optional clause)

  ENDSELECT                   ! end the structure
The test expression in the SELECT CASE statement may be any numeric or string expression.

The expression list elements in the CASE statement may have any of several forms. The first form is simply an expression or constant value. For example:

  SELECT CASE VALUE           ! test the numeric variable VALUE
  CASE 50                     ! if VALUE = 50,
  [statement block]           ! execute this code
  CASE 75                     ! if VALUE = 75,
  [statement block]           ! execute this code
  ENDSELECT                   ! end the structure
Multiple expression list elements may be included in a single CASE statement. The elements are separated with a semicolon. For example:
  SELECT CASE VALUE           ! test the numeric variable VALUE
  CASE 50;51;52;53            ! if VALUE is 50, 51, 52 or 53,
  [statement block]           ! execute this code
  ENDSELECT                   ! end the structure
The CASE statement may also indicate a range of values, as follows:
  CASE expression TO expression         ! up to but not including
  CASE FROM expression THRU expression  ! up to and including
An example of this is:
  SELECT CASE VALUE           ! test the numeric variable VALUE
  CASE 50 TO 60               ! if VALUE is 50 to (but not
                              ! including) 60,
  [statement block]           ! then execute this code
                              !
  CASE FROM 80 THRU 90        ! if VALUE is 80 to (and including)
  [statement block]           ! 90, then execute this code
                              !
  ENDSELECT                   ! end the structure
The CASE statement may also include a relational-operator clause, as follows:
  CASE IS relational-operator expression
An example of this is:
  SELECT CASE VALUE           ! test the numeric variable VALUE
  CASE IS GT 102              ! if VALUE is greater than 102,
  [statement block]           ! then execute this code
  ENDSELECT                   ! end the structure
The CASE ANY MATCH clause is executed if one of the specific CASE values is matched. This statement is optional, but if included in the structure, must be written after the individual CASE clauses and before the CASE ELSE clause (if one is present). For example:
  SELECT CASE VALUE           ! test the numeric variable VALUE
  CASE 50                     ! if VALUE = 50,
  [statement block]           !         execute this code
  CASE 75                     ! if VALUE = 75,
  [statement block]           !         execute this code
  CASE ANY MATCH              ! if either of above cases is
  [statement block]           ! matched,execute this code, too
  ENDSELECT                   ! end the structure
The CASE ELSE clause may be included in the structure to handle cases that are not matched by any of the individual CASE clauses. This clause is optional, but if included in the structure, must be written as the final clause (just prior to the ENDSELECT statement). For example:
  SELECT CASE VALUE           ! test the numeric variable VALUE
  .
  .
  .
  CASE ELSE                   ! if none of the cases produce a
  [statement block]           ! match, execute this code
  ENDSELECT
The CASE structure may also include a BREAK statement. A BREAK statement transfers control to the CASE ANY MATCH (if there is one), otherwise to the statement following the ENDSELECT statement. For example:
  SELECT CASE VALUE           ! test the numeric variable VALUE
  .
  CASE ________               ! test one of the specific cases
  .
     IF ________ THEN BREAK   ! if a condition is true, then break
  .
  ENDSELECT