In indizierten (wie auch in relativen) Dateien kann mit START auf jeden beliebigen Datensatz als Ausgangspunkt für nachfolgende sequenzielle Leseoperationen positioniert werden. Den Schlüssel (Primär- oder Sekundärschlüssel) des zuerst zu lesenden Satzes legt START dabei über eine Vergleichsbedingung fest.
Das folgende Beispiel zeigt, wie es mit Hilfe der Spracherweiterung (gegenüber ANS85) START...KEY LESS... und READ...PREVIOUS möglich ist, eine indizierte Datei sequenziell in umgekehrter Richtung zu verarbeiten; d.h. in der Reihenfolge absteigender Satzschlüssel, beginnend mit dem höchsten in der Datei vorhandenen Schlüssel:
Beispiel 9-11
Verarbeiten einer indizierten Datei in umgekehrter Richtung
IDENTIFICATION DIVISION.
PROGRAM-ID. INDREV.
* INDREV VERARBEITET DIE SAETZE EINER INDIZIERTEN DATEI
* IN DER FOLGE ABSTEIGENDER SATZSCHLUESSEL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
TERMINAL IS T.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IND-DATEI
ASSIGN TO "INDFILE"
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
RECORD KEY IS REC-KEY.
DATA DIVISION.
FILE SECTION.
FD IND-DATEI.
01 IND-SATZ.
05 REC-KEY PIC X(8).
05 REC-TEXT PIC X(72).
WORKING-STORAGE SECTION.
01 VERARBEITUNGS-SCHALTER PIC X.
88 VERARBEITUNGS-ENDE VALUE "1".
PROCEDURE DIVISION.
VORLAUF.
OPEN I-O IND-DATEI ————————————————————————————————————————(1)
MOVE HIGH-VALUE TO REC-KEY ————————————————————————————————(2)
MOVE "0" TO VERARBEITUNGS-SCHALTER.
DATEI-VERARBEITEN.
START IND-DATEI KEY LESS OR EQUAL REC-KEY
INVALID KEY
DISPLAY "DATEI IST LEER" UPON T
SET VERARBEITUNGS-ENDE TO TRUE
NOT INVALID KEY
READ IND-DATEI PREVIOUS —————————————————————————————(3)
AT END
SET VERARBEITUNGS-ENDE TO TRUE
NOT AT END
DISPLAY "HOECHSTER SATZSCHLUESSEL: " REC-KEY
UPON T
PERFORM SATZ-VERARBEITEN
END-READ
END-START
PERFORM WITH TEST BEFORE UNTIL VERARBEITUNGS-ENDE
READ IND-DATEI PREVIOUS ————————————————————————————————(4)
AT END
SET VERARBEITUNGS-ENDE TO TRUE
NOT AT END
DISPLAY "NAECHSTER SATZSCHLUESSEL: " REC-KEY
UPON T
PERFORM SATZ-VERARBEITEN
END-READ
END-PERFORM.
NACHLAUF.
CLOSE IND-DATEI
STOP RUN.
SATZ-VERARBEITEN.
*
* VERARBEITUNG DES AKTUELLEN SATZES ————————————————————————(5)
*
(1) | Für die Verarbeitung wird die Datei IND-DATEI mit OPEN I-O eröffnet. |
(2) | Um den Satz mit dem höchsten Schlüssel in der Datei zu erhalten, wird
|
(3) | READ...PREVIOUS liest den Satz ein, auf den zuvor mit START positioniert wurde. |
(4) | READ...PREVIOUS liest den Vorgänger des zuletzt gelesenen Satzes. |
(5) | Der eingelesene Satz wird verarbeitet. Falls sein RECORD KEY dabei verändert wird, muss dessen ursprünglicher Wert vor der folgenden START-Anweisung wiederhergestellt werden. |