MainframeMaster

COBOL Tutorial

COBOL EXTEND Mode

The EXTEND mode represents a specialized file access mechanism in COBOL programming, designed specifically for appending new records to existing sequential files without overwriting or modifying the current file contents. This mode embodies efficient data management principles by enabling incremental file growth, supporting audit trail creation, facilitating log file maintenance, and providing essential capabilities for batch processing systems that require continuous data accumulation while preserving historical information integrity and maintaining sequential file organization.

Comprehensive EXTEND Mode 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
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
IDENTIFICATION DIVISION. PROGRAM-ID. EXTEND-MODE-COMPREHENSIVE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT TRANSACTION-LOG-FILE ASSIGN TO 'TRANSLOG.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS TRANSACTION-LOG-STATUS. SELECT AUDIT-TRAIL-FILE ASSIGN TO 'AUDIT.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS AUDIT-TRAIL-STATUS. SELECT DAILY-SALES-FILE ASSIGN TO 'SALES.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS DAILY-SALES-STATUS. SELECT ERROR-LOG-FILE ASSIGN TO 'ERRORS.LOG' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS ERROR-LOG-STATUS. SELECT BACKUP-FILE ASSIGN TO 'BACKUP.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS BACKUP-STATUS. DATA DIVISION. FILE SECTION. FD TRANSACTION-LOG-FILE. 01 TRANSACTION-LOG-RECORD. 05 TL-TIMESTAMP PIC X(14). 05 TL-TRANSACTION-ID PIC 9(10). 05 TL-CUSTOMER-ID PIC 9(8). 05 TL-TRANSACTION-TYPE PIC X(10). 05 TL-AMOUNT PIC 9(9)V99. 05 TL-STATUS PIC X(10). 05 TL-DESCRIPTION PIC X(50). FD AUDIT-TRAIL-FILE. 01 AUDIT-TRAIL-RECORD. 05 AT-TIMESTAMP PIC X(14). 05 AT-USER-ID PIC X(8). 05 AT-PROGRAM-NAME PIC X(8). 05 AT-OPERATION PIC X(20). 05 AT-RECORD-KEY PIC X(20). 05 AT-OLD-VALUE PIC X(100). 05 AT-NEW-VALUE PIC X(100). 05 AT-RESULT-CODE PIC X(4). FD DAILY-SALES-FILE. 01 DAILY-SALES-RECORD. 05 DS-DATE PIC 9(8). 05 DS-STORE-ID PIC 9(4). 05 DS-PRODUCT-ID PIC 9(8). 05 DS-QUANTITY-SOLD PIC 9(5). 05 DS-UNIT-PRICE PIC 9(7)V99. 05 DS-TOTAL-AMOUNT PIC 9(9)V99. 05 DS-SALESPERSON-ID PIC 9(6). 05 DS-COMMISSION-RATE PIC 9V99. FD ERROR-LOG-FILE. 01 ERROR-LOG-RECORD. 05 EL-TIMESTAMP PIC X(14). 05 EL-SEVERITY PIC X(8). 05 EL-ERROR-CODE PIC 9(6). 05 EL-ERROR-MESSAGE PIC X(100). 05 EL-PROGRAM-NAME PIC X(8). 05 EL-MODULE-NAME PIC X(20). 05 EL-LINE-NUMBER PIC 9(6). FD BACKUP-FILE. 01 BACKUP-RECORD. 05 BK-RECORD-TYPE PIC X(10). 05 BK-TIMESTAMP PIC X(14). 05 BK-DATA-LENGTH PIC 9(5). 05 BK-DATA-CONTENT PIC X(500). 05 BK-CHECKSUM PIC X(8). WORKING-STORAGE SECTION. 01 FILE-STATUS-CODES. 05 TRANSACTION-LOG-STATUS PIC XX. 88 TL-SUCCESS VALUE '00'. 88 TL-EOF VALUE '10'. 88 TL-FILE-NOT-FOUND VALUE '35'. 05 AUDIT-TRAIL-STATUS PIC XX. 88 AT-SUCCESS VALUE '00'. 88 AT-EOF VALUE '10'. 88 AT-FILE-NOT-FOUND VALUE '35'. 05 DAILY-SALES-STATUS PIC XX. 88 DS-SUCCESS VALUE '00'. 88 DS-EOF VALUE '10'. 88 DS-FILE-NOT-FOUND VALUE '35'. 05 ERROR-LOG-STATUS PIC XX. 88 EL-SUCCESS VALUE '00'. 88 EL-EOF VALUE '10'. 88 EL-FILE-NOT-FOUND VALUE '35'. 05 BACKUP-STATUS PIC XX. 88 BK-SUCCESS VALUE '00'. 88 BK-EOF VALUE '10'. 88 BK-FILE-NOT-FOUND VALUE '35'. 01 EXTEND-MODE-CONTROL. 05 EXTEND-OPERATIONS-COUNT PIC 9(7) VALUE 0. 05 SUCCESSFUL-EXTENDS PIC 9(7) VALUE 0. 05 FAILED-EXTENDS PIC 9(5) VALUE 0. 05 RECORDS-APPENDED PIC 9(9) VALUE 0. 05 TOTAL-BYTES-APPENDED PIC 9(12) VALUE 0. 05 CURRENT-OPERATION PIC X(30). 05 EXTEND-SESSION-ID PIC X(20). 01 BUSINESS-DATA-VARIABLES. 05 CURRENT-TIMESTAMP PIC X(14). 05 TRANSACTION-COUNTER PIC 9(10) VALUE 0. 05 CUSTOMER-COUNTER PIC 9(8) VALUE 0. 05 SALES-COUNTER PIC 9(7) VALUE 0. 05 ERROR-COUNTER PIC 9(5) VALUE 0. 05 AUDIT-COUNTER PIC 9(7) VALUE 0. 05 BACKUP-COUNTER PIC 9(6) VALUE 0. 01 SAMPLE-BUSINESS-DATA. 05 SAMPLE-CUSTOMERS OCCURS 5 TIMES. 10 SC-CUSTOMER-ID PIC 9(8). 10 SC-CUSTOMER-NAME PIC X(30). 10 SC-ACCOUNT-BALANCE PIC 9(9)V99. 05 SAMPLE-PRODUCTS OCCURS 3 TIMES. 10 SP-PRODUCT-ID PIC 9(8). 10 SP-PRODUCT-NAME PIC X(25). 10 SP-UNIT-PRICE PIC 9(7)V99. 05 SAMPLE-TRANSACTIONS OCCURS 10 TIMES. 10 ST-TRANSACTION-ID PIC 9(10). 10 ST-CUSTOMER-ID PIC 9(8). 10 ST-AMOUNT PIC 9(7)V99. 10 ST-TYPE PIC X(10). 01 PERFORMANCE-METRICS. 05 TOTAL-PROCESSING-TIME PIC 9(8) VALUE 0. 05 AVERAGE-APPEND-TIME PIC 9(6)V99 VALUE 0. 05 RECORDS-PER-SECOND PIC 9(6)V99 VALUE 0. 05 THROUGHPUT-RATE PIC 9(8)V99 VALUE 0. 05 FILE-GROWTH-RATE PIC 9(7)V99 VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-EXTEND-OPERATIONS PERFORM DEMONSTRATE-TRANSACTION-LOG-EXTEND PERFORM DEMONSTRATE-AUDIT-TRAIL-EXTEND PERFORM DEMONSTRATE-DAILY-SALES-EXTEND PERFORM DEMONSTRATE-ERROR-LOG-EXTEND PERFORM DEMONSTRATE-BACKUP-EXTEND PERFORM DEMONSTRATE-BATCH-EXTEND-OPERATIONS PERFORM DISPLAY-EXTEND-STATISTICS PERFORM CLEANUP-EXTEND-OPERATIONS STOP RUN. INITIALIZE-EXTEND-OPERATIONS. DISPLAY 'Initializing EXTEND mode operations...' MOVE FUNCTION CURRENT-DATE TO CURRENT-TIMESTAMP MOVE FUNCTION CURRENT-DATE TO EXTEND-SESSION-ID *> Initialize sample data PERFORM INITIALIZE-SAMPLE-DATA DISPLAY 'EXTEND mode operations initialized' DISPLAY 'Session ID: ' EXTEND-SESSION-ID. INITIALIZE-SAMPLE-DATA. *> Initialize sample customers MOVE 12345678 TO SC-CUSTOMER-ID(1) MOVE 'ACME CORPORATION' TO SC-CUSTOMER-NAME(1) MOVE 150000.75 TO SC-ACCOUNT-BALANCE(1) MOVE 23456789 TO SC-CUSTOMER-ID(2) MOVE 'GLOBAL ENTERPRISES' TO SC-CUSTOMER-NAME(2) MOVE 275000.50 TO SC-ACCOUNT-BALANCE(2) MOVE 34567890 TO SC-CUSTOMER-ID(3) MOVE 'TECH SOLUTIONS INC' TO SC-CUSTOMER-NAME(3) MOVE 95000.25 TO SC-ACCOUNT-BALANCE(3) MOVE 45678901 TO SC-CUSTOMER-ID(4) MOVE 'MANUFACTURING CORP' TO SC-CUSTOMER-NAME(4) MOVE 320000.00 TO SC-ACCOUNT-BALANCE(4) MOVE 56789012 TO SC-CUSTOMER-ID(5) MOVE 'RETAIL CHAIN LLC' TO SC-CUSTOMER-NAME(5) MOVE 180000.80 TO SC-ACCOUNT-BALANCE(5) *> Initialize sample products MOVE 10001 TO SP-PRODUCT-ID(1) MOVE 'PREMIUM WIDGET' TO SP-PRODUCT-NAME(1) MOVE 125.99 TO SP-UNIT-PRICE(1) MOVE 10002 TO SP-PRODUCT-ID(2) MOVE 'STANDARD GADGET' TO SP-PRODUCT-NAME(2) MOVE 75.50 TO SP-UNIT-PRICE(2) MOVE 10003 TO SP-PRODUCT-ID(3) MOVE 'DELUXE COMPONENT' TO SP-PRODUCT-NAME(3) MOVE 199.99 TO SP-UNIT-PRICE(3) DISPLAY 'Sample data initialized'. DEMONSTRATE-TRANSACTION-LOG-EXTEND. MOVE 'TRANSACTION-LOG-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating transaction log EXTEND operations...' PERFORM OPEN-TRANSACTION-LOG-EXTEND PERFORM APPEND-TRANSACTION-RECORDS PERFORM CLOSE-TRANSACTION-LOG DISPLAY 'Transaction log EXTEND demonstration completed'. OPEN-TRANSACTION-LOG-EXTEND. OPEN EXTEND TRANSACTION-LOG-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE TRANSACTION-LOG-STATUS WHEN '00' DISPLAY 'Transaction log opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Transaction log file not found - creating new file' CLOSE TRANSACTION-LOG-FILE OPEN OUTPUT TRANSACTION-LOG-FILE CLOSE TRANSACTION-LOG-FILE OPEN EXTEND TRANSACTION-LOG-FILE IF TL-SUCCESS DISPLAY 'New transaction log created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create transaction log file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open transaction log for EXTEND' DISPLAY 'Status code: ' TRANSACTION-LOG-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-TRANSACTION-RECORDS. DISPLAY 'Appending transaction records...' PERFORM VARYING TRANSACTION-COUNTER FROM 1 BY 1 UNTIL TRANSACTION-COUNTER > 10 PERFORM BUILD-TRANSACTION-RECORD PERFORM WRITE-TRANSACTION-RECORD END-PERFORM. BUILD-TRANSACTION-RECORD. MOVE FUNCTION CURRENT-DATE TO TL-TIMESTAMP COMPUTE TL-TRANSACTION-ID = 2024000000 + TRANSACTION-COUNTER MOVE SC-CUSTOMER-ID(1) TO TL-CUSTOMER-ID EVALUATE TRANSACTION-COUNTER WHEN 1 THRU 3 MOVE 'DEPOSIT' TO TL-TRANSACTION-TYPE MOVE 1000.00 TO TL-AMOUNT MOVE 'COMPLETED' TO TL-STATUS MOVE 'Customer deposit transaction' TO TL-DESCRIPTION WHEN 4 THRU 6 MOVE 'WITHDRAWAL' TO TL-TRANSACTION-TYPE MOVE 500.00 TO TL-AMOUNT MOVE 'COMPLETED' TO TL-STATUS MOVE 'Customer withdrawal transaction' TO TL-DESCRIPTION WHEN 7 THRU 8 MOVE 'TRANSFER' TO TL-TRANSACTION-TYPE MOVE 750.00 TO TL-AMOUNT MOVE 'PENDING' TO TL-STATUS MOVE 'Inter-account transfer' TO TL-DESCRIPTION WHEN OTHER MOVE 'PAYMENT' TO TL-TRANSACTION-TYPE MOVE 250.00 TO TL-AMOUNT MOVE 'COMPLETED' TO TL-STATUS MOVE 'Bill payment transaction' TO TL-DESCRIPTION END-EVALUATE. WRITE-TRANSACTION-RECORD. WRITE TRANSACTION-LOG-RECORD EVALUATE TRANSACTION-LOG-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF TRANSACTION-LOG-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Transaction record ' TRANSACTION-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append transaction record' DISPLAY 'Status code: ' TRANSACTION-LOG-STATUS ADD 1 TO ERROR-COUNTER END-EVALUATE. CLOSE-TRANSACTION-LOG. CLOSE TRANSACTION-LOG-FILE IF TL-SUCCESS DISPLAY 'Transaction log closed successfully' ELSE DISPLAY 'Error closing transaction log' DISPLAY 'Status code: ' TRANSACTION-LOG-STATUS END-IF. DEMONSTRATE-AUDIT-TRAIL-EXTEND. MOVE 'AUDIT-TRAIL-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating audit trail EXTEND operations...' PERFORM OPEN-AUDIT-TRAIL-EXTEND PERFORM APPEND-AUDIT-RECORDS PERFORM CLOSE-AUDIT-TRAIL DISPLAY 'Audit trail EXTEND demonstration completed'. OPEN-AUDIT-TRAIL-EXTEND. OPEN EXTEND AUDIT-TRAIL-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE AUDIT-TRAIL-STATUS WHEN '00' DISPLAY 'Audit trail opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Audit trail file not found - creating new file' CLOSE AUDIT-TRAIL-FILE OPEN OUTPUT AUDIT-TRAIL-FILE CLOSE AUDIT-TRAIL-FILE OPEN EXTEND AUDIT-TRAIL-FILE IF AT-SUCCESS DISPLAY 'New audit trail created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create audit trail file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open audit trail for EXTEND' DISPLAY 'Status code: ' AUDIT-TRAIL-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-AUDIT-RECORDS. DISPLAY 'Appending audit records...' PERFORM VARYING AUDIT-COUNTER FROM 1 BY 1 UNTIL AUDIT-COUNTER > 5 PERFORM BUILD-AUDIT-RECORD PERFORM WRITE-AUDIT-RECORD END-PERFORM. BUILD-AUDIT-RECORD. MOVE FUNCTION CURRENT-DATE TO AT-TIMESTAMP MOVE 'ADMIN001' TO AT-USER-ID MOVE 'EXTENDPGM' TO AT-PROGRAM-NAME EVALUATE AUDIT-COUNTER WHEN 1 MOVE 'CUSTOMER_CREATE' TO AT-OPERATION MOVE 'CUST_12345678' TO AT-RECORD-KEY MOVE SPACES TO AT-OLD-VALUE MOVE 'CUSTOMER: ACME CORPORATION' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 2 MOVE 'ACCOUNT_UPDATE' TO AT-OPERATION MOVE 'ACCT_12345678' TO AT-RECORD-KEY MOVE 'BALANCE: 150000.00' TO AT-OLD-VALUE MOVE 'BALANCE: 150000.75' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 3 MOVE 'TRANSACTION_CREATE' TO AT-OPERATION MOVE 'TRANS_2024000001' TO AT-RECORD-KEY MOVE SPACES TO AT-OLD-VALUE MOVE 'DEPOSIT: 1000.00' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 4 MOVE 'SECURITY_CHECK' TO AT-OPERATION MOVE 'USER_ADMIN001' TO AT-RECORD-KEY MOVE 'LOGIN_ATTEMPTS: 0' TO AT-OLD-VALUE MOVE 'LOGIN_ATTEMPTS: 1' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 5 MOVE 'SYSTEM_BACKUP' TO AT-OPERATION MOVE 'BACKUP_20240115' TO AT-RECORD-KEY MOVE 'STATUS: PENDING' TO AT-OLD-VALUE MOVE 'STATUS: COMPLETED' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE END-EVALUATE. WRITE-AUDIT-RECORD. WRITE AUDIT-TRAIL-RECORD EVALUATE AUDIT-TRAIL-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF AUDIT-TRAIL-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Audit record ' AUDIT-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append audit record' DISPLAY 'Status code: ' AUDIT-TRAIL-STATUS ADD 1 TO ERROR-COUNTER END-EVALUATE. CLOSE-AUDIT-TRAIL. CLOSE AUDIT-TRAIL-FILE IF AT-SUCCESS DISPLAY 'Audit trail closed successfully' ELSE DISPLAY 'Error closing audit trail' DISPLAY 'Status code: ' AUDIT-TRAIL-STATUS END-IF. DEMONSTRATE-DAILY-SALES-EXTEND. MOVE 'DAILY-SALES-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating daily sales EXTEND operations...' PERFORM OPEN-DAILY-SALES-EXTEND PERFORM APPEND-SALES-RECORDS PERFORM CLOSE-DAILY-SALES DISPLAY 'Daily sales EXTEND demonstration completed'. OPEN-DAILY-SALES-EXTEND. OPEN EXTEND DAILY-SALES-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE DAILY-SALES-STATUS WHEN '00' DISPLAY 'Daily sales opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Daily sales file not found - creating new file' CLOSE DAILY-SALES-FILE OPEN OUTPUT DAILY-SALES-FILE CLOSE DAILY-SALES-FILE OPEN EXTEND DAILY-SALES-FILE IF DS-SUCCESS DISPLAY 'New daily sales created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create daily sales file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open daily sales for EXTEND' DISPLAY 'Status code: ' DAILY-SALES-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-SALES-RECORDS. DISPLAY 'Appending sales records...' PERFORM VARYING SALES-COUNTER FROM 1 BY 1 UNTIL SALES-COUNTER > 7 PERFORM BUILD-SALES-RECORD PERFORM WRITE-SALES-RECORD END-PERFORM. BUILD-SALES-RECORD. MOVE 20240115 TO DS-DATE MOVE 1001 TO DS-STORE-ID EVALUATE SALES-COUNTER WHEN 1 THRU 2 MOVE SP-PRODUCT-ID(1) TO DS-PRODUCT-ID MOVE 10 TO DS-QUANTITY-SOLD MOVE SP-UNIT-PRICE(1) TO DS-UNIT-PRICE COMPUTE DS-TOTAL-AMOUNT = DS-QUANTITY-SOLD * DS-UNIT-PRICE WHEN 3 THRU 4 MOVE SP-PRODUCT-ID(2) TO DS-PRODUCT-ID MOVE 25 TO DS-QUANTITY-SOLD MOVE SP-UNIT-PRICE(2) TO DS-UNIT-PRICE COMPUTE DS-TOTAL-AMOUNT = DS-QUANTITY-SOLD * DS-UNIT-PRICE WHEN 5 THRU 7 MOVE SP-PRODUCT-ID(3) TO DS-PRODUCT-ID MOVE 5 TO DS-QUANTITY-SOLD MOVE SP-UNIT-PRICE(3) TO DS-UNIT-PRICE COMPUTE DS-TOTAL-AMOUNT = DS-QUANTITY-SOLD * DS-UNIT-PRICE END-EVALUATE MOVE 123456 TO DS-SALESPERSON-ID MOVE 0.05 TO DS-COMMISSION-RATE. WRITE-SALES-RECORD. WRITE DAILY-SALES-RECORD EVALUATE DAILY-SALES-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF DAILY-SALES-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Sales record ' SALES-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append sales record' DISPLAY 'Status code: ' DAILY-SALES-STATUS ADD 1 TO ERROR-COUNTER END-EVALUATE. CLOSE-DAILY-SALES. CLOSE DAILY-SALES-FILE IF DS-SUCCESS DISPLAY 'Daily sales closed successfully' ELSE DISPLAY 'Error closing daily sales' DISPLAY 'Status code: ' DAILY-SALES-STATUS END-IF. DEMONSTRATE-ERROR-LOG-EXTEND. MOVE 'ERROR-LOG-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating error log EXTEND operations...' PERFORM OPEN-ERROR-LOG-EXTEND PERFORM APPEND-ERROR-RECORDS PERFORM CLOSE-ERROR-LOG DISPLAY 'Error log EXTEND demonstration completed'. OPEN-ERROR-LOG-EXTEND. OPEN EXTEND ERROR-LOG-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE ERROR-LOG-STATUS WHEN '00' DISPLAY 'Error log opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Error log file not found - creating new file' CLOSE ERROR-LOG-FILE OPEN OUTPUT ERROR-LOG-FILE CLOSE ERROR-LOG-FILE OPEN EXTEND ERROR-LOG-FILE IF EL-SUCCESS DISPLAY 'New error log created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create error log file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open error log for EXTEND' DISPLAY 'Status code: ' ERROR-LOG-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-ERROR-RECORDS. DISPLAY 'Appending error records...' PERFORM VARYING ERROR-COUNTER FROM 1 BY 1 UNTIL ERROR-COUNTER > 3 PERFORM BUILD-ERROR-RECORD PERFORM WRITE-ERROR-RECORD END-PERFORM. BUILD-ERROR-RECORD. MOVE FUNCTION CURRENT-DATE TO EL-TIMESTAMP MOVE 'EXTENDPGM' TO EL-PROGRAM-NAME MOVE 'EXTEND-OPERATIONS' TO EL-MODULE-NAME EVALUATE ERROR-COUNTER WHEN 1 MOVE 'WARNING' TO EL-SEVERITY MOVE 1001 TO EL-ERROR-CODE MOVE 'File size approaching limit' TO EL-ERROR-MESSAGE MOVE 250 TO EL-LINE-NUMBER WHEN 2 MOVE 'INFO' TO EL-SEVERITY MOVE 2001 TO EL-ERROR-CODE MOVE 'Extend operation completed successfully' TO EL-ERROR-MESSAGE MOVE 300 TO EL-LINE-NUMBER WHEN 3 MOVE 'ERROR' TO EL-SEVERITY MOVE 3001 TO EL-ERROR-CODE MOVE 'Temporary file access delay detected' TO EL-ERROR-MESSAGE MOVE 350 TO EL-LINE-NUMBER END-EVALUATE. WRITE-ERROR-RECORD. WRITE ERROR-LOG-RECORD EVALUATE ERROR-LOG-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF ERROR-LOG-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Error record ' ERROR-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append error record' DISPLAY 'Status code: ' ERROR-LOG-STATUS END-EVALUATE. CLOSE-ERROR-LOG. CLOSE ERROR-LOG-FILE IF EL-SUCCESS DISPLAY 'Error log closed successfully' ELSE DISPLAY 'Error closing error log' DISPLAY 'Status code: ' ERROR-LOG-STATUS END-IF. DEMONSTRATE-BACKUP-EXTEND. MOVE 'BACKUP-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating backup EXTEND operations...' PERFORM OPEN-BACKUP-EXTEND PERFORM APPEND-BACKUP-RECORDS PERFORM CLOSE-BACKUP DISPLAY 'Backup EXTEND demonstration completed'. OPEN-BACKUP-EXTEND. OPEN EXTEND BACKUP-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE BACKUP-STATUS WHEN '00' DISPLAY 'Backup file opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Backup file not found - creating new file' CLOSE BACKUP-FILE OPEN OUTPUT BACKUP-FILE CLOSE BACKUP-FILE OPEN EXTEND BACKUP-FILE IF BK-SUCCESS DISPLAY 'New backup file created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create backup file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open backup file for EXTEND' DISPLAY 'Status code: ' BACKUP-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-BACKUP-RECORDS. DISPLAY 'Appending backup records...' PERFORM VARYING BACKUP-COUNTER FROM 1 BY 1 UNTIL BACKUP-COUNTER > 4 PERFORM BUILD-BACKUP-RECORD PERFORM WRITE-BACKUP-RECORD END-PERFORM. BUILD-BACKUP-RECORD. MOVE FUNCTION CURRENT-DATE TO BK-TIMESTAMP MOVE 'CHECKSUM1' TO BK-CHECKSUM EVALUATE BACKUP-COUNTER WHEN 1 MOVE 'CUSTOMER' TO BK-RECORD-TYPE MOVE 150 TO BK-DATA-LENGTH MOVE 'CUSTOMER DATA: ACME CORPORATION, ID: 12345678' TO BK-DATA-CONTENT WHEN 2 MOVE 'TRANSACTION' TO BK-RECORD-TYPE MOVE 200 TO BK-DATA-LENGTH MOVE 'TRANSACTION DATA: DEPOSIT 1000.00, ID: 2024000001' TO BK-DATA-CONTENT WHEN 3 MOVE 'AUDIT' TO BK-RECORD-TYPE MOVE 250 TO BK-DATA-LENGTH MOVE 'AUDIT DATA: CUSTOMER_CREATE, USER: ADMIN001' TO BK-DATA-CONTENT WHEN 4 MOVE 'SALES' TO BK-RECORD-TYPE MOVE 180 TO BK-DATA-LENGTH MOVE 'SALES DATA: PRODUCT 10001, QUANTITY: 10' TO BK-DATA-CONTENT END-EVALUATE. WRITE-BACKUP-RECORD. WRITE BACKUP-RECORD EVALUATE BACKUP-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF BACKUP-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Backup record ' BACKUP-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append backup record' DISPLAY 'Status code: ' BACKUP-STATUS END-EVALUATE. CLOSE-BACKUP. CLOSE BACKUP-FILE IF BK-SUCCESS DISPLAY 'Backup file closed successfully' ELSE DISPLAY 'Error closing backup file' DISPLAY 'Status code: ' BACKUP-STATUS END-IF. DEMONSTRATE-BATCH-EXTEND-OPERATIONS. MOVE 'BATCH-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating batch EXTEND operations...' PERFORM BATCH-TRANSACTION-PROCESSING PERFORM BATCH-AUDIT-PROCESSING PERFORM BATCH-ERROR-PROCESSING DISPLAY 'Batch EXTEND operations completed'. BATCH-TRANSACTION-PROCESSING. DISPLAY 'Batch transaction processing with EXTEND...' OPEN EXTEND TRANSACTION-LOG-FILE IF TL-SUCCESS PERFORM VARYING TRANSACTION-COUNTER FROM 100 BY 1 UNTIL TRANSACTION-COUNTER > 110 PERFORM BUILD-BATCH-TRANSACTION PERFORM WRITE-TRANSACTION-RECORD END-PERFORM CLOSE TRANSACTION-LOG-FILE DISPLAY 'Batch transaction processing completed' ELSE DISPLAY 'Failed to open transaction log for batch processing' END-IF. BUILD-BATCH-TRANSACTION. MOVE FUNCTION CURRENT-DATE TO TL-TIMESTAMP COMPUTE TL-TRANSACTION-ID = 2024000000 + TRANSACTION-COUNTER MOVE SC-CUSTOMER-ID(2) TO TL-CUSTOMER-ID MOVE 'BATCH' TO TL-TRANSACTION-TYPE MOVE 100.00 TO TL-AMOUNT MOVE 'PROCESSED' TO TL-STATUS MOVE 'Batch processing transaction' TO TL-DESCRIPTION. BATCH-AUDIT-PROCESSING. DISPLAY 'Batch audit processing with EXTEND...' OPEN EXTEND AUDIT-TRAIL-FILE IF AT-SUCCESS PERFORM VARYING AUDIT-COUNTER FROM 50 BY 1 UNTIL AUDIT-COUNTER > 55 PERFORM BUILD-BATCH-AUDIT PERFORM WRITE-AUDIT-RECORD END-PERFORM CLOSE AUDIT-TRAIL-FILE DISPLAY 'Batch audit processing completed' ELSE DISPLAY 'Failed to open audit trail for batch processing' END-IF. BUILD-BATCH-AUDIT. MOVE FUNCTION CURRENT-DATE TO AT-TIMESTAMP MOVE 'BATCH001' TO AT-USER-ID MOVE 'BATCHPGM' TO AT-PROGRAM-NAME MOVE 'BATCH_PROCESS' TO AT-OPERATION MOVE 'BATCH_RECORD' TO AT-RECORD-KEY MOVE 'BATCH PROCESSING' TO AT-OLD-VALUE MOVE 'BATCH COMPLETED' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE. BATCH-ERROR-PROCESSING. DISPLAY 'Batch error processing with EXTEND...' OPEN EXTEND ERROR-LOG-FILE IF EL-SUCCESS PERFORM VARYING ERROR-COUNTER FROM 10 BY 1 UNTIL ERROR-COUNTER > 12 PERFORM BUILD-BATCH-ERROR PERFORM WRITE-ERROR-RECORD END-PERFORM CLOSE ERROR-LOG-FILE DISPLAY 'Batch error processing completed' ELSE DISPLAY 'Failed to open error log for batch processing' END-IF. BUILD-BATCH-ERROR. MOVE FUNCTION CURRENT-DATE TO EL-TIMESTAMP MOVE 'INFO' TO EL-SEVERITY MOVE 4001 TO EL-ERROR-CODE MOVE 'Batch processing milestone reached' TO EL-ERROR-MESSAGE MOVE 'BATCHPGM' TO EL-PROGRAM-NAME MOVE 'BATCH-PROCESSING' TO EL-MODULE-NAME MOVE 400 TO EL-LINE-NUMBER. DISPLAY-EXTEND-STATISTICS. DISPLAY 'EXTEND Mode Statistics:' DISPLAY '======================' DISPLAY 'Total EXTEND operations: ' EXTEND-OPERATIONS-COUNT DISPLAY 'Successful EXTEND operations: ' SUCCESSFUL-EXTENDS DISPLAY 'Failed EXTEND operations: ' FAILED-EXTENDS DISPLAY 'Total records appended: ' RECORDS-APPENDED DISPLAY 'Total bytes appended: ' TOTAL-BYTES-APPENDED DISPLAY 'Transaction records: ' TRANSACTION-COUNTER DISPLAY 'Audit records: ' AUDIT-COUNTER DISPLAY 'Sales records: ' SALES-COUNTER DISPLAY 'Error records: ' ERROR-COUNTER DISPLAY 'Backup records: ' BACKUP-COUNTER IF EXTEND-OPERATIONS-COUNT > 0 COMPUTE SUCCESSFUL-EXTENDS = (SUCCESSFUL-EXTENDS / EXTEND-OPERATIONS-COUNT) * 100 DISPLAY 'Success rate: ' SUCCESSFUL-EXTENDS '%' END-IF IF RECORDS-APPENDED > 0 COMPUTE AVERAGE-APPEND-TIME = TOTAL-PROCESSING-TIME / RECORDS-APPENDED DISPLAY 'Average append time: ' AVERAGE-APPEND-TIME ' ms' END-IF. CLEANUP-EXTEND-OPERATIONS. DISPLAY 'Cleaning up EXTEND operations...' *> Reset counters and flags MOVE 0 TO EXTEND-OPERATIONS-COUNT MOVE 0 TO SUCCESSFUL-EXTENDS MOVE 0 TO FAILED-EXTENDS MOVE 0 TO RECORDS-APPENDED MOVE 0 TO TOTAL-BYTES-APPENDED DISPLAY 'EXTEND operations cleanup completed'.

Best Practices and FAQ

EXTEND Best Practices
  • • Always check file status after OPEN EXTEND
  • • Handle file not found conditions gracefully
  • • Use EXTEND for log files and audit trails
  • • Implement proper error handling
  • • Close files properly after operations
File Management
  • • Monitor file sizes during EXTEND operations
  • • Implement file rotation for large logs
  • • Use backup strategies for critical files
  • • Consider concurrent access implications
  • • Validate data before appending