With the IF
statement, you define a logical condition, and the execution of the statement
attached to the IF statement then depends on that condition.
This document covers the following topics:
The IF
statement contains three components:
IF
|
In the IF clause, you specify the logical
condition which is to be met.
|
THEN
|
In the THEN clause you specify the
statement(s) to be executed if this condition is met.
|
ELSE
|
In the (optional) ELSE clause, you can
specify the statement(s) to be executed if this condition is not
met.
|
So, an IF statement takes the following general
form:
IF condition THEN execute statement(s) ELSE execute other statement(s) END-IF
Note:
If you wish a certain processing to be performed only if the
IF condition is not met, you can specify the clause
THEN IGNORE. The IGNORE statement causes the
IF condition to be ignored if it is met.
** Example 'IFX01': IF
************************************************************************
DEFINE DATA LOCAL
1 MYVIEW VIEW OF EMPLOYEES
2 NAME
2 BIRTH
2 CITY
2 SALARY (1:1)
END-DEFINE
*
LIMIT 7
READ MYVIEW BY CITY STARTING FROM 'C'
IF SALARY (1) LT 40000 THEN
WRITE NOTITLE '*****' NAME 30X 'SALARY LT 40000'
ELSE
DISPLAY NAME BIRTH (EM=YYYY-MM-DD) SALARY (1)
END-IF
END-READ
END
The IF statement block in the above program causes the
following conditional processing to be performed:
IF the salary is less than 40000, THEN
the WRITE statement is
to be executed;
otherwise (ELSE), that is, if the salary is 40000
or more, the DISPLAY
statement is to be executed.
Output of Program IFX01:
NAME DATE ANNUAL
OF SALARY
BIRTH
-------------------- ---------- ----------
***** KEEN SALARY LT 40000
***** FORRESTER SALARY LT 40000
***** JONES SALARY LT 40000
***** MELKANOFF SALARY LT 40000
DAVENPORT 1948-12-25 42000
GEORGES 1949-10-26 182800
***** FULLERTON SALARY LT 40000
** Example 'IFX03': IF
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 CITY
2 BONUS (1,1)
2 SALARY (1)
*
1 #INCOME (N9)
1 #TEXT (A26)
END-DEFINE
*
WRITE TITLE '-- DISTRIBUTION OF CATALOGS I AND II --' /
*
READ (3) EMPLOY-VIEW BY CITY = 'SAN FRANCISCO'
COMPUTE #INCOME = BONUS(1,1) + SALARY(1)
/*
IF #INCOME > 40000
MOVE 'CATALOGS I AND II' TO #TEXT
ELSE
MOVE 'CATALOG I' TO #TEXT
END-IF
/*
DISPLAY NAME 5X 'SALARY' SALARY(1) / BONUS(1,1)
WRITE T*SALARY '-'(10) /
16X 'INCOME:' T*SALARY #INCOME 3X #TEXT /
16X '='(19)
SKIP 1
END-READ
END
Output of Program IFX03:
-- DISTRIBUTION OF CATALOGS I AND II --
NAME SALARY
BONUS
-------------------- ----------
COLVILLE JR 56000
0
----------
INCOME: 56000 CATALOGS I AND II
===================
RICHMOND 9150
0
----------
INCOME: 9150 CATALOG I
===================
MONKTON 13500
600
----------
INCOME: 14100 CATALOG I
===================
It is possible to use various nested IF statements; for example, you can
make the execution of a THEN clause dependent on another
IF statement which you specify in the
THEN clause.
** Example 'IFX02': IF (two IF statements nested)
************************************************************************
DEFINE DATA LOCAL
1 MYVIEW VIEW OF EMPLOYEES
2 NAME
2 CITY
2 SALARY (1:1)
2 BIRTH
2 PERSONNEL-ID
1 MYVIEW2 VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
*
1 #BIRTH (D)
END-DEFINE
*
MOVE EDITED '19450101' TO #BIRTH (EM=YYYYMMDD)
*
LIMIT 20
FND1. FIND MYVIEW WITH CITY = 'BOSTON'
SORTED BY NAME
IF SALARY (1) LESS THAN 20000
WRITE NOTITLE '*****' NAME 30X 'SALARY LT 20000'
ELSE
IF BIRTH GT #BIRTH
FIND MYVIEW2 WITH PERSONNEL-ID = PERSONNEL-ID (FND1.)
DISPLAY (IS=ON) NAME BIRTH (EM=YYYY-MM-DD)
SALARY (1) MAKE (AL=8 IS=OFF)
END-FIND
END-IF
END-IF
SKIP 1
END-FIND
END
Output of Program IFX02:
NAME DATE ANNUAL MAKE
OF SALARY
BIRTH
-------------------- ---------- ---------- --------
***** COHEN SALARY LT 20000
CREMER 1972-12-14 20000 FORD
***** FLEMING SALARY LT 20000
PERREAULT 1950-05-12 30500 CHRYSLER
***** SHAW SALARY LT 20000
STANWOOD 1946-09-08 31000 CHRYSLER
FORD