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:

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
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).
Definieren Sie das Ende der Verarbeitungsschleife, indem Sie Folgendes vor dem
END-Statement eingeben:
END-REPEAT
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.
Führen Sie das Programm mit RUN aus.
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.
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.
Speichern Sie das Programm mit STOW.
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
Geben Sie das Label RD1. am Anfang der Zeile ein, die das
READ-Statement enthält:
RD1. READ EMPLOYEES-VIEW BY NAME
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
Führen Sie das Programm mit RUN aus.
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.
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.
Speichern Sie das Programm mit STOW.
Sie können nun mit den nächsten Übungen fortfahren: Interne Subroutinen.