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