I-O operations in COBOL represent the fundamental Input/Output processing mechanisms that enable comprehensive file handling, record manipulation, and data transfer capabilities within enterprise applications. These operations provide sophisticated file access patterns including sequential processing, random access, and update operations that support complex business data management requirements while maintaining data integrity, ensuring reliable transaction processing, and delivering high-performance file operations across diverse mainframe and distributed computing environments with robust error handling and comprehensive status reporting.
123456789101112131415161718192021*> Basic I-O file operations OPEN I-O file-name READ file-name REWRITE record-name CLOSE file-name *> File control and access SELECT file-name ASSIGN TO external-name ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS primary-key FILE STATUS IS file-status. *> Example I-O operations OPEN I-O CUSTOMER-FILE READ CUSTOMER-FILE KEY IS CUSTOMER-ID INVALID KEY DISPLAY "Customer not found" NOT INVALID KEY PERFORM UPDATE-CUSTOMER END-READ CLOSE CUSTOMER-FILE.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158IDENTIFICATION DIVISION. PROGRAM-ID. IO-OPERATIONS-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS EMP-ID ALTERNATE RECORD KEY IS EMP-NAME WITH DUPLICATES FILE STATUS IS EMP-FILE-STATUS. SELECT TRANSACTION-FILE ASSIGN TO "TRANS.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS TRANS-FILE-STATUS. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 EMP-DEPT PIC X(10). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-STATUS PIC X. FD TRANSACTION-FILE. 01 TRANSACTION-RECORD. 05 TRANS-TYPE PIC X. 05 TRANS-EMP-ID PIC 9(6). 05 TRANS-DATA PIC X(50). WORKING-STORAGE SECTION. 01 WS-FILE-STATUS. 05 EMP-FILE-STATUS PIC XX. 05 TRANS-FILE-STATUS PIC XX. 01 WS-COUNTERS. 05 WS-RECORDS-READ PIC 9(5) VALUE 0. 05 WS-RECORDS-UPDATED PIC 9(5) VALUE 0. 05 WS-RECORDS-ADDED PIC 9(5) VALUE 0. 88 EOF-TRANSACTIONS VALUE "10". PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM OPEN-FILES PERFORM PROCESS-TRANSACTIONS PERFORM CLOSE-FILES PERFORM DISPLAY-STATISTICS STOP RUN. OPEN-FILES. OPEN I-O EMPLOYEE-FILE IF EMP-FILE-STATUS NOT = "00" DISPLAY "Error opening employee file: " EMP-FILE-STATUS STOP RUN END-IF OPEN INPUT TRANSACTION-FILE IF TRANS-FILE-STATUS NOT = "00" DISPLAY "Error opening transaction file: " TRANS-FILE-STATUS STOP RUN END-IF. PROCESS-TRANSACTIONS. PERFORM UNTIL EOF-TRANSACTIONS READ TRANSACTION-FILE AT END SET EOF-TRANSACTIONS TO TRUE NOT AT END PERFORM PROCESS-TRANSACTION END-READ END-PERFORM. PROCESS-TRANSACTION. ADD 1 TO WS-RECORDS-READ EVALUATE TRANS-TYPE WHEN "A" PERFORM ADD-EMPLOYEE WHEN "U" PERFORM UPDATE-EMPLOYEE WHEN "D" PERFORM DELETE-EMPLOYEE WHEN OTHER DISPLAY "Invalid transaction type: " TRANS-TYPE END-EVALUATE. ADD-EMPLOYEE. MOVE TRANS-EMP-ID TO EMP-ID MOVE TRANS-DATA(1:30) TO EMP-NAME MOVE TRANS-DATA(31:10) TO EMP-DEPT MOVE TRANS-DATA(41:10) TO EMP-SALARY MOVE "A" TO EMP-STATUS WRITE EMPLOYEE-RECORD INVALID KEY DISPLAY "Employee " EMP-ID " already exists" NOT INVALID KEY ADD 1 TO WS-RECORDS-ADDED DISPLAY "Added employee: " EMP-ID END-WRITE. UPDATE-EMPLOYEE. MOVE TRANS-EMP-ID TO EMP-ID READ EMPLOYEE-FILE KEY IS EMP-ID INVALID KEY DISPLAY "Employee " EMP-ID " not found for update" NOT INVALID KEY PERFORM APPLY-UPDATE END-READ. APPLY-UPDATE. *> Update fields based on transaction data IF TRANS-DATA(1:1) NOT = SPACE MOVE TRANS-DATA(1:30) TO EMP-NAME END-IF IF TRANS-DATA(31:1) NOT = SPACE MOVE TRANS-DATA(31:10) TO EMP-DEPT END-IF IF TRANS-DATA(41:1) NOT = SPACE MOVE TRANS-DATA(41:10) TO EMP-SALARY END-IF REWRITE EMPLOYEE-RECORD INVALID KEY DISPLAY "Error updating employee " EMP-ID NOT INVALID KEY ADD 1 TO WS-RECORDS-UPDATED DISPLAY "Updated employee: " EMP-ID END-REWRITE. DELETE-EMPLOYEE. MOVE TRANS-EMP-ID TO EMP-ID READ EMPLOYEE-FILE KEY IS EMP-ID INVALID KEY DISPLAY "Employee " EMP-ID " not found for deletion" NOT INVALID KEY DELETE EMPLOYEE-FILE INVALID KEY DISPLAY "Error deleting employee " EMP-ID NOT INVALID KEY DISPLAY "Deleted employee: " EMP-ID END-DELETE END-READ. CLOSE-FILES. CLOSE EMPLOYEE-FILE CLOSE TRANSACTION-FILE. DISPLAY-STATISTICS. DISPLAY "Processing Statistics:" DISPLAY " Transactions read: " WS-RECORDS-READ DISPLAY " Records added: " WS-RECORDS-ADDED DISPLAY " Records updated: " WS-RECORDS-UPDATED.
What is the primary purpose of I-O mode in COBOL?
Answer: I-O mode allows both reading from and writing to the same file, enabling record updates and modifications while maintaining data integrity.
What are the requirements for opening a file in I-O mode?
Answer: The file must already exist, be properly defined in FILE-CONTROL, and support the organization type (typically indexed or relative files).