Bedingte Verarbeitung — das IF-Statement

#### Search Results

Search

# Bedingte Verarbeitung — das IF-Statement

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:

- Struktur des IF-Statements

- Geschachtelte IF-Statements

## Struktur des IF-Statements

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.

#### Beispiel 1:

    ** 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

#### Beispiel 2:

    ** 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
                    ===================

## Geschachtelte IF-Statements

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.

#### Beispiel:

    ** 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

### On this page

- Struktur des IF-Statements
- Geschachtelte IF-Statements