$Oneof

From m204wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The $ONEOF function is a table lookup function that can replace a series of IF conditions.

Syntax

$ONEOF('item','set',delimiter')

where:

  • item is an element that might be in set.
  • set is one or more items
  • delimiter is the character used to separate the set items.

Example

$ONEOF('MALE','FEMALE/MALE','/') equals 1 $ONEOF('GRAY','BLACK*WHITE*GRAY','*') equals 1

  • If the delimiter argument is omitted, the default delimiter value is a semicolon (;), which is used to separate items in the second argument. For example:
  • $ONEOF('FEMALE','FEMALE;MALE') equals 1

    $ONEOF code is less confusing if you explicitly specify a delimiter value and do not accept the default delimiter value, a semicolon (;). Accepting the default value can cause confusion, because the default LINEND character is also a semicolon.

  • If the second argument is null, or if the first argument is not an element of the second argument, 0 (false) is returned. For example:
  • $ONEOF('BOY','FEMALE;MALE') equals 0 $ONEOF(",'FEMALE;MALE') equals 0 $ONEOF('BOY',") equals 0

  • You can enter null values as the following examples show.
  • $ONEOF(",';FEMALE;MALE') equals 1 $ONEOF(",'FEMALE;;MALE') equals 1 $ONEOF(",'FEMALE;MALE;') equals 1

  • If a long string of values is used frequently, a special record containing those values can be useful. In the following example, a record is created with a field consisting of a list of departments. The list is used in the second request to locate and process records for which the department is not known.
  • BEGIN DECLARE %DEPT STRING LEN 50 STORE RECORD TABLE = VALS DEPT VALS = DEPT1/DEPT2/DEPT3/etc. END STORE END . . . BEGIN FIND.RECS: FIND ALL RECORDS FOR WHICH TABLE = VALS END FIND FOR EACH RECORD IN FIND.RECS %DEPT = DEPT VALS END FOR PAY.RECS: FIND ALL RECORDS FOR WHICH TYPE = PAYROLL END FIND FOR EACH RECORD IN PAY.RECS IF NOT $ONEOF(DEPT,%DEPT,'/') THEN . . .