Verarbeitungsschleifen und Labels

#### Search Results

Search

# Verarbeitungsschleifen und Labels

Sie werden Ihr Programm jetzt erweitern, indem Sie Verarbeitungsschleifen und Labels hinzufügen.

Wenn Sie mit den Übungen in diesem Abschnitt fertig sind, wird Ihre Beispielanwendung immer noch aus denselben Modulen wie im vorherigen Abschnitt bestehen:

- Wiederholte Benutzung erlauben

- Meldung für nicht gefundene Informationen anzeigen

## Wiederholte Benutzung erlauben

So wie Ihr Programm jetzt aufgebaut ist, wird es sofort nach dem Anzeigen der Map und dem Anzeigen der Mitarbeiterliste beendet. Damit der Benutzer sofort wieder eine neue Mitarbeiterliste anzeigen kann, ohne das Programm neu zu starten, werden Sie den entsprechenden Programmcode nun in eine `REPEAT`-Schleife setzen.

Verarbeitungsschleife definieren

1. Geben Sie Folgendes unter `END-DEFINE` ein:

       RP1. REPEAT

   `REPEAT` definiert den Beginn der Verarbeitungsschleife. `RP1.` ist ein Label, das beim Verlassen der Verarbeitungsschleife benutzt wird (dies wird weiter unten definiert).

2. Definieren Sie das Ende der Verarbeitungsschleife, indem Sie Folgendes vor dem `END`-Statement eingeben:

       END-REPEAT

3. Geben Sie Folgendes unter `INPUT USING MAP 'MAP01'` ein:

       IF #NAME-START = '.' THEN
         ESCAPE BOTTOM (RP1.)
       END-IF

   Das `IF`-Statement, das mit `END-IF` beendet werden muss, prüft den Inhalt des Feldes `#NAME-START`. Wenn ein Punkt (.) in diesem Feld eingeben wird, wird das Statement `ESCAPE BOTTOM` zum Verlassen der Schleife benutzt. Die Verarbeitung wird mit dem ersten Statement nach der Schleife fortgesetzt (in diesem Fall ist das `END`).

   Indem Sie einer Schleife ein Label zuordnen (hier ist es `RP1.`), können Sie sich mit dem Statement `ESCAPE BOTTOM` auf diese Schleife beziehen. Da Schleifen geschachtelt werden können, sollten Sie angeben, welche Schleife Sie verlassen möchten. Andernfalls wird nur die innerste aktive Schleife verlassen.

   Ihr Programm sollte nun folgendermaßen aussehen:

       DEFINE DATA
       LOCAL
         1 #NAME-START        (A20)
         1 #NAME-END          (A20)
         1 EMPLOYEES-VIEW VIEW OF EMPLOYEES
           2 FULL-NAME
             3 NAME (A20)
           2 DEPT (A6)
           2 LEAVE-DATA
             3 LEAVE-DUE (N2)
       END-DEFINE
       *
       RP1. REPEAT
       *
         INPUT USING MAP 'MAP01'
       *
         IF #NAME-START = '.' THEN
           ESCAPE BOTTOM (RP1.)
         END-IF
       *
         IF #NAME-END = ' ' THEN
           MOVE #NAME-START TO #NAME-END
         END-IF
       *
         READ EMPLOYEES-VIEW BY NAME
           STARTING FROM #NAME-START
           ENDING AT #NAME-END
       *
           DISPLAY NAME 3X DEPT 3X LEAVE-DUE
       *
         END-READ
       *
       END-REPEAT
       *
       END

   Anmerkung
   Zur besseren Lesbarkeit wurde der Inhalt der `REPEAT`-Schleife eingerückt.

4. Führen Sie das Programm mit `RUN` aus.

5. Geben Sie in der daraufhin erscheinenden Map "JONES" in dem Feld für den Startnamen ein und drücken Sie EINGABE.

   In der daraufhin erscheinenden Liste werden nur die Mitarbeiter mit dem Namen "Jones" angezeigt. Drücken Sie EINGABE. Wegen der `REPEAT`-Schleife wird die Map wieder angezeigt. Sie können nun sehen, dass "JONES" als Endname eingetragen wurde.

6. Geben Sie einen Punkt (.) in dem Feld für den Startnamen ein und drücken Sie EINGABE, um die Map zu verlassen. Vergessen Sie nicht, die restlichen Zeichen des Namens zu löschen, der noch in diesem Feld angezeigt wird.

7. Speichern Sie das Programm mit `STOW`.

## Meldung für nicht gefundene Informationen anzeigen

Sie werden jetzt die Meldung definieren, die angezeigt werden soll, wenn der Benutzer einen Startnamen angibt, der in der Datenbank nicht gefunden werden kann.

Meldung für nicht gefundene Mitarbeiter definieren

1. Geben Sie das Label `RD1.` am Anfang der Zeile ein, die das `READ`-Statement enthält:

       RD1. READ EMPLOYEES-VIEW BY NAME

2. Geben Sie Folgendes unter `END-READ` ein:

       IF *COUNTER (RD1.) = 0 THEN
          REINPUT 'No employees meet your criteria.'
       END-IF

   Mit der Systemvariablen `*COUNTER` wird die Anzahl der Datensätze geprüft, die in der `READ`-Schleife gefunden werden. Wenn der Inhalt gleich 0 ist (d.h. wenn ein Mitarbeiter mit dem angegebenen Namen nicht gefunden wurde), wird die Meldung, die mit dem `REINPUT`-Statement definiert wurde, unten in der Map angezeigt.

   Um die `READ`-Schleife zu bezeichnen, geben Sie ihr ein Label (in diesem Fall ist es `RD1.`). Da ein komplexes Datenbankzugriffsprogramm viele Schleifen enthalten kann, müssen Sie angeben, auf welche Schleife Sie sich beziehen.

   Ihr Programm sollte nun folgendermaßen aussehen:

       DEFINE DATA
       LOCAL
         1 #NAME-START        (A20)
         1 #NAME-END          (A20)
         1 EMPLOYEES-VIEW VIEW OF EMPLOYEES
           2 FULL-NAME
             3 NAME (A20)
           2 DEPT (A6)
           2 LEAVE-DATA
             3 LEAVE-DUE (N2)
       END-DEFINE
       *
       RP1. REPEAT
       *
         INPUT USING MAP 'MAP01'
       *
         IF #NAME-START = '.' THEN
           ESCAPE BOTTOM (RP1.)
         END-IF
       *
         IF #NAME-END = ' ' THEN
           MOVE #NAME-START TO #NAME-END
         END-IF
       *
         RD1. READ EMPLOYEES-VIEW BY NAME
           STARTING FROM #NAME-START
           ENDING AT #NAME-END
       *
           DISPLAY NAME 3X DEPT 3X LEAVE-DUE
       *
         END-READ
       *
         IF *COUNTER (RD1.) = 0 THEN
           REINPUT 'No employees meet your criteria.'
         END-IF
       *
       END-REPEAT
       *
       END

3. Führen Sie das Programm mit `RUN` aus.

4. Geben Sie in der daraufhin erscheinenden Map einen Startnamen ein, der nicht in der Demodatenbank definiert ist (zum Beispiel "XYZ") und drücken Sie EINGABE.

   Ihre Meldung sollte jetzt in der Map angezeigt werden.

5. Geben Sie einen Punkt (.) in dem Feld für den Startnamen ein und drücken Sie EINGABE, um die Map zu verlassen. Vergessen Sie nicht, die restlichen Zeichen des Namens zu löschen, der noch in diesem Feld angezeigt wird.

6. Speichern Sie das Programm mit `STOW`.

Sie können nun mit den nächsten Übungen fortfahren: Interne Subroutinen.

### On this page

- Wiederholte Benutzung erlauben
- Meldung für nicht gefundene Informationen anzeigen