Any record in an indexed (or relative) file can be selected as the starting point for subsequent sequential read operations by means of START. START sets up a comparison via a relation condition in order to establish the (primary or secondary) key of the first record to be read.
The following example illustrates how the language extension (to ANS85) START...KEY LESS... and READ...PREVIOUS can be used to sequentially process an indexed file in reverse order, i.e. in the order of descending record keys, beginning with the highest key in the file. The precise location within a file is identified by means of a conceptual entity called the file position indicator.
Example 9-11
Processing an indexed file in reverse order
IDENTIFICATION DIVISION.
PROGRAM-ID. INDREV.
* INDREV PROCESSES THE RECORDSOF AN INDIVIDUAL FILE
* IN DESCENDING RECORD KEY ORDER.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
TERMINAL IS T.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IND-FILE
ASSIGN TO "INDFILE"
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
RECORD KEY IS REC-KEY.
DATA DIVISION.
FILE SECTION.
FD IND-FILE.
01 IND-REC.
05 REC-KEY PIC X(8).
05 REC-TEXT PIC X(72).
WORKING-STORAGE SECTION.
01 PROCESSING-SWITCH PIC X.
88 END-OF-PROCESSING VALUE "1".
PROCEDURE DIVISION.
INITIALIZTION.
OPEN I-O IND-FILE —————————————————————————————————————————(1)
MOVE HIGH-VALUE TO REC-KEY ————————————————————————————————(2)
MOVE "0" TO PROCESSING SWITCH.
PROCESS FILE.
START IND-FILE KEY LESS OR EQUAL REC-KEY
INVALID KEY
DISPLAY "FILE IS EMPTY" UPON T
SET END-OF-PROCESSING TO TRUE
NOT INVALID KEY
READ IND-FILE PREVIOUS ——————————————————————————————(3)
AT END
SET END-OF-PROCESSING TO TRUE
NOT AT END
DISPLAY "HIGHEST RECORD NUMBER: " REC-KEY
UPON T
PERFORM PROCESS-RECORD
END-READ
END-START
PERFORM WITH TEST BEFORE UNTIL END-OF-PROCESSING
READ IND-FILE PREVIOUS —————————————————————————————————(4)
AT END
SET END-OF-PROCESSING TO TRUE
NOT AT END
DISPLAY "NEXT RECORD KEY: " REC-KEY
UPON T
PERFORM PROCESS-RECORD
END-READ
END-PERFORM.
TERMINATION.
CLOSE IND-FILE
STOP RUN.
PROCESS-RECORD.
*
* PROCESSING OF CURRENT RECORD —————————————————————————————(5)
*
(1) | The file IND-FILE is opened for processing with OPEN I-O. |
(2) | To obtain the record with the highest key in the file,
|
(3) | READ...PREVIOUS reads the record to which the file position indicator was previously set by START. |
(4) | READ...PREVIOUS reads the record preceding the last record to be read. |
(5) | The read record is processed. If its RECORD KEY is changed during processing, the original value must be restored before the next START statement. |