The OUTPUT mode in COBOL represents comprehensive file writing capabilities and sophisticated data output management functionality within mainframe programming environments, providing advanced file creation mechanisms for data storage, enhanced write operation control features, and intelligent output stream management patterns that enable precise file output control, complex data writing workflows, and systematic file generation requirements while maintaining data integrity, ensuring optimal write performance, and enabling flexible output architectures across enterprise applications requiring specific file creation methods, efficient data output capabilities, and reliable file writing throughout sophisticated business data processing scenarios and high-volume output operations.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980*> Basic OUTPUT file opening OPEN OUTPUT CUSTOMER-OUTPUT-FILE WRITE CUSTOMER-RECORD CLOSE CUSTOMER-OUTPUT-FILE *> OUTPUT with file status checking OPEN OUTPUT SALES-REPORT-FILE IF WS-FILE-STATUS = "00" DISPLAY "Sales report file opened successfully" PERFORM WRITE-SALES-RECORDS CLOSE SALES-REPORT-FILE ELSE DISPLAY "Error opening sales report: " WS-FILE-STATUS PERFORM ERROR-HANDLING END-IF *> Multiple OUTPUT files OPEN OUTPUT CUSTOMER-FILE OUTPUT TRANSACTION-FILE OUTPUT ERROR-LOG-FILE PERFORM PROCESS-CUSTOMER-DATA PERFORM PROCESS-TRANSACTIONS PERFORM WRITE-ERROR-SUMMARY CLOSE CUSTOMER-FILE TRANSACTION-FILE ERROR-LOG-FILE *> OUTPUT file with record creation loop 01 EMPLOYEE-OUTPUT-RECORD. 05 EMP-ID PIC 9(8). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(15). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). OPEN OUTPUT EMPLOYEE-OUTPUT-FILE PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > TOTAL-EMPLOYEES OR WS-FILE-STATUS NOT = "00" MOVE WS-COUNTER TO EMP-ID STRING "EMPLOYEE-" WS-COUNTER DELIMITED BY SIZE INTO EMP-NAME MOVE "IT" TO EMP-DEPARTMENT COMPUTE EMP-SALARY = 50000 + (WS-COUNTER * 1000) MOVE FUNCTION CURRENT-DATE(1:8) TO EMP-HIRE-DATE WRITE EMPLOYEE-OUTPUT-RECORD IF WS-FILE-STATUS NOT = "00" DISPLAY "Write error at record " WS-COUNTER ": " WS-FILE-STATUS PERFORM WRITE-ERROR-HANDLING ELSE ADD 1 TO RECORDS-WRITTEN END-IF END-PERFORM CLOSE EMPLOYEE-OUTPUT-FILE *> OUTPUT with formatted report generation 01 REPORT-HEADER. 05 FILLER PIC X(20) VALUE SPACES. 05 FILLER PIC X(30) VALUE "MONTHLY SALES REPORT". 05 FILLER PIC X(20) VALUE SPACES. 01 REPORT-DETAIL-LINE. 05 DETAIL-REGION PIC X(10). 05 FILLER PIC X(5) VALUE SPACES. 05 DETAIL-SALESPERSON PIC X(20). 05 FILLER PIC X(5) VALUE SPACES. 05 DETAIL-SALES-AMOUNT PIC $ZZZ,ZZ9.99. 05 FILLER PIC X(5) VALUE SPACES. 05 DETAIL-COMMISSION PIC $ZZ,ZZ9.99. OPEN OUTPUT MONTHLY-REPORT-FILE WRITE REPORT-RECORD FROM REPORT-HEADER WRITE REPORT-RECORD FROM SPACES PERFORM WRITE-REPORT-DETAILS CLOSE MONTHLY-REPORT-FILE
12345678910111213141516171819202122232425*> Comprehensive report OUTPUT 01 SALES-SUMMARY-REPORT. 05 REPORT-DATE PIC 9(8). 05 TOTAL-SALES PIC 9(11)V99. 05 TOTAL-TRANSACTIONS PIC 9(8). 05 AVERAGE-SALE PIC 9(7)V99. OPEN OUTPUT SALES-SUMMARY-FILE MOVE FUNCTION CURRENT-DATE(1:8) TO REPORT-DATE COMPUTE TOTAL-SALES = RUNNING-SALES-TOTAL MOVE TRANSACTION-COUNT TO TOTAL-TRANSACTIONS COMPUTE AVERAGE-SALE = TOTAL-SALES / TOTAL-TRANSACTIONS WRITE SALES-SUMMARY-RECORD FROM SALES-SUMMARY-REPORT *> Detail records PERFORM VARYING REGION-INDEX FROM 1 BY 1 UNTIL REGION-INDEX > NUMBER-OF-REGIONS MOVE REGION-DATA(REGION-INDEX) TO DETAIL-RECORD WRITE DETAIL-RECORD ADD 1 TO DETAIL-RECORDS-WRITTEN END-PERFORM CLOSE SALES-SUMMARY-FILE
123456789101112131415161718192021222324252627*> Customer data export 01 CSV-EXPORT-RECORD. 05 CSV-CUSTOMER-ID PIC 9(8). 05 FILLER PIC X VALUE ",". 05 CSV-CUSTOMER-NAME PIC X(30). 05 FILLER PIC X VALUE ",". 05 CSV-BALANCE PIC 9(9)V99. 05 FILLER PIC X VALUE ",". 05 CSV-STATUS PIC X(10). OPEN OUTPUT CUSTOMER-EXPORT-FILE OPEN INPUT CUSTOMER-MASTER-FILE PERFORM UNTIL END-OF-CUSTOMERS READ CUSTOMER-MASTER-FILE AT END SET END-OF-CUSTOMERS TO TRUE NOT AT END MOVE CUST-ID TO CSV-CUSTOMER-ID MOVE CUST-NAME TO CSV-CUSTOMER-NAME MOVE CUST-BALANCE TO CSV-BALANCE MOVE CUST-STATUS TO CSV-STATUS WRITE CSV-EXPORT-RECORD END-READ END-PERFORM CLOSE CUSTOMER-EXPORT-FILE CUSTOMER-MASTER-FILE
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274IDENTIFICATION DIVISION. PROGRAM-ID. OUTPUT-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-INPUT-FILE ASSIGN TO "CUSTOMERS.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-INPUT-STATUS. SELECT CUSTOMER-OUTPUT-FILE ASSIGN TO "CUSTOMERS_NEW.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-OUTPUT-STATUS. SELECT REPORT-FILE ASSIGN TO "CUSTOMER_REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-REPORT-STATUS. SELECT ERROR-LOG-FILE ASSIGN TO "ERRORS.LOG" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-ERROR-STATUS. DATA DIVISION. FILE SECTION. FD CUSTOMER-INPUT-FILE. 01 CUSTOMER-INPUT-RECORD PIC X(100). FD CUSTOMER-OUTPUT-FILE. 01 CUSTOMER-OUTPUT-RECORD. 05 CUST-ID PIC 9(8). 05 CUST-NAME PIC X(30). 05 CUST-ADDRESS PIC X(50). 05 CUST-BALANCE PIC S9(9)V99. FD REPORT-FILE. 01 REPORT-RECORD PIC X(132). FD ERROR-LOG-FILE. 01 ERROR-LOG-RECORD PIC X(200). WORKING-STORAGE SECTION. 01 WS-FILE-STATUS-FIELDS. 05 WS-INPUT-STATUS PIC XX. 05 WS-OUTPUT-STATUS PIC XX. 05 WS-REPORT-STATUS PIC XX. 05 WS-ERROR-STATUS PIC XX. 01 WS-PROCESSING-COUNTERS. 05 WS-RECORDS-READ PIC 9(8) VALUE 0. 05 WS-RECORDS-WRITTEN PIC 9(8) VALUE 0. 05 WS-ERRORS-LOGGED PIC 9(6) VALUE 0. 05 WS-PROCESSING-TIME PIC 9(8). 01 WS-REPORT-LINES. 05 WS-HEADER-LINE. 10 FILLER PIC X(30) VALUE SPACES. 10 FILLER PIC X(25) VALUE "CUSTOMER PROCESSING REPORT". 10 FILLER PIC X(77) VALUE SPACES. 05 WS-DETAIL-LINE. 10 WS-DETAIL-ID PIC 9(8). 10 FILLER PIC X(5) VALUE SPACES. 10 WS-DETAIL-NAME PIC X(30). 10 FILLER PIC X(5) VALUE SPACES. 10 WS-DETAIL-BALANCE PIC $ZZZ,ZZZ,ZZ9.99-. 10 FILLER PIC X(70) VALUE SPACES. 01 WS-ERROR-MESSAGE. 05 WS-ERROR-TIME PIC X(20). 05 FILLER PIC X(3) VALUE " - ". 05 WS-ERROR-DESCRIPTION PIC X(50). 05 FILLER PIC X(3) VALUE " - ". 05 WS-ERROR-RECORD-DATA PIC X(100). PROCEDURE DIVISION. MAIN-OUTPUT-DEMO. DISPLAY "=== COBOL OUTPUT DEMONSTRATION ===" PERFORM INITIALIZE-OUTPUT-PROCESSING PERFORM OPEN-OUTPUT-FILES PERFORM PROCESS-CUSTOMER-DATA PERFORM GENERATE-PROCESSING-REPORT PERFORM CLOSE-OUTPUT-FILES PERFORM DISPLAY-PROCESSING-SUMMARY DISPLAY "=== OUTPUT PROCESSING COMPLETE ===" STOP RUN. INITIALIZE-OUTPUT-PROCESSING. DISPLAY "Initializing OUTPUT processing..." MOVE FUNCTION CURRENT-DATE TO WS-PROCESSING-TIME MOVE 0 TO WS-RECORDS-READ MOVE 0 TO WS-RECORDS-WRITTEN MOVE 0 TO WS-ERRORS-LOGGED DISPLAY "✅ Initialization complete". OPEN-OUTPUT-FILES. DISPLAY "Opening OUTPUT files..." *> Open input file for reading OPEN INPUT CUSTOMER-INPUT-FILE IF WS-INPUT-STATUS NOT = "00" DISPLAY "❌ Error opening input file: " WS-INPUT-STATUS STOP RUN END-IF *> Open output files for writing OPEN OUTPUT CUSTOMER-OUTPUT-FILE IF WS-OUTPUT-STATUS NOT = "00" DISPLAY "❌ Error opening output file: " WS-OUTPUT-STATUS CLOSE CUSTOMER-INPUT-FILE STOP RUN END-IF OPEN OUTPUT REPORT-FILE IF WS-REPORT-STATUS NOT = "00" DISPLAY "❌ Error opening report file: " WS-REPORT-STATUS CLOSE CUSTOMER-INPUT-FILE CUSTOMER-OUTPUT-FILE STOP RUN END-IF OPEN OUTPUT ERROR-LOG-FILE IF WS-ERROR-STATUS NOT = "00" DISPLAY "❌ Error opening error log: " WS-ERROR-STATUS CLOSE CUSTOMER-INPUT-FILE CUSTOMER-OUTPUT-FILE REPORT-FILE STOP RUN END-IF DISPLAY "✅ All OUTPUT files opened successfully". PROCESS-CUSTOMER-DATA. DISPLAY "Processing customer data..." *> Write report header WRITE REPORT-RECORD FROM WS-HEADER-LINE WRITE REPORT-RECORD FROM SPACES *> Process customer records PERFORM UNTIL WS-INPUT-STATUS = "10" READ CUSTOMER-INPUT-FILE AT END MOVE "10" TO WS-INPUT-STATUS NOT AT END ADD 1 TO WS-RECORDS-READ PERFORM VALIDATE-AND-WRITE-CUSTOMER END-READ END-PERFORM DISPLAY "✅ Customer data processing complete" DISPLAY " Records read: " WS-RECORDS-READ DISPLAY " Records written: " WS-RECORDS-WRITTEN DISPLAY " Errors logged: " WS-ERRORS-LOGGED. VALIDATE-AND-WRITE-CUSTOMER. *> Simulate customer data parsing and validation MOVE CUSTOMER-INPUT-RECORD(1:8) TO CUST-ID MOVE CUSTOMER-INPUT-RECORD(9:30) TO CUST-NAME MOVE CUSTOMER-INPUT-RECORD(39:50) TO CUST-ADDRESS MOVE CUSTOMER-INPUT-RECORD(89:12) TO CUST-BALANCE *> Validate customer data IF CUST-ID IS NUMERIC AND CUST-ID > 0 IF CUST-NAME NOT = SPACES *> Write valid customer record WRITE CUSTOMER-OUTPUT-RECORD IF WS-OUTPUT-STATUS = "00" ADD 1 TO WS-RECORDS-WRITTEN PERFORM WRITE-CUSTOMER-TO-REPORT ELSE PERFORM LOG-WRITE-ERROR END-IF ELSE PERFORM LOG-VALIDATION-ERROR WITH "Empty customer name" END-IF ELSE PERFORM LOG-VALIDATION-ERROR WITH "Invalid customer ID" END-IF. WRITE-CUSTOMER-TO-REPORT. MOVE CUST-ID TO WS-DETAIL-ID MOVE CUST-NAME TO WS-DETAIL-NAME MOVE CUST-BALANCE TO WS-DETAIL-BALANCE WRITE REPORT-RECORD FROM WS-DETAIL-LINE IF WS-REPORT-STATUS NOT = "00" DISPLAY "Warning: Report write error: " WS-REPORT-STATUS END-IF. LOG-VALIDATION-ERROR. USING ERROR-DESCRIPTION. ADD 1 TO WS-ERRORS-LOGGED MOVE FUNCTION CURRENT-DATE TO WS-ERROR-TIME MOVE ERROR-DESCRIPTION TO WS-ERROR-DESCRIPTION MOVE CUSTOMER-INPUT-RECORD TO WS-ERROR-RECORD-DATA WRITE ERROR-LOG-RECORD FROM WS-ERROR-MESSAGE IF WS-ERROR-STATUS NOT = "00" DISPLAY "Critical: Cannot write to error log: " WS-ERROR-STATUS END-IF. LOG-WRITE-ERROR. ADD 1 TO WS-ERRORS-LOGGED MOVE FUNCTION CURRENT-DATE TO WS-ERROR-TIME STRING "Output file write error: " WS-OUTPUT-STATUS DELIMITED BY SIZE INTO WS-ERROR-DESCRIPTION MOVE CUSTOMER-INPUT-RECORD TO WS-ERROR-RECORD-DATA WRITE ERROR-LOG-RECORD FROM WS-ERROR-MESSAGE. GENERATE-PROCESSING-REPORT. DISPLAY "Generating processing summary report..." *> Write processing summary to report WRITE REPORT-RECORD FROM SPACES WRITE REPORT-RECORD FROM SPACES STRING "Processing Summary - " FUNCTION CURRENT-DATE(1:8) DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD STRING "Records Read: " WS-RECORDS-READ DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD STRING "Records Written: " WS-RECORDS-WRITTEN DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD STRING "Errors Encountered: " WS-ERRORS-LOGGED DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD DISPLAY "✅ Processing report generated". CLOSE-OUTPUT-FILES. DISPLAY "Closing OUTPUT files..." CLOSE CUSTOMER-INPUT-FILE CUSTOMER-OUTPUT-FILE REPORT-FILE ERROR-LOG-FILE DISPLAY "✅ All files closed successfully". DISPLAY-PROCESSING-SUMMARY. DISPLAY " " DISPLAY "📊 OUTPUT PROCESSING SUMMARY" DISPLAY "================================" DISPLAY "Input records processed: " WS-RECORDS-READ DISPLAY "Output records written: " WS-RECORDS-WRITTEN DISPLAY "Error records logged: " WS-ERRORS-LOGGED DISPLAY "Processing completion: " FUNCTION CURRENT-DATE(1:8) DISPLAY " " DISPLAY "📁 Files Created:" DISPLAY " • Customer output file (binary data)" DISPLAY " • Processing report (formatted text)" DISPLAY " • Error log (detailed error information)" DISPLAY " " DISPLAY "🎯 OUTPUT Features Demonstrated:" DISPLAY " • File creation and overwriting" DISPLAY " • Sequential record writing" DISPLAY " • Multiple output file handling" DISPLAY " • Error logging and reporting" DISPLAY " • Status checking and validation" DISPLAY " • Formatted report generation".