OPEN

Overview

The OPEN statement in COBOL is used to make files available for processing by establishing a connection between the program and the external file. It specifies the access mode (INPUT, OUTPUT, I-O, or EXTEND) and prepares the file for subsequent read, write, or update operations. Proper file opening is essential for all file processing operations.

Syntax

OPEN { INPUT  } file-name-1 [file-name-2] ...
     { OUTPUT }
     { I-O    }
     { EXTEND }
     
*> Multiple modes in one statement
OPEN INPUT file-name-1 [file-name-2] ...
     OUTPUT file-name-3 [file-name-4] ...
     I-O file-name-5 [file-name-6] ...
     EXTEND file-name-7 [file-name-8] ...

Access Modes

INPUT

Read-only access to existing files

OUTPUT

Write-only access, creates new file or overwrites existing

I-O

Read and write access for updating records

EXTEND

Write-only access, appends to end of existing file

Basic File Opening

INPUT Mode

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT"
        ORGANIZATION IS SEQUENTIAL
        ACCESS MODE IS SEQUENTIAL
        FILE STATUS IS WS-CUST-STATUS.
        
    SELECT TRANSACTION-FILE ASSIGN TO "TRANS.DAT"
        ORGANIZATION IS SEQUENTIAL
        ACCESS MODE IS SEQUENTIAL
        FILE STATUS IS WS-TRANS-STATUS.

DATA DIVISION.
FILE SECTION.
FD  CUSTOMER-FILE.
01  CUSTOMER-RECORD.
    05  CUST-ID         PIC X(8).
    05  CUST-NAME       PIC X(30).
    05  CUST-BALANCE    PIC S9(8)V99.

FD  TRANSACTION-FILE.
01  TRANSACTION-RECORD.
    05  TRANS-ID        PIC X(10).
    05  TRANS-TYPE      PIC X(8).
    05  TRANS-AMOUNT    PIC S9(6)V99.

WORKING-STORAGE SECTION.
01  WS-FILE-STATUS.
    05  WS-CUST-STATUS  PIC XX.
    05  WS-TRANS-STATUS PIC XX.

PROCEDURE DIVISION.
OPEN-INPUT-FILES.
    OPEN INPUT CUSTOMER-FILE.
    IF WS-CUST-STATUS NOT = "00"
        DISPLAY "ERROR OPENING CUSTOMER FILE: " WS-CUST-STATUS
        PERFORM ERROR-ROUTINE
        STOP RUN
    END-IF.
    
    OPEN INPUT TRANSACTION-FILE.
    IF WS-TRANS-STATUS NOT = "00"
        DISPLAY "ERROR OPENING TRANSACTION FILE: " WS-TRANS-STATUS
        CLOSE CUSTOMER-FILE
        PERFORM ERROR-ROUTINE
        STOP RUN
    END-IF.
    
    DISPLAY "INPUT FILES OPENED SUCCESSFULLY".

Opening files for read-only access with error checking.

OUTPUT Mode

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT REPORT-FILE ASSIGN TO "REPORT.TXT"
        ORGANIZATION IS SEQUENTIAL
        ACCESS MODE IS SEQUENTIAL
        FILE STATUS IS WS-REPORT-STATUS.
        
    SELECT ERROR-LOG ASSIGN TO "ERROR.LOG"
        ORGANIZATION IS SEQUENTIAL
        ACCESS MODE IS SEQUENTIAL
        FILE STATUS IS WS-ERROR-STATUS.

DATA DIVISION.
FILE SECTION.
FD  REPORT-FILE.
01  REPORT-RECORD       PIC X(132).

FD  ERROR-LOG.
01  ERROR-RECORD        PIC X(80).

WORKING-STORAGE SECTION.
01  WS-FILE-STATUS.
    05  WS-REPORT-STATUS PIC XX.
    05  WS-ERROR-STATUS  PIC XX.

PROCEDURE DIVISION.
CREATE-OUTPUT-FILES.
    OPEN OUTPUT REPORT-FILE.
    IF WS-REPORT-STATUS NOT = "00"
        DISPLAY "ERROR CREATING REPORT FILE: " WS-REPORT-STATUS
        PERFORM ERROR-ROUTINE
        STOP RUN
    END-IF.
    
    OPEN OUTPUT ERROR-LOG.
    IF WS-ERROR-STATUS NOT = "00"
        DISPLAY "ERROR CREATING ERROR LOG: " WS-ERROR-STATUS
        CLOSE REPORT-FILE
        PERFORM ERROR-ROUTINE
        STOP RUN
    END-IF.
    
    DISPLAY "OUTPUT FILES CREATED SUCCESSFULLY".

Creating new files for write-only access.

I-O and EXTEND Modes

I-O Mode for Updates

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT MASTER-FILE ASSIGN TO "MASTER.DAT"
        ORGANIZATION IS INDEXED
        ACCESS MODE IS RANDOM
        RECORD KEY IS MASTER-KEY
        FILE STATUS IS WS-MASTER-STATUS.

DATA DIVISION.
FILE SECTION.
FD  MASTER-FILE.
01  MASTER-RECORD.
    05  MASTER-KEY      PIC X(8).
    05  MASTER-DATA     PIC X(72).
    05  LAST-UPDATE     PIC 9(8).

WORKING-STORAGE SECTION.
01  WS-MASTER-STATUS   PIC XX.
01  WS-SEARCH-KEY      PIC X(8).
01  WS-UPDATE-DATA     PIC X(72).

PROCEDURE DIVISION.
OPEN-FOR-UPDATE.
    OPEN I-O MASTER-FILE.
    IF WS-MASTER-STATUS NOT = "00"
        DISPLAY "ERROR OPENING MASTER FILE FOR UPDATE: " WS-MASTER-STATUS
        PERFORM ERROR-ROUTINE
        STOP RUN
    END-IF.
    
    DISPLAY "MASTER FILE OPENED FOR READ/WRITE ACCESS".

UPDATE-MASTER-RECORD.
    MOVE "CUST001" TO WS-SEARCH-KEY.
    MOVE WS-SEARCH-KEY TO MASTER-KEY.
    
    READ MASTER-FILE
        INVALID KEY
            DISPLAY "RECORD NOT FOUND: " WS-SEARCH-KEY
        NOT INVALID KEY
            DISPLAY "UPDATING RECORD: " MASTER-KEY
            MOVE WS-UPDATE-DATA TO MASTER-DATA
            ACCEPT LAST-UPDATE FROM DATE YYYYMMDD
            
            REWRITE MASTER-RECORD
                INVALID KEY
                    DISPLAY "ERROR UPDATING RECORD: " WS-MASTER-STATUS
                NOT INVALID KEY
                    DISPLAY "RECORD UPDATED SUCCESSFULLY"
            END-REWRITE
    END-READ.

Opening files for both read and write operations.

EXTEND Mode for Appending

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT AUDIT-LOG ASSIGN TO "AUDIT.LOG"
        ORGANIZATION IS SEQUENTIAL
        ACCESS MODE IS SEQUENTIAL
        FILE STATUS IS WS-AUDIT-STATUS.
        
    SELECT TRANSACTION-LOG ASSIGN TO "TRANS.LOG"
        ORGANIZATION IS SEQUENTIAL
        ACCESS MODE IS SEQUENTIAL
        FILE STATUS IS WS-TRANS-LOG-STATUS.

DATA DIVISION.
FILE SECTION.
FD  AUDIT-LOG.
01  AUDIT-RECORD.
    05  AUDIT-TIMESTAMP PIC X(14).
    05  AUDIT-USER      PIC X(8).
    05  AUDIT-ACTION    PIC X(20).
    05  AUDIT-DETAILS   PIC X(50).

FD  TRANSACTION-LOG.
01  TRANS-LOG-RECORD.
    05  LOG-DATE        PIC 9(8).
    05  LOG-TIME        PIC 9(6).
    05  LOG-MESSAGE     PIC X(100).

WORKING-STORAGE SECTION.
01  WS-AUDIT-STATUS       PIC XX.
01  WS-TRANS-LOG-STATUS   PIC XX.

PROCEDURE DIVISION.
OPEN-LOG-FILES.
    OPEN EXTEND AUDIT-LOG.
    IF WS-AUDIT-STATUS NOT = "00"
        DISPLAY "ERROR OPENING AUDIT LOG: " WS-AUDIT-STATUS
        PERFORM ERROR-ROUTINE
        STOP RUN
    END-IF.
    
    OPEN EXTEND TRANSACTION-LOG.
    IF WS-TRANS-LOG-STATUS NOT = "00"
        DISPLAY "ERROR OPENING TRANSACTION LOG: " WS-TRANS-LOG-STATUS
        CLOSE AUDIT-LOG
        PERFORM ERROR-ROUTINE
        STOP RUN
    END-IF.
    
    DISPLAY "LOG FILES OPENED FOR APPEND".

WRITE-AUDIT-ENTRY.
    ACCEPT AUDIT-TIMESTAMP FROM TIMESTAMP.
    MOVE "SYSTEM" TO AUDIT-USER.
    MOVE "FILE_OPENED" TO AUDIT-ACTION.
    MOVE "Application started successfully" TO AUDIT-DETAILS.
    
    WRITE AUDIT-RECORD.
    IF WS-AUDIT-STATUS NOT = "00"
        DISPLAY "ERROR WRITING AUDIT RECORD: " WS-AUDIT-STATUS
    ELSE
        DISPLAY "AUDIT ENTRY WRITTEN"
    END-IF.

Appending to existing files using EXTEND mode.

Multiple File Operations

Opening Multiple Files

PROCEDURE DIVISION.
OPEN-ALL-FILES.
    *> Open multiple files with different modes in one statement
    OPEN INPUT CUSTOMER-FILE
               PRODUCT-FILE
               PRICE-FILE
         OUTPUT REPORT-FILE
                SUMMARY-FILE
         I-O    MASTER-FILE
                INVENTORY-FILE
         EXTEND AUDIT-LOG
                ERROR-LOG.
                
    *> Check all file statuses
    PERFORM CHECK-FILE-STATUS.

CHECK-FILE-STATUS.
    IF WS-CUSTOMER-STATUS NOT = "00"
        DISPLAY "CUSTOMER FILE ERROR: " WS-CUSTOMER-STATUS
        PERFORM CLOSE-ALL-FILES
        STOP RUN
    END-IF.
    
    IF WS-PRODUCT-STATUS NOT = "00"
        DISPLAY "PRODUCT FILE ERROR: " WS-PRODUCT-STATUS
        PERFORM CLOSE-ALL-FILES
        STOP RUN
    END-IF.
    
    IF WS-MASTER-STATUS NOT = "00"
        DISPLAY "MASTER FILE ERROR: " WS-MASTER-STATUS
        PERFORM CLOSE-ALL-FILES
        STOP RUN
    END-IF.
    
    DISPLAY "ALL FILES OPENED SUCCESSFULLY".

CLOSE-ALL-FILES.
    CLOSE CUSTOMER-FILE
          PRODUCT-FILE
          PRICE-FILE
          REPORT-FILE
          SUMMARY-FILE
          MASTER-FILE
          INVENTORY-FILE
          AUDIT-LOG
          ERROR-LOG.

Opening multiple files with different access modes.

Error Handling and File Status

Comprehensive Error Handling

WORKING-STORAGE SECTION.
01  WS-FILE-ERROR-HANDLING.
    05  WS-ERROR-COUNT      PIC 9(3) VALUE 0.
    05  WS-MAX-RETRIES      PIC 9(2) VALUE 3.
    05  WS-RETRY-COUNT      PIC 9(2) VALUE 0.

PROCEDURE DIVISION.
SAFE-FILE-OPEN.
    MOVE 0 TO WS-RETRY-COUNT.
    
    PERFORM UNTIL WS-RETRY-COUNT >= WS-MAX-RETRIES
        ADD 1 TO WS-RETRY-COUNT
        
        OPEN INPUT DATA-FILE
        
        EVALUATE WS-FILE-STATUS
            WHEN "00"
                DISPLAY "FILE OPENED SUCCESSFULLY"
                EXIT PERFORM
                
            WHEN "30"
                DISPLAY "ATTEMPT " WS-RETRY-COUNT ": FILE NOT FOUND"
                IF WS-RETRY-COUNT < WS-MAX-RETRIES
                    DISPLAY "RETRYING IN 2 SECONDS..."
                    CALL "CBL_SLEEP" USING 2
                END-IF
                
            WHEN "35"
                DISPLAY "ATTEMPT " WS-RETRY-COUNT ": FILE NOT OPENED"
                DISPLAY "FILE MAY BE IN USE BY ANOTHER PROCESS"
                IF WS-RETRY-COUNT < WS-MAX-RETRIES
                    CALL "CBL_SLEEP" USING 1
                END-IF
                
            WHEN "37"
                DISPLAY "ATTEMPT " WS-RETRY-COUNT ": INCOMPATIBLE MODE"
                DISPLAY "FILE CANNOT BE OPENED WITH CURRENT ACCESS MODE"
                EXIT PERFORM
                
            WHEN "39"
                DISPLAY "ATTEMPT " WS-RETRY-COUNT ": RECORD INCONSISTENT"
                DISPLAY "FILE STRUCTURE MISMATCH"
                EXIT PERFORM
                
            WHEN OTHER
                DISPLAY "ATTEMPT " WS-RETRY-COUNT ": UNKNOWN ERROR: " WS-FILE-STATUS
                IF WS-RETRY-COUNT < WS-MAX-RETRIES
                    CALL "CBL_SLEEP" USING 1
                END-IF
        END-EVALUATE
    END-PERFORM.
    
    IF WS-FILE-STATUS NOT = "00"
        DISPLAY "FAILED TO OPEN FILE AFTER " WS-MAX-RETRIES " ATTEMPTS"
        DISPLAY "FINAL STATUS: " WS-FILE-STATUS
        PERFORM FATAL-ERROR-ROUTINE
    END-IF.

Robust error handling with retry logic.

File Status Interpretation

INTERPRET-FILE-STATUS.
    EVALUATE WS-FILE-STATUS
        WHEN "00"
            DISPLAY "SUCCESS: OPERATION COMPLETED SUCCESSFULLY"
            
        WHEN "02"
            DISPLAY "SUCCESS: DUPLICATE KEY (INDEXED FILE)"
            
        WHEN "04"
            DISPLAY "SUCCESS: RECORD LENGTH CHANGED"
            
        WHEN "05"
            DISPLAY "SUCCESS: REFERENCED OPTIONAL FILE NOT PRESENT"
            
        WHEN "07"
            DISPLAY "SUCCESS: NO UNIT/REEL FOR NON-OPTIONAL FILE"
            
        WHEN "10"
            DISPLAY "END-OF-FILE: NO MORE RECORDS"
            
        WHEN "14"
            DISPLAY "OUT OF KEY RANGE: RELATIVE RECORD NUMBER TOO LARGE"
            
        WHEN "21"
            DISPLAY "ERROR: SEQUENCE ERROR"
            
        WHEN "22"
            DISPLAY "ERROR: DUPLICATE KEY"
            
        WHEN "23"
            DISPLAY "ERROR: RECORD NOT FOUND"
            
        WHEN "24"
            DISPLAY "ERROR: BOUNDARY VIOLATION"
            
        WHEN "30"
            DISPLAY "ERROR: PERMANENT I/O ERROR"
            
        WHEN "34"
            DISPLAY "ERROR: BOUNDARY VIOLATION"
            
        WHEN "35"
            DISPLAY "ERROR: FILE NOT FOUND"
            
        WHEN "37"
            DISPLAY "ERROR: OPEN MODE NOT ALLOWED"
            
        WHEN "38"
            DISPLAY "ERROR: FILE PREVIOUSLY CLOSED WITH LOCK"
            
        WHEN "39"
            DISPLAY "ERROR: RECORD ATTRIBUTE CONFLICT"
            
        WHEN "41"
            DISPLAY "ERROR: FILE ALREADY OPEN"
            
        WHEN "42"
            DISPLAY "ERROR: FILE NOT OPEN"
            
        WHEN "43"
            DISPLAY "ERROR: NO CURRENT RECORD (DELETE/REWRITE)"
            
        WHEN "44"
            DISPLAY "ERROR: RECORD OVERFLOW"
            
        WHEN "46"
            DISPLAY "ERROR: NO CURRENT RECORD POINTER"
            
        WHEN "47"
            DISPLAY "ERROR: FILE NOT AVAILABLE"
            
        WHEN "48"
            DISPLAY "ERROR: FILE NAME NOT GIVEN"
            
        WHEN "49"
            DISPLAY "ERROR: FILE ATTRIBUTE CONFLICT"
            
        WHEN OTHER
            DISPLAY "UNKNOWN FILE STATUS: " WS-FILE-STATUS
    END-EVALUATE.

Comprehensive file status code interpretation.

File Processing Patterns

Sequential File Processing

PROCEDURE DIVISION.
PROCESS-SEQUENTIAL-FILE.
    PERFORM OPEN-FILES.
    PERFORM PROCESS-RECORDS UNTIL END-OF-FILE.
    PERFORM CLOSE-FILES.

OPEN-FILES.
    OPEN INPUT SOURCE-FILE.
    IF WS-SOURCE-STATUS NOT = "00"
        DISPLAY "ERROR OPENING SOURCE FILE"
        STOP RUN
    END-IF.
    
    OPEN OUTPUT TARGET-FILE.
    IF WS-TARGET-STATUS NOT = "00"
        DISPLAY "ERROR OPENING TARGET FILE"
        CLOSE SOURCE-FILE
        STOP RUN
    END-IF.

PROCESS-RECORDS.
    READ SOURCE-FILE
        AT END
            SET END-OF-FILE TO TRUE
        NOT AT END
            PERFORM VALIDATE-RECORD
            IF RECORD-VALID
                PERFORM TRANSFORM-RECORD
                WRITE TARGET-RECORD
                ADD 1 TO WS-RECORDS-PROCESSED
            ELSE
                ADD 1 TO WS-RECORDS-REJECTED
            END-IF
    END-READ.

CLOSE-FILES.
    CLOSE SOURCE-FILE.
    CLOSE TARGET-FILE.
    
    DISPLAY "PROCESSING COMPLETE:"
    DISPLAY "  RECORDS PROCESSED: " WS-RECORDS-PROCESSED
    DISPLAY "  RECORDS REJECTED: " WS-RECORDS-REJECTED.

Standard sequential file processing pattern.

Master File Update Pattern

PROCEDURE DIVISION.
MASTER-FILE-UPDATE.
    PERFORM OPEN-UPDATE-FILES.
    PERFORM PROCESS-TRANSACTIONS.
    PERFORM CLOSE-UPDATE-FILES.
    PERFORM DISPLAY-STATISTICS.

OPEN-UPDATE-FILES.
    OPEN INPUT TRANSACTION-FILE.
    IF WS-TRANS-STATUS NOT = "00"
        DISPLAY "ERROR OPENING TRANSACTION FILE"
        STOP RUN
    END-IF.
    
    OPEN I-O MASTER-FILE.
    IF WS-MASTER-STATUS NOT = "00"
        DISPLAY "ERROR OPENING MASTER FILE FOR UPDATE"
        CLOSE TRANSACTION-FILE
        STOP RUN
    END-IF.
    
    OPEN EXTEND UPDATE-LOG.
    IF WS-LOG-STATUS NOT = "00"
        DISPLAY "WARNING: CANNOT OPEN UPDATE LOG"
        DISPLAY "CONTINUING WITHOUT LOGGING"
    END-IF.

PROCESS-TRANSACTIONS.
    PERFORM READ-TRANSACTION.
    
    PERFORM UNTIL END-OF-TRANSACTIONS
        EVALUATE TRANS-TYPE
            WHEN "ADD"
                PERFORM ADD-NEW-RECORD
            WHEN "UPD"
                PERFORM UPDATE-EXISTING-RECORD
            WHEN "DEL"
                PERFORM DELETE-RECORD
            WHEN OTHER
                PERFORM LOG-INVALID-TRANSACTION
                ADD 1 TO WS-INVALID-TRANSACTIONS
        END-EVALUATE
        
        PERFORM READ-TRANSACTION
    END-PERFORM.

UPDATE-EXISTING-RECORD.
    MOVE TRANS-KEY TO MASTER-KEY.
    
    READ MASTER-FILE
        INVALID KEY
            DISPLAY "RECORD NOT FOUND FOR UPDATE: " TRANS-KEY
            ADD 1 TO WS-NOT-FOUND-COUNT
        NOT INVALID KEY
            PERFORM APPLY-TRANSACTION-DATA
            REWRITE MASTER-RECORD
                INVALID KEY
                    DISPLAY "ERROR UPDATING RECORD: " TRANS-KEY
                    ADD 1 TO WS-ERROR-COUNT
                NOT INVALID KEY
                    ADD 1 TO WS-UPDATED-COUNT
                    PERFORM LOG-SUCCESSFUL-UPDATE
            END-REWRITE
    END-READ.

Master file update with transaction processing.

Best Practices

  • Always check file status after OPEN operations
  • Use appropriate access mode for your processing needs
  • Implement proper error handling and recovery procedures
  • Close files in reverse order of opening when possible
  • Use meaningful file status variables for debugging

File Status Codes

StatusCategoryDescription
00SuccessOperation completed successfully
30ErrorPermanent I/O error (file not found)
35ErrorFile not opened successfully
37ErrorOpen mode not allowed
41ErrorFile already open

Related Concepts

CLOSE Statement

Closes files and releases resources

FILE-CONTROL

File definitions in Environment Division

File Status

Error checking and status monitoring

READ/WRITE

File I/O operations after opening