The END-START statement represents a fundamental component of file positioning and sequential access operations in COBOL, serving as an explicit scope terminator that clearly defines the boundaries of START statement blocks. This statement embodies modern file processing principles by providing unambiguous termination points for file positioning operations, enabling sophisticated sequential access patterns for indexed files, and supporting the development of efficient data processing applications that require precise control over file cursor positioning and record access sequences.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153IDENTIFICATION DIVISION. PROGRAM-ID. END-START-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO 'EMPLOYEES.DAT' ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS EMP-ID ALTERNATE RECORD KEY IS EMP-DEPT WITH DUPLICATES FILE STATUS IS EMP-FILE-STATUS. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC X(10). 05 EMP-NAME PIC X(30). 05 EMP-DEPT PIC X(15). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC X(8). WORKING-STORAGE SECTION. 01 FILE-STATUS-CONTROLS. 05 EMP-FILE-STATUS PIC XX. 88 FILE-OK VALUE '00'. 88 RECORD-NOT-FOUND VALUE '23'. 88 END-OF-FILE VALUE '10'. 88 FILE-ERROR VALUE '01' THRU '09', '11' THRU '22', '24' THRU '99'. 01 POSITIONING-CONTROLS. 05 START-KEY PIC X(15). 05 POSITION-TYPE PIC X(10). 05 RECORDS-READ PIC 9(7) VALUE 0. 05 SUCCESSFUL-STARTS PIC 9(5) VALUE 0. 05 FAILED-STARTS PIC 9(5) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-FILE-PROCESSING PERFORM DEMONSTRATE-BASIC-POSITIONING PERFORM DEMONSTRATE-RANGE-PROCESSING PERFORM DEMONSTRATE-ALTERNATE-KEY-POSITIONING PERFORM FINALIZE-FILE-PROCESSING STOP RUN. INITIALIZE-FILE-PROCESSING. OPEN INPUT EMPLOYEE-FILE IF NOT FILE-OK DISPLAY 'Error opening file: ' EMP-FILE-STATUS STOP RUN END-IF. DEMONSTRATE-BASIC-POSITIONING. DISPLAY 'Demonstrating basic file positioning...' *> Position at specific employee ID MOVE 'EMP005' TO EMP-ID START EMPLOYEE-FILE KEY IS EQUAL TO EMP-ID INVALID KEY DISPLAY 'Employee not found: ' EMP-ID ADD 1 TO FAILED-STARTS NOT INVALID KEY DISPLAY 'Positioned at employee: ' EMP-ID PERFORM READ-SEQUENTIAL-FROM-POSITION ADD 1 TO SUCCESSFUL-STARTS END-START. READ-SEQUENTIAL-FROM-POSITION. PERFORM 5 TIMES READ EMPLOYEE-FILE NEXT RECORD AT END DISPLAY 'End of file reached' EXIT PERFORM NOT AT END DISPLAY 'Read: ' EMP-ID ' - ' EMP-NAME ADD 1 TO RECORDS-READ END-READ END-PERFORM. DEMONSTRATE-RANGE-PROCESSING. DISPLAY 'Demonstrating range processing...' *> Position at start of range MOVE 'EMP010' TO EMP-ID START EMPLOYEE-FILE KEY IS GREATER THAN OR EQUAL TO EMP-ID INVALID KEY DISPLAY 'No records found >= ' EMP-ID ADD 1 TO FAILED-STARTS NOT INVALID KEY DISPLAY 'Positioned for range starting at: ' EMP-ID PERFORM PROCESS-RANGE-RECORDS ADD 1 TO SUCCESSFUL-STARTS END-START. PROCESS-RANGE-RECORDS. PERFORM UNTIL END-OF-FILE READ EMPLOYEE-FILE NEXT RECORD AT END DISPLAY 'Range processing completed' EXIT PERFORM NOT AT END IF EMP-ID > 'EMP020' DISPLAY 'End of range reached' EXIT PERFORM END-IF DISPLAY 'Range record: ' EMP-ID ' - ' EMP-NAME ADD 1 TO RECORDS-READ END-READ END-PERFORM. DEMONSTRATE-ALTERNATE-KEY-POSITIONING. DISPLAY 'Demonstrating alternate key positioning...' *> Position by department MOVE 'IT' TO EMP-DEPT START EMPLOYEE-FILE KEY IS EQUAL TO EMP-DEPT INVALID KEY DISPLAY 'Department not found: ' EMP-DEPT ADD 1 TO FAILED-STARTS NOT INVALID KEY DISPLAY 'Positioned at department: ' EMP-DEPT PERFORM READ-DEPARTMENT-RECORDS ADD 1 TO SUCCESSFUL-STARTS END-START. READ-DEPARTMENT-RECORDS. PERFORM UNTIL END-OF-FILE READ EMPLOYEE-FILE NEXT RECORD AT END DISPLAY 'Department processing completed' EXIT PERFORM NOT AT END IF EMP-DEPT NOT = 'IT' DISPLAY 'End of department reached' EXIT PERFORM END-IF DISPLAY 'IT Employee: ' EMP-ID ' - ' EMP-NAME ADD 1 TO RECORDS-READ END-READ END-PERFORM. FINALIZE-FILE-PROCESSING. CLOSE EMPLOYEE-FILE DISPLAY 'Processing Statistics:' DISPLAY 'Records read: ' RECORDS-READ DISPLAY 'Successful starts: ' SUCCESSFUL-STARTS DISPLAY 'Failed starts: ' FAILED-STARTS.