MainframeMaster

COBOL Tutorial

COBOL FILE-CONTROL Section

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.

Comprehensive FILE-CONTROL 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
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
IDENTIFICATION 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.

Best Practices and FAQ

FILE-CONTROL Best Practices
  • • Use meaningful file names and assignments
  • • Specify appropriate file organizations
  • • Include FILE STATUS for error handling
  • • Configure proper RESERVE areas
  • • Use LOCK MODE for concurrent access
Configuration Guidelines
  • • Match organization to access patterns
  • • Plan key structures for indexed files
  • • Consider performance implications
  • • Document file characteristics
  • • Test file configurations thoroughly