Mit dem IF
-Statement können Sie eine
logische Bedingung definieren und Statements angeben, die in Abhängigkeit von
dieser logischen Bedingung verarbeitet werden sollen.
Dieses Dokument behandelt folgende Themen:
Das IF
-Statement hat drei Bestandteile:
IF
, THEN
und ELSE
.
IF
|
Mit der IF -Klausel geben Sie eine logische
Bedingung an, die erfüllt werden soll.
|
---|---|
THEN
|
Mit der THEN -Klausel geben Sie die
Statements an, die ausgeführt werden sollen, wenn diese Bedingung erfüllt
wird.
|
ELSE
|
Mit der (wahlweise verwendbaren)
ELSE -Klausel haben Sie zusätzlich die Möglichkeit, Statements
anzugeben, die ausgeführt werden sollen, wenn die Bedingung nicht
erfüllt wird.
|
Ein IF
-Statement hat also folgende allgemeine Form:
IF condition THEN execute statement(s) ELSE execute other statement(s) END-IF
Anmerkung:
Falls Sie wünschen, dass eine bestimmte Verarbeitung nur
ausgeführt werden soll, wenn eine IF
-Bedingung nicht
erfüllt wird, können Sie die Klausel THEN IGNORE
verwenden, d.h.
das IGNORE
-Statement
bewirkt, dass die IF
-Bedingung ignoriert wird, wenn sie erfüllt
wird.
** 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
Der IF
-Statement-Block im obigen Programm bewirkt
folgende bedingte Verarbeitung:
Wenn (IF
) das Gehalt weniger als 40000
beträgt, dann (THEN
) soll das WRITE
-Statement ausgeführt
werden;
andernfalls (ELSE
), d.h. wenn das Gehalt
40000
und mehr beträgt, soll das DISPLAY
-Statement ausgeführt
werden.
Ausgabe des Programms 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 FRANSISCO' 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
Ausgabe des Programms 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 ===================
Es ist möglich, mehrere IF
-Statements ineinander zu
verschachteln, zum Beispiel, indem Sie die Ausführung einer
THEN
-Klausel durch ein weiteres, in der THEN
-Klausel
angegebenes IF
-Statement von einer zusätzlichen Bedingung abhängig
machen.
** 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
Ausgabe des Programms 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