MainframeMaster

COBOL Tutorial

COBOL OUTPUT

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.

OUTPUT File Operations

Basic OUTPUT Usage and File Creation
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
*> 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
File Creation
Data Writing
Output Processing

Advanced OUTPUT Patterns

Report Generation
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
*> 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
Data Export
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
*> 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

Comprehensive OUTPUT 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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
IDENTIFICATION 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".

OUTPUT Features and Capabilities

File Creation
  • • Creates new files from scratch
  • • Overwrites existing files
  • • Sequential write positioning
  • • Automatic file initialization
Write Operations
  • • Sequential record writing
  • • Formatted data output
  • • Multiple record types
  • • Write status checking
Report Generation
  • • Formatted report creation
  • • Header and detail lines
  • • Summary information
  • • Multi-column layouts
Data Export
  • • CSV and text file creation
  • • Data transformation
  • • Format conversion
  • • Batch processing output

Related Pages