The START statement in COBOL positions a file at a specific record based on a key value, without reading that record. START is used with indexed and relative files to position the file pointer at a record matching specified key criteria. After START, subsequent READ operations begin from that position, enabling efficient positioned access and sequential processing from specific key values.
START is essential for indexed file processing when you need to begin reading from a specific key value rather than from the beginning of the file. Understanding START is crucial for efficient file navigation and positioned sequential access in COBOL programs.
12345START file-name KEY IS {EQUAL TO | GREATER THAN | NOT LESS THAN} key-value [INVALID KEY statements] [NOT INVALID KEY statements] END-START
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL RECORD KEY IS CUSTOMER-ID FILE STATUS IS FILE-STATUS-CODE. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(8). 05 CUSTOMER-NAME PIC X(30). WORKING-STORAGE SECTION. 01 FILE-STATUS-CODE PIC X(2). 01 SEARCH-KEY PIC 9(8) VALUE 50000000. PROCEDURE DIVISION. MAIN-LOGIC. OPEN INPUT CUSTOMER-FILE *> Position file at customer ID 50000000 START CUSTOMER-FILE KEY IS GREATER THAN SEARCH-KEY INVALID KEY DISPLAY "No records found with key > " SEARCH-KEY NOT INVALID KEY DISPLAY "Positioned at key > " SEARCH-KEY *> Read records sequentially from this position PERFORM READ-SEQUENTIAL-RECORDS END-START CLOSE CUSTOMER-FILE STOP RUN. READ-SEQUENTIAL-RECORDS. PERFORM UNTIL FILE-STATUS-CODE = "10" READ CUSTOMER-FILE NEXT RECORD AT END CONTINUE NOT AT END DISPLAY "Customer: " CUSTOMER-ID " " CUSTOMER-NAME END-READ END-PERFORM.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465IDENTIFICATION DIVISION. PROGRAM-ID. START-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PRODUCT-FILE ASSIGN TO "PRODUCT.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS PRODUCT-CODE FILE STATUS IS FILE-STATUS-CODE. DATA DIVISION. FILE SECTION. FD PRODUCT-FILE. 01 PRODUCT-RECORD. 05 PRODUCT-CODE PIC X(10). 05 PRODUCT-NAME PIC X(30). 05 PRODUCT-PRICE PIC 9(6)V99. WORKING-STORAGE SECTION. 01 FILE-STATUS-CODE PIC X(2). 01 START-KEY PIC X(10) VALUE "PROD-0500". 01 RECORD-COUNT PIC 9(4) VALUE 0. PROCEDURE DIVISION. MAIN-LOGIC. DISPLAY "=== START Statement Example ===" OPEN INPUT PRODUCT-FILE IF FILE-STATUS-CODE = "00" *> Position at products starting with PROD-0500 START PRODUCT-FILE KEY IS NOT LESS THAN START-KEY INVALID KEY DISPLAY "No products found starting at " START-KEY NOT INVALID KEY DISPLAY "Positioned at products >= " START-KEY PERFORM READ-PRODUCTS-FROM-POSITION END-START ELSE DISPLAY "ERROR: Cannot open file. Status: " FILE-STATUS-CODE END-IF CLOSE PRODUCT-FILE DISPLAY "Records processed: " RECORD-COUNT STOP RUN. READ-PRODUCTS-FROM-POSITION. PERFORM UNTIL FILE-STATUS-CODE = "10" READ PRODUCT-FILE NEXT RECORD AT END CONTINUE NOT AT END IF FILE-STATUS-CODE = "00" ADD 1 TO RECORD-COUNT DISPLAY "Product: " PRODUCT-CODE " " PRODUCT-NAME " $" PRODUCT-PRICE ELSE DISPLAY "Read error. Status: " FILE-STATUS-CODE EXIT PERFORM END-IF END-READ END-PERFORM.
Think of START like using a bookmark:
So START is like bookmarking a specific place in a file, then reading from there!
1. What does START do?
2. What file types can use START?
3. What key operators can you use with START?
4. What should you do if START doesn't find a match?