The FILE STATUS clause provides a mechanism for COBOL programs to determine the result of file operations. After each file I/O statement executes, COBOL automatically updates a two-character status field, enabling programs to detect success, errors, end-of-file conditions, and other exceptional situations. This is essential for robust error handling and reliable file processing in production applications.
1234567891011ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT file-name ASSIGN TO 'filename' ORGANIZATION IS SEQUENTIAL FILE STATUS IS status-variable. *> FILE STATUS IS: Required clause *> status-variable: Two-character alphanumeric field *> Automatically updated after each file operation
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081IDENTIFICATION DIVISION. PROGRAM-ID. FILE-STATUS-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO 'CUSTOMER.DAT' ORGANIZATION IS SEQUENTIAL FILE STATUS IS CUSTOMER-STATUS. SELECT ACCOUNT-FILE ASSIGN TO 'ACCOUNT.DAT' ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS ACCOUNT-KEY FILE STATUS IS ACCOUNT-STATUS. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE RECORD CONTAINS 100 CHARACTERS. 01 CUSTOMER-RECORD PIC X(100). FD ACCOUNT-FILE RECORD CONTAINS 80 CHARACTERS. 01 ACCOUNT-RECORD. 05 ACCOUNT-KEY PIC 9(8). 05 ACCOUNT-DATA PIC X(72). WORKING-STORAGE SECTION. *> File status variables 01 CUSTOMER-STATUS PIC XX. 01 ACCOUNT-STATUS PIC XX. *> Condition names for readable status checking 01 FILE-STATUS-CODES. 05 STATUS-CODE PIC XX. 88 FILE-OK VALUE '00'. 88 FILE-AT-END VALUE '10'. 88 FILE-DUPLICATE VALUE '22'. 88 FILE-NOT-FOUND VALUE '23'. 88 FILE-NOT-OPEN VALUE '42'. 88 FILE-ERROR VALUE '30' THRU '99'. PROCEDURE DIVISION. MAIN-PROCESSING. *> Open file and check status OPEN INPUT CUSTOMER-FILE MOVE CUSTOMER-STATUS TO STATUS-CODE IF NOT FILE-OK DISPLAY 'ERROR OPENING FILE: ' CUSTOMER-STATUS STOP RUN END-IF *> Read records with status checking PERFORM UNTIL FILE-AT-END READ CUSTOMER-FILE AT END CONTINUE NOT AT END MOVE CUSTOMER-STATUS TO STATUS-CODE IF FILE-OK *> Process record DISPLAY 'RECORD READ: ' CUSTOMER-RECORD(1:20) ELSE DISPLAY 'READ ERROR: ' CUSTOMER-STATUS EXIT PERFORM END-IF END-READ END-PERFORM *> Close file CLOSE CUSTOMER-FILE MOVE CUSTOMER-STATUS TO STATUS-CODE IF NOT FILE-OK DISPLAY 'ERROR CLOSING FILE: ' CUSTOMER-STATUS END-IF STOP RUN.
1234567891011121314151617181920212223242526272829303132333435363738394041WORKING-STORAGE SECTION. *> Define status variable 01 FILE-STATUS-CODE PIC XX. *> Use 88-level condition names for readability 01 STATUS-VALUES. 05 STATUS-CODE PIC XX. 88 SUCCESS VALUE '00'. 88 AT-END VALUE '10'. 88 DUPLICATE-KEY VALUE '22'. 88 NOT-FOUND VALUE '23'. 88 FILE-NOT-FOUND VALUE '35'. 88 FILE-NOT-OPEN VALUE '42'. 88 ANY-ERROR VALUE '01' THRU '99' EXCEPT '00' '10'. PROCEDURE DIVISION. *> Always check status after file operations OPEN INPUT CUSTOMER-FILE MOVE CUSTOMER-STATUS TO STATUS-CODE EVALUATE TRUE WHEN SUCCESS DISPLAY 'FILE OPENED SUCCESSFULLY' WHEN FILE-NOT-FOUND DISPLAY 'ERROR: FILE NOT FOUND' STOP RUN WHEN ANY-ERROR DISPLAY 'ERROR: ' STATUS-CODE STOP RUN END-EVALUATE *> Check status after every READ READ CUSTOMER-FILE MOVE CUSTOMER-STATUS TO STATUS-CODE IF AT-END DISPLAY 'END OF FILE REACHED' ELSE IF NOT SUCCESS DISPLAY 'READ ERROR: ' STATUS-CODE STOP RUN END-IF