COBOL Tutorial

COBOL FILE STATUS

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.

FILE STATUS Syntax

cobol
1
2
3
4
5
6
7
8
9
10
11
ENVIRONMENT 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

Complete FILE STATUS Implementation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
IDENTIFICATION 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.

Common FILE STATUS Codes

Status Checking Best Practices

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
WORKING-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

Key Points

  • Always define FILE STATUS: Add FILE STATUS clause to every SELECT statement
  • Check after every operation: Verify status after OPEN, CLOSE, READ, WRITE, REWRITE, DELETE, START
  • Use condition names: 88-level condition names make code more readable
  • Handle all categories: Check for success (00), at-end (1x), invalid key (2x), errors (3x, 4x, 9x)
  • Different status per file: Each file should have its own status variable
  • Status is automatic: COBOL updates the status field automatically - you don't need to reset it
  • Two-character field: Status must be defined as PIC XX (alphanumeric) or PIC 99 (numeric)