The FILE-CONTROL section represents a critical component of COBOL's Environment Division architecture, serving as the central repository for file assignment specifications, organization definitions, and access method configurations that govern how programs interact with external data storage systems. This section embodies the principles of declarative file management by providing comprehensive file characteristic specifications, enabling sophisticated data access strategies, and supporting diverse file organizations including sequential, indexed, and relative structures while maintaining platform independence and ensuring optimal performance through proper file configuration and access method selection.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480IDENTIFICATION DIVISION. PROGRAM-ID. FILE-CONTROL-COMPREHENSIVE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. *> Sequential Master File Configuration SELECT CUSTOMER-MASTER-FILE ASSIGN TO 'CUSTMAST.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS CUSTOMER-FILE-STATUS LOCK MODE IS MANUAL RESERVE 2 AREAS. *> Indexed Transaction File Configuration SELECT TRANSACTION-INDEX-FILE ASSIGN TO 'TRANSIDX.DAT' ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS TRANS-PRIMARY-KEY ALTERNATE RECORD KEY IS TRANS-DATE-KEY WITH DUPLICATES ALTERNATE RECORD KEY IS TRANS-CUSTOMER-KEY WITH DUPLICATES FILE STATUS IS TRANSACTION-FILE-STATUS LOCK MODE IS AUTOMATIC RESERVE 3 AREAS. *> Relative Direct Access File Configuration SELECT ACCOUNT-RELATIVE-FILE ASSIGN TO 'ACCTREL.DAT' ORGANIZATION IS RELATIVE ACCESS MODE IS DYNAMIC RELATIVE KEY IS ACCOUNT-RELATIVE-KEY FILE STATUS IS ACCOUNT-FILE-STATUS LOCK MODE IS MANUAL RESERVE 2 AREAS. *> Line Sequential Report File Configuration SELECT CUSTOMER-REPORT-FILE ASSIGN TO 'CUSTRPT.TXT' ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS REPORT-FILE-STATUS. *> Error Log File Configuration SELECT ERROR-LOG-FILE ASSIGN TO 'ERRORS.LOG' ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS ERROR-LOG-STATUS. *> Backup File Configuration SELECT BACKUP-FILE ASSIGN TO 'BACKUP.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS BACKUP-FILE-STATUS RESERVE 1 AREA. *> Sort Work File Configuration SELECT SORT-WORK-FILE ASSIGN TO 'SORTWORK.TMP' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS SORT-FILE-STATUS. *> Archive File Configuration SELECT ARCHIVE-FILE ASSIGN TO 'ARCHIVE.ARC' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS ARCHIVE-FILE-STATUS LOCK MODE IS EXCLUSIVE. I-O-CONTROL. MULTIPLE FILE TAPE CONTAINS CUSTOMER-MASTER-FILE BACKUP-FILE. SAME RECORD AREA FOR CUSTOMER-MASTER-FILE BACKUP-FILE. APPLY WRITE-ONLY ON CUSTOMER-REPORT-FILE ERROR-LOG-FILE. DATA DIVISION. FILE SECTION. *> Customer Master File Structure FD CUSTOMER-MASTER-FILE BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 200 CHARACTERS. 01 CUSTOMER-MASTER-RECORD. 05 CM-CUSTOMER-ID PIC 9(8). 05 CM-CUSTOMER-DATA PIC X(192). *> Transaction Index File Structure FD TRANSACTION-INDEX-FILE BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 150 CHARACTERS. 01 TRANSACTION-INDEX-RECORD. 05 TRANS-PRIMARY-KEY PIC 9(10). 05 TRANS-DATE-KEY PIC 9(8). 05 TRANS-CUSTOMER-KEY PIC 9(8). 05 TRANS-DATA PIC X(124). *> Account Relative File Structure FD ACCOUNT-RELATIVE-FILE BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 100 CHARACTERS. 01 ACCOUNT-RELATIVE-RECORD. 05 ACCOUNT-DATA PIC X(100). *> Report File Structure FD CUSTOMER-REPORT-FILE RECORD CONTAINS 132 CHARACTERS. 01 CUSTOMER-REPORT-RECORD PIC X(132). *> Error Log File Structure FD ERROR-LOG-FILE RECORD CONTAINS 200 CHARACTERS. 01 ERROR-LOG-RECORD PIC X(200). *> Backup File Structure FD BACKUP-FILE BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 200 CHARACTERS. 01 BACKUP-RECORD PIC X(200). *> Sort Work File Structure SD SORT-WORK-FILE RECORD CONTAINS 150 CHARACTERS. 01 SORT-WORK-RECORD. 05 SORT-KEY PIC 9(8). 05 SORT-DATA PIC X(142). *> Archive File Structure FD ARCHIVE-FILE BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 300 CHARACTERS. 01 ARCHIVE-RECORD PIC X(300). WORKING-STORAGE SECTION. 01 FILE-STATUS-AREAS. 05 CUSTOMER-FILE-STATUS PIC XX. 88 CUSTOMER-SUCCESS VALUE '00'. 88 CUSTOMER-EOF VALUE '10'. 88 CUSTOMER-NOT-FOUND VALUE '23'. 05 TRANSACTION-FILE-STATUS PIC XX. 88 TRANS-SUCCESS VALUE '00'. 88 TRANS-EOF VALUE '10'. 88 TRANS-DUPLICATE VALUE '22'. 88 TRANS-NOT-FOUND VALUE '23'. 05 ACCOUNT-FILE-STATUS PIC XX. 88 ACCOUNT-SUCCESS VALUE '00'. 88 ACCOUNT-EOF VALUE '10'. 88 ACCOUNT-NOT-FOUND VALUE '23'. 05 REPORT-FILE-STATUS PIC XX. 88 REPORT-SUCCESS VALUE '00'. 05 ERROR-LOG-STATUS PIC XX. 88 ERROR-LOG-SUCCESS VALUE '00'. 05 BACKUP-FILE-STATUS PIC XX. 88 BACKUP-SUCCESS VALUE '00'. 05 SORT-FILE-STATUS PIC XX. 88 SORT-SUCCESS VALUE '00'. 05 ARCHIVE-FILE-STATUS PIC XX. 88 ARCHIVE-SUCCESS VALUE '00'. 01 FILE-CONTROL-VARIABLES. 05 ACCOUNT-RELATIVE-KEY PIC 9(5). 05 CURRENT-OPERATION PIC X(20). 05 FILES-OPENED PIC 9(2) VALUE 0. 05 RECORDS-PROCESSED PIC 9(7) VALUE 0. 05 ERROR-COUNT PIC 9(5) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM DEMONSTRATE-SEQUENTIAL-FILE-CONTROL PERFORM DEMONSTRATE-INDEXED-FILE-CONTROL PERFORM DEMONSTRATE-RELATIVE-FILE-CONTROL PERFORM DEMONSTRATE-REPORT-FILE-CONTROL PERFORM DEMONSTRATE-BACKUP-OPERATIONS PERFORM DISPLAY-FILE-CONTROL-STATISTICS STOP RUN. DEMONSTRATE-SEQUENTIAL-FILE-CONTROL. DISPLAY 'Demonstrating Sequential File Control...' MOVE 'SEQUENTIAL' TO CURRENT-OPERATION *> Open sequential file for output OPEN OUTPUT CUSTOMER-MASTER-FILE IF CUSTOMER-SUCCESS ADD 1 TO FILES-OPENED DISPLAY 'Sequential file opened for output' *> Write sample records PERFORM WRITE-SEQUENTIAL-RECORDS CLOSE CUSTOMER-MASTER-FILE SUBTRACT 1 FROM FILES-OPENED *> Reopen for input OPEN INPUT CUSTOMER-MASTER-FILE IF CUSTOMER-SUCCESS ADD 1 TO FILES-OPENED DISPLAY 'Sequential file reopened for input' *> Read records back PERFORM READ-SEQUENTIAL-RECORDS CLOSE CUSTOMER-MASTER-FILE SUBTRACT 1 FROM FILES-OPENED ELSE DISPLAY 'Failed to reopen sequential file' DISPLAY 'Status: ' CUSTOMER-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF ELSE DISPLAY 'Failed to open sequential file' DISPLAY 'Status: ' CUSTOMER-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF. WRITE-SEQUENTIAL-RECORDS. MOVE 12345678 TO CM-CUSTOMER-ID MOVE 'SEQUENTIAL CUSTOMER DATA RECORD 1' TO CM-CUSTOMER-DATA WRITE CUSTOMER-MASTER-RECORD IF CUSTOMER-SUCCESS ADD 1 TO RECORDS-PROCESSED DISPLAY 'Sequential record written' ELSE DISPLAY 'Failed to write sequential record' ADD 1 TO ERROR-COUNT END-IF. READ-SEQUENTIAL-RECORDS. PERFORM UNTIL CUSTOMER-EOF READ CUSTOMER-MASTER-FILE AT END DISPLAY 'End of sequential file reached' NOT AT END ADD 1 TO RECORDS-PROCESSED DISPLAY 'Read sequential: ' CM-CUSTOMER-ID END-READ END-PERFORM. DEMONSTRATE-INDEXED-FILE-CONTROL. DISPLAY 'Demonstrating Indexed File Control...' MOVE 'INDEXED' TO CURRENT-OPERATION *> Open indexed file for I-O OPEN I-O TRANSACTION-INDEX-FILE IF TRANS-SUCCESS ADD 1 TO FILES-OPENED DISPLAY 'Indexed file opened for I-O' *> Perform indexed operations PERFORM INDEXED-FILE-OPERATIONS CLOSE TRANSACTION-INDEX-FILE SUBTRACT 1 FROM FILES-OPENED ELSE DISPLAY 'Failed to open indexed file' DISPLAY 'Status: ' TRANSACTION-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF. INDEXED-FILE-OPERATIONS. *> Write indexed record MOVE 1234567890 TO TRANS-PRIMARY-KEY MOVE 20240115 TO TRANS-DATE-KEY MOVE 12345678 TO TRANS-CUSTOMER-KEY MOVE 'INDEXED TRANSACTION DATA' TO TRANS-DATA WRITE TRANSACTION-INDEX-RECORD EVALUATE TRANSACTION-FILE-STATUS WHEN '00' ADD 1 TO RECORDS-PROCESSED DISPLAY 'Indexed record written' WHEN '22' DISPLAY 'Duplicate key detected' ADD 1 TO ERROR-COUNT WHEN OTHER DISPLAY 'Failed to write indexed record' DISPLAY 'Status: ' TRANSACTION-FILE-STATUS ADD 1 TO ERROR-COUNT END-EVALUATE *> Read by primary key MOVE 1234567890 TO TRANS-PRIMARY-KEY READ TRANSACTION-INDEX-FILE KEY IS TRANS-PRIMARY-KEY IF TRANS-SUCCESS ADD 1 TO RECORDS-PROCESSED DISPLAY 'Read by primary key: ' TRANS-PRIMARY-KEY ELSE DISPLAY 'Failed to read by primary key' DISPLAY 'Status: ' TRANSACTION-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF *> Read by alternate key MOVE 12345678 TO TRANS-CUSTOMER-KEY READ TRANSACTION-INDEX-FILE KEY IS TRANS-CUSTOMER-KEY IF TRANS-SUCCESS ADD 1 TO RECORDS-PROCESSED DISPLAY 'Read by customer key: ' TRANS-CUSTOMER-KEY ELSE DISPLAY 'Failed to read by customer key' DISPLAY 'Status: ' TRANSACTION-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF. DEMONSTRATE-RELATIVE-FILE-CONTROL. DISPLAY 'Demonstrating Relative File Control...' MOVE 'RELATIVE' TO CURRENT-OPERATION *> Open relative file for I-O OPEN I-O ACCOUNT-RELATIVE-FILE IF ACCOUNT-SUCCESS ADD 1 TO FILES-OPENED DISPLAY 'Relative file opened for I-O' *> Perform relative operations PERFORM RELATIVE-FILE-OPERATIONS CLOSE ACCOUNT-RELATIVE-FILE SUBTRACT 1 FROM FILES-OPENED ELSE DISPLAY 'Failed to open relative file' DISPLAY 'Status: ' ACCOUNT-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF. RELATIVE-FILE-OPERATIONS. *> Write relative record MOVE 1 TO ACCOUNT-RELATIVE-KEY MOVE 'RELATIVE ACCOUNT DATA RECORD' TO ACCOUNT-DATA WRITE ACCOUNT-RELATIVE-RECORD IF ACCOUNT-SUCCESS ADD 1 TO RECORDS-PROCESSED DISPLAY 'Relative record written at position: ' ACCOUNT-RELATIVE-KEY ELSE DISPLAY 'Failed to write relative record' DISPLAY 'Status: ' ACCOUNT-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF *> Read relative record MOVE 1 TO ACCOUNT-RELATIVE-KEY READ ACCOUNT-RELATIVE-FILE IF ACCOUNT-SUCCESS ADD 1 TO RECORDS-PROCESSED DISPLAY 'Read relative record: ' ACCOUNT-DATA ELSE DISPLAY 'Failed to read relative record' DISPLAY 'Status: ' ACCOUNT-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF. DEMONSTRATE-REPORT-FILE-CONTROL. DISPLAY 'Demonstrating Report File Control...' MOVE 'REPORT' TO CURRENT-OPERATION *> Open report file for output OPEN OUTPUT CUSTOMER-REPORT-FILE IF REPORT-SUCCESS ADD 1 TO FILES-OPENED DISPLAY 'Report file opened for output' *> Write report records PERFORM WRITE-REPORT-RECORDS CLOSE CUSTOMER-REPORT-FILE SUBTRACT 1 FROM FILES-OPENED ELSE DISPLAY 'Failed to open report file' DISPLAY 'Status: ' REPORT-FILE-STATUS ADD 1 TO ERROR-COUNT END-IF. WRITE-REPORT-RECORDS. MOVE 'CUSTOMER REPORT HEADER LINE' TO CUSTOMER-REPORT-RECORD WRITE CUSTOMER-REPORT-RECORD IF REPORT-SUCCESS ADD 1 TO RECORDS-PROCESSED DISPLAY 'Report header written' ELSE DISPLAY 'Failed to write report header' ADD 1 TO ERROR-COUNT END-IF MOVE 'CUSTOMER DATA LINE 1' TO CUSTOMER-REPORT-RECORD WRITE CUSTOMER-REPORT-RECORD IF REPORT-SUCCESS ADD 1 TO RECORDS-PROCESSED DISPLAY 'Report detail written' ELSE DISPLAY 'Failed to write report detail' ADD 1 TO ERROR-COUNT END-IF. DEMONSTRATE-BACKUP-OPERATIONS. DISPLAY 'Demonstrating Backup Operations...' MOVE 'BACKUP' TO CURRENT-OPERATION *> Open files for backup operation OPEN INPUT CUSTOMER-MASTER-FILE OPEN OUTPUT BACKUP-FILE IF CUSTOMER-SUCCESS AND BACKUP-SUCCESS ADD 2 TO FILES-OPENED DISPLAY 'Backup operation files opened' *> Perform backup PERFORM BACKUP-FILE-COPY CLOSE CUSTOMER-MASTER-FILE CLOSE BACKUP-FILE SUBTRACT 2 FROM FILES-OPENED ELSE DISPLAY 'Failed to open backup files' IF NOT CUSTOMER-SUCCESS DISPLAY 'Customer file status: ' CUSTOMER-FILE-STATUS END-IF IF NOT BACKUP-SUCCESS DISPLAY 'Backup file status: ' BACKUP-FILE-STATUS END-IF ADD 1 TO ERROR-COUNT END-IF. BACKUP-FILE-COPY. PERFORM UNTIL CUSTOMER-EOF READ CUSTOMER-MASTER-FILE AT END DISPLAY 'Backup copy completed' NOT AT END MOVE CUSTOMER-MASTER-RECORD TO BACKUP-RECORD WRITE BACKUP-RECORD IF BACKUP-SUCCESS ADD 1 TO RECORDS-PROCESSED ELSE DISPLAY 'Backup write failed' ADD 1 TO ERROR-COUNT END-IF END-READ END-PERFORM. DISPLAY-FILE-CONTROL-STATISTICS. DISPLAY 'FILE-CONTROL Processing Statistics:' DISPLAY '==================================' DISPLAY 'Files currently open: ' FILES-OPENED DISPLAY 'Records processed: ' RECORDS-PROCESSED DISPLAY 'Error count: ' ERROR-COUNT DISPLAY 'Last operation: ' CURRENT-OPERATION IF ERROR-COUNT = 0 DISPLAY 'All FILE-CONTROL operations completed successfully' ELSE DISPLAY 'Some errors occurred during processing' END-IF.