MainframeMaster

COBOL Tutorial

COBOL RECORD

The RECORD keyword represents comprehensive data structure management and sophisticated record processing capabilities within COBOL programming environments, providing advanced record definition mechanisms for file processing operations, enhanced data organization features, and intelligent record-level data handling workflows that enable precise data structure control, complex record layout management, and systematic file processing architectures. This keyword embodies modern data management principles by supporting comprehensive record definitions, enabling sophisticated file record operations, and facilitating precise data organization requirements while maintaining record integrity, ensuring predictable data structures, and enabling flexible record processing architectures across enterprise applications requiring exact data layouts, record management capabilities, and reliable data processing throughout sophisticated business data scenarios and file management workflows.

RECORD Usage Patterns and Contexts

RECORD in Different COBOL Contexts
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
*> RECORD in File Description (FD) FD CUSTOMER-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 100 CHARACTERS BLOCK CONTAINS 0 RECORDS DATA RECORD IS CUSTOMER-RECORD. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC X(8). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-ADDRESS PIC X(50). 05 CUSTOMER-PHONE PIC X(12). *> RECORD in READ operations READ CUSTOMER-FILE RECORD AT END MOVE 'Y' TO EOF-FLAG NOT AT END PERFORM PROCESS-CUSTOMER-RECORD END-READ *> RECORD in WRITE operations WRITE CUSTOMER-RECORD INVALID KEY DISPLAY "Record write failed: " CUSTOMER-ID PERFORM ERROR-HANDLING NOT INVALID KEY DISPLAY "Record written successfully" END-WRITE *> Variable length RECORD definitions FD VARIABLE-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 50 TO 500 CHARACTERS DEPENDING ON RECORD-LENGTH DATA RECORD IS VARIABLE-RECORD. 01 VARIABLE-RECORD. 05 RECORD-TYPE PIC X(2). 05 RECORD-LENGTH PIC 9(3). 05 RECORD-DATA PIC X(495). *> Multiple RECORD formats in same file FD MIXED-RECORD-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 100 CHARACTERS DATA RECORDS ARE HEADER-RECORD, DETAIL-RECORD, TRAILER-RECORD. 01 HEADER-RECORD. 05 RECORD-TYPE PIC X(6) VALUE "HEADER". 05 FILE-DATE PIC 9(8). 05 TOTAL-RECORDS PIC 9(6). 05 FILLER PIC X(80). 01 DETAIL-RECORD. 05 RECORD-TYPE PIC X(6) VALUE "DETAIL". 05 TRANSACTION-ID PIC X(12). 05 AMOUNT PIC 9(8)V99. 05 DATE-PROCESSED PIC 9(8). 05 FILLER PIC X(64). 01 TRAILER-RECORD. 05 RECORD-TYPE PIC X(6) VALUE "TRAILER". 05 RECORD-COUNT PIC 9(8). 05 CONTROL-TOTAL PIC 9(12)V99. 05 FILLER PIC X(70). *> RECORD with OCCURS for repeated structures 01 BATCH-RECORD. 05 BATCH-HEADER. 10 BATCH-ID PIC X(8). 10 BATCH-DATE PIC 9(8). 10 ITEM-COUNT PIC 9(4). 05 BATCH-ITEMS OCCURS 1 TO 100 TIMES DEPENDING ON ITEM-COUNT. 10 ITEM-ID PIC X(12). 10 ITEM-QUANTITY PIC 9(6). 10 ITEM-PRICE PIC 9(6)V99. *> Indexed file RECORD processing FD INDEXED-CUSTOMER-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 200 CHARACTERS DATA RECORD IS INDEXED-CUSTOMER-RECORD. 01 INDEXED-CUSTOMER-RECORD. 05 CUSTOMER-KEY PIC X(8). 05 CUSTOMER-DATA. 10 CUSTOMER-NAME PIC X(40). 10 CUSTOMER-ADDRESS PIC X(100). 10 CUSTOMER-BALANCE PIC S9(8)V99. 10 LAST-UPDATE PIC 9(8). 05 FILLER PIC X(44). *> RECORD-level validation 01 RECORD-VALIDATION-FLAGS. 05 RECORD-VALID PIC X VALUE 'Y'. 05 VALIDATION-ERRORS. 10 MISSING-KEY PIC X VALUE 'N'. 10 INVALID-FORMAT PIC X VALUE 'N'. 10 DATA-CORRUPTION PIC X VALUE 'N'. *> Reading and validating records READ INDEXED-CUSTOMER-FILE RECORD KEY IS CUSTOMER-KEY INVALID KEY DISPLAY "Record not found: " CUSTOMER-KEY MOVE 'N' TO RECORD-VALID NOT INVALID KEY PERFORM VALIDATE-RECORD-DATA IF RECORD-VALID = 'Y' PERFORM PROCESS-VALID-RECORD ELSE PERFORM HANDLE-INVALID-RECORD END-IF END-READ *> Rewriting existing records REWRITE INDEXED-CUSTOMER-RECORD INVALID KEY DISPLAY "Cannot update record: " CUSTOMER-KEY PERFORM UPDATE-ERROR-HANDLING NOT INVALID KEY DISPLAY "Record updated successfully" PERFORM LOG-UPDATE-ACTIVITY END-REWRITE
Data Structure
File Processing
Record Management

Comprehensive RECORD Examples

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
IDENTIFICATION DIVISION. PROGRAM-ID. RECORD-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-CUST-STATUS. SELECT INDEXED-PRODUCT-FILE ASSIGN TO "PRODUCT.IDX" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS PRODUCT-KEY FILE STATUS IS WS-PROD-STATUS. SELECT VARIABLE-LOG-FILE ASSIGN TO "ACTIVITY.LOG" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-LOG-STATUS. DATA DIVISION. FILE SECTION. *> Fixed-length record file FD CUSTOMER-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 150 CHARACTERS BLOCK CONTAINS 0 RECORDS DATA RECORD IS CUSTOMER-RECORD. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC X(8). 05 CUSTOMER-NAME PIC X(40). 05 CUSTOMER-ADDRESS. 10 STREET-ADDRESS PIC X(30). 10 CITY PIC X(20). 10 STATE PIC X(2). 10 ZIP-CODE PIC X(10). 05 CUSTOMER-PHONE PIC X(15). 05 CUSTOMER-EMAIL PIC X(50). 05 ACCOUNT-BALANCE PIC S9(8)V99. 05 ACCOUNT-STATUS PIC X(1). 05 LAST-ACTIVITY-DATE PIC 9(8). 05 FILLER PIC X(6). *> Indexed file with complex record structure FD INDEXED-PRODUCT-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 300 CHARACTERS DATA RECORD IS PRODUCT-RECORD. 01 PRODUCT-RECORD. 05 PRODUCT-KEY PIC X(12). 05 PRODUCT-INFO. 10 PRODUCT-NAME PIC X(50). 10 PRODUCT-CATEGORY PIC X(20). 10 PRODUCT-DESCRIPTION PIC X(100). 05 PRICING-INFO. 10 UNIT-PRICE PIC 9(6)V99. 10 WHOLESALE-PRICE PIC 9(6)V99. 10 DISCOUNT-RATE PIC 9(2)V99. 05 INVENTORY-INFO. 10 QUANTITY-ON-HAND PIC 9(6). 10 REORDER-LEVEL PIC 9(6). 10 SUPPLIER-ID PIC X(8). 05 STATUS-INFO. 10 PRODUCT-STATUS PIC X(1). 10 LAST-ORDER-DATE PIC 9(8). 10 LAST-SALE-DATE PIC 9(8). 05 FILLER PIC X(76). *> Variable-length record file FD VARIABLE-LOG-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 50 TO 1000 CHARACTERS DEPENDING ON LOG-RECORD-LENGTH DATA RECORD IS LOG-RECORD. 01 LOG-RECORD. 05 LOG-RECORD-LENGTH PIC 9(4). 05 LOG-TIMESTAMP PIC X(26). 05 LOG-LEVEL PIC X(8). 05 LOG-SOURCE PIC X(16). 05 LOG-MESSAGE PIC X(946). WORKING-STORAGE SECTION. *> File status and control variables 01 WS-FILE-STATUS. 05 WS-CUST-STATUS PIC X(2). 05 WS-PROD-STATUS PIC X(2). 05 WS-LOG-STATUS PIC X(2). *> Processing control variables 01 WS-PROCESSING-CONTROL. 05 WS-EOF-FLAGS. 10 WS-CUST-EOF PIC X VALUE 'N'. 10 WS-PROD-EOF PIC X VALUE 'N'. 10 WS-LOG-EOF PIC X VALUE 'N'. 05 WS-RECORD-COUNTERS. 10 WS-CUST-RECORDS-READ PIC 9(8) VALUE 0. 10 WS-CUST-RECORDS-WRITTEN PIC 9(8) VALUE 0. 10 WS-PROD-RECORDS-READ PIC 9(6) VALUE 0. 10 WS-PROD-RECORDS-UPDATED PIC 9(6) VALUE 0. 10 WS-LOG-RECORDS-WRITTEN PIC 9(8) VALUE 0. *> Record validation structures 01 WS-RECORD-VALIDATION. 05 WS-VALIDATION-STATUS PIC X VALUE 'Y'. 05 WS-ERROR-COUNT PIC 9(4) VALUE 0. 05 WS-WARNING-COUNT PIC 9(4) VALUE 0. 05 WS-ERROR-DETAILS PIC X(200). *> Business processing variables 01 WS-BUSINESS-PROCESSING. 05 WS-TOTAL-BALANCE PIC S9(12)V99 VALUE 0. 05 WS-ACTIVE-CUSTOMERS PIC 9(8) VALUE 0. 05 WS-INACTIVE-CUSTOMERS PIC 9(6) VALUE 0. 05 WS-HIGH-VALUE-CUSTOMERS PIC 9(6) VALUE 0. *> Record buffer for processing 01 WS-RECORD-BUFFER. 05 WS-BUFFER-CUSTOMER-RECORD PIC X(150). 05 WS-BUFFER-PRODUCT-RECORD PIC X(300). 05 WS-BUFFER-LOG-RECORD PIC X(1000). *> Dynamic record length control 01 WS-RECORD-LENGTH-CONTROL. 05 LOG-RECORD-LENGTH PIC 9(4). 05 WS-CURRENT-LOG-SIZE PIC 9(4). 05 WS-MAX-LOG-SIZE PIC 9(4) VALUE 1000. PROCEDURE DIVISION. MAIN-RECORD-DEMO. DISPLAY "=== COBOL RECORD PROCESSING DEMONSTRATION ===" DISPLAY SPACES PERFORM DEMONSTRATE-FIXED-RECORD-PROCESSING PERFORM DEMONSTRATE-INDEXED-RECORD-OPERATIONS PERFORM DEMONSTRATE-VARIABLE-RECORD-HANDLING PERFORM DEMONSTRATE-RECORD-VALIDATION PERFORM DEMONSTRATE-MULTI-RECORD-TYPES PERFORM DEMONSTRATE-RECORD-UPDATING PERFORM DISPLAY-PROCESSING-SUMMARY DISPLAY "=== RECORD DEMONSTRATION COMPLETE ===" STOP RUN. DEMONSTRATE-FIXED-RECORD-PROCESSING. DISPLAY "=== FIXED-LENGTH RECORD PROCESSING ===" DISPLAY SPACES DISPLAY "Processing fixed-length customer records..." OPEN INPUT CUSTOMER-FILE IF WS-CUST-STATUS NOT = "00" DISPLAY " ❌ Error opening customer file: " WS-CUST-STATUS GO TO END-FIXED-PROCESSING END-IF DISPLAY " βœ… Customer file opened successfully" *> Read and process all customer records READ CUSTOMER-FILE RECORD AT END MOVE 'Y' TO WS-CUST-EOF DISPLAY " πŸ“­ Customer file is empty" NOT AT END ADD 1 TO WS-CUST-RECORDS-READ DISPLAY " πŸ“„ Reading customer records..." END-READ PERFORM UNTIL WS-CUST-EOF = 'Y' *> Process current customer record PERFORM PROCESS-CUSTOMER-RECORD *> Read next record READ CUSTOMER-FILE RECORD AT END MOVE 'Y' TO WS-CUST-EOF DISPLAY " βœ… All customer records processed" NOT AT END ADD 1 TO WS-CUST-RECORDS-READ END-READ END-PERFORM CLOSE CUSTOMER-FILE END-FIXED-PROCESSING. DISPLAY " πŸ“Š Fixed-length processing summary:" DISPLAY " Records read: " WS-CUST-RECORDS-READ DISPLAY " Active customers: " WS-ACTIVE-CUSTOMERS DISPLAY " Inactive customers: " WS-INACTIVE-CUSTOMERS DISPLAY " Total balance: $" WS-TOTAL-BALANCE DISPLAY SPACES. PROCESS-CUSTOMER-RECORD. DISPLAY " Processing customer: " CUSTOMER-ID " - " CUSTOMER-NAME *> Validate record structure PERFORM VALIDATE-CUSTOMER-RECORD IF WS-VALIDATION-STATUS = 'Y' *> Process valid customer data ADD ACCOUNT-BALANCE TO WS-TOTAL-BALANCE IF ACCOUNT-STATUS = 'A' ADD 1 TO WS-ACTIVE-CUSTOMERS IF ACCOUNT-BALANCE > 10000 ADD 1 TO WS-HIGH-VALUE-CUSTOMERS DISPLAY " πŸ’° High-value customer: $" ACCOUNT-BALANCE END-IF ELSE ADD 1 TO WS-INACTIVE-CUSTOMERS DISPLAY " ⏸️ Inactive customer account" END-IF *> Log customer processing PERFORM LOG-CUSTOMER-ACTIVITY ELSE DISPLAY " ❌ Invalid customer record: " WS-ERROR-DETAILS ADD 1 TO WS-ERROR-COUNT END-IF. DEMONSTRATE-INDEXED-RECORD-OPERATIONS. DISPLAY "=== INDEXED RECORD OPERATIONS ===" DISPLAY SPACES DISPLAY "Processing indexed product records..." OPEN I-O INDEXED-PRODUCT-FILE IF WS-PROD-STATUS NOT = "00" DISPLAY " ❌ Error opening product file: " WS-PROD-STATUS GO TO END-INDEXED-PROCESSING END-IF DISPLAY " βœ… Product file opened for I-O" *> Read specific product by key MOVE "PROD001234" TO PRODUCT-KEY READ INDEXED-PRODUCT-FILE RECORD KEY IS PRODUCT-KEY INVALID KEY DISPLAY " ❌ Product not found: " PRODUCT-KEY PERFORM CREATE-NEW-PRODUCT-RECORD NOT INVALID KEY ADD 1 TO WS-PROD-RECORDS-READ DISPLAY " βœ… Product found: " PRODUCT-NAME PERFORM PROCESS-PRODUCT-RECORD END-READ *> Sequential processing of all products PERFORM READ-ALL-PRODUCTS CLOSE INDEXED-PRODUCT-FILE END-INDEXED-PROCESSING. DISPLAY " πŸ“Š Indexed processing summary:" DISPLAY " Records read: " WS-PROD-RECORDS-READ DISPLAY " Records updated: " WS-PROD-RECORDS-UPDATED DISPLAY SPACES. READ-ALL-PRODUCTS. DISPLAY " πŸ“– Reading all products sequentially..." READ INDEXED-PRODUCT-FILE NEXT RECORD AT END MOVE 'Y' TO WS-PROD-EOF NOT AT END ADD 1 TO WS-PROD-RECORDS-READ DISPLAY " Product: " PRODUCT-KEY " - " PRODUCT-NAME END-READ PERFORM UNTIL WS-PROD-EOF = 'Y' *> Update inventory if needed IF QUANTITY-ON-HAND < REORDER-LEVEL PERFORM UPDATE-PRODUCT-STATUS END-IF READ INDEXED-PRODUCT-FILE NEXT RECORD AT END MOVE 'Y' TO WS-PROD-EOF NOT AT END ADD 1 TO WS-PROD-RECORDS-READ END-READ END-PERFORM. PROCESS-PRODUCT-RECORD. DISPLAY " Product Details:" DISPLAY " Name: " PRODUCT-NAME DISPLAY " Category: " PRODUCT-CATEGORY DISPLAY " Price: $" UNIT-PRICE DISPLAY " Quantity: " QUANTITY-ON-HAND DISPLAY " Status: " PRODUCT-STATUS *> Business logic processing IF QUANTITY-ON-HAND = 0 MOVE 'O' TO PRODUCT-STATUS *> Out of stock PERFORM UPDATE-PRODUCT-RECORD ELSE IF QUANTITY-ON-HAND < REORDER-LEVEL DISPLAY " ⚠️ Reorder needed (level: " REORDER-LEVEL ")" PERFORM CREATE-REORDER-REQUEST END-IF. UPDATE-PRODUCT-RECORD. REWRITE PRODUCT-RECORD INVALID KEY DISPLAY " ❌ Cannot update product: " PRODUCT-KEY NOT INVALID KEY ADD 1 TO WS-PROD-RECORDS-UPDATED DISPLAY " βœ… Product record updated" END-REWRITE. DEMONSTRATE-VARIABLE-RECORD-HANDLING. DISPLAY "=== VARIABLE-LENGTH RECORD HANDLING ===" DISPLAY SPACES DISPLAY "Processing variable-length log records..." OPEN OUTPUT VARIABLE-LOG-FILE IF WS-LOG-STATUS NOT = "00" DISPLAY " ❌ Error opening log file: " WS-LOG-STATUS GO TO END-VARIABLE-PROCESSING END-IF DISPLAY " βœ… Log file opened for output" *> Write various sized log records PERFORM WRITE-SHORT-LOG-RECORD PERFORM WRITE-MEDIUM-LOG-RECORD PERFORM WRITE-LONG-LOG-RECORD CLOSE VARIABLE-LOG-FILE END-VARIABLE-PROCESSING. DISPLAY " πŸ“Š Variable-length processing summary:" DISPLAY " Log records written: " WS-LOG-RECORDS-WRITTEN DISPLAY SPACES. WRITE-SHORT-LOG-RECORD. MOVE 100 TO LOG-RECORD-LENGTH MOVE FUNCTION CURRENT-DATE TO LOG-TIMESTAMP MOVE "INFO" TO LOG-LEVEL MOVE "RECORD-DEMO" TO LOG-SOURCE MOVE "Short log message for testing" TO LOG-MESSAGE(1:30) WRITE LOG-RECORD INVALID KEY DISPLAY " ❌ Error writing short log record" NOT INVALID KEY ADD 1 TO WS-LOG-RECORDS-WRITTEN DISPLAY " βœ… Short log record written (100 chars)" END-WRITE. WRITE-MEDIUM-LOG-RECORD. MOVE 250 TO LOG-RECORD-LENGTH MOVE FUNCTION CURRENT-DATE TO LOG-TIMESTAMP MOVE "WARNING" TO LOG-LEVEL MOVE "RECORD-DEMO" TO LOG-SOURCE STRING "Medium-length log message with more detailed information " "about processing status and operational details that " "require more space for complete documentation" DELIMITED BY SIZE INTO LOG-MESSAGE WRITE LOG-RECORD INVALID KEY DISPLAY " ❌ Error writing medium log record" NOT INVALID KEY ADD 1 TO WS-LOG-RECORDS-WRITTEN DISPLAY " βœ… Medium log record written (250 chars)" END-WRITE. WRITE-LONG-LOG-RECORD. MOVE 500 TO LOG-RECORD-LENGTH MOVE FUNCTION CURRENT-DATE TO LOG-TIMESTAMP MOVE "ERROR" TO LOG-LEVEL MOVE "RECORD-DEMO" TO LOG-SOURCE STRING "Long log record containing extensive error details, " "stack trace information, system state data, and " "comprehensive diagnostic information that requires " "significant space for complete error documentation. " "This includes timing data, memory usage, file status, " "database connection states, and user context information " "necessary for thorough problem analysis and resolution." DELIMITED BY SIZE INTO LOG-MESSAGE WRITE LOG-RECORD INVALID KEY DISPLAY " ❌ Error writing long log record" NOT INVALID KEY ADD 1 TO WS-LOG-RECORDS-WRITTEN DISPLAY " βœ… Long log record written (500 chars)" END-WRITE. DEMONSTRATE-RECORD-VALIDATION. DISPLAY "=== RECORD VALIDATION PROCEDURES ===" DISPLAY SPACES DISPLAY "Testing record validation scenarios..." *> Test with valid record MOVE "CUST0001" TO CUSTOMER-ID MOVE "John Smith" TO CUSTOMER-NAME MOVE "123 Main St" TO STREET-ADDRESS MOVE "Anytown" TO CITY MOVE "CA" TO STATE MOVE "12345" TO ZIP-CODE MOVE "555-1234" TO CUSTOMER-PHONE MOVE "john@email.com" TO CUSTOMER-EMAIL MOVE 1500.00 TO ACCOUNT-BALANCE MOVE "A" TO ACCOUNT-STATUS MOVE 20231201 TO LAST-ACTIVITY-DATE PERFORM VALIDATE-CUSTOMER-RECORD IF WS-VALIDATION-STATUS = 'Y' DISPLAY " βœ… Valid customer record passed validation" ELSE DISPLAY " ❌ Valid record failed validation: " WS-ERROR-DETAILS END-IF *> Test with invalid record MOVE SPACES TO CUSTOMER-ID MOVE -500.00 TO ACCOUNT-BALANCE MOVE "X" TO ACCOUNT-STATUS PERFORM VALIDATE-CUSTOMER-RECORD IF WS-VALIDATION-STATUS = 'N' DISPLAY " βœ… Invalid record correctly rejected" DISPLAY " Error: " WS-ERROR-DETAILS ELSE DISPLAY " ❌ Invalid record incorrectly passed validation" END-IF DISPLAY SPACES. VALIDATE-CUSTOMER-RECORD. MOVE 'Y' TO WS-VALIDATION-STATUS MOVE SPACES TO WS-ERROR-DETAILS *> Validate customer ID IF CUSTOMER-ID = SPACES MOVE 'N' TO WS-VALIDATION-STATUS STRING "Missing customer ID; " DELIMITED BY SIZE WS-ERROR-DETAILS DELIMITED BY " " INTO WS-ERROR-DETAILS END-IF *> Validate account balance IF ACCOUNT-BALANCE < 0 AND ACCOUNT-STATUS NOT = 'O' MOVE 'N' TO WS-VALIDATION-STATUS STRING WS-ERROR-DETAILS DELIMITED BY " " "Negative balance without overdraft; " INTO WS-ERROR-DETAILS END-IF *> Validate account status IF ACCOUNT-STATUS NOT = 'A' AND ACCOUNT-STATUS NOT = 'I' AND ACCOUNT-STATUS NOT = 'C' AND ACCOUNT-STATUS NOT = 'O' MOVE 'N' TO WS-VALIDATION-STATUS STRING WS-ERROR-DETAILS DELIMITED BY " " "Invalid account status code" INTO WS-ERROR-DETAILS END-IF. DEMONSTRATE-MULTI-RECORD-TYPES. DISPLAY "=== MULTI-RECORD TYPE PROCESSING ===" DISPLAY SPACES DISPLAY "Processing file with multiple record types..." *> Simulate different record types PERFORM PROCESS-HEADER-RECORD-TYPE PERFORM PROCESS-DETAIL-RECORD-TYPE PERFORM PROCESS-TRAILER-RECORD-TYPE DISPLAY SPACES. PROCESS-HEADER-RECORD-TYPE. MOVE "HEADER" TO RECORD-TYPE OF HEADER-RECORD MOVE 20231201 TO FILE-DATE MOVE 1500 TO TOTAL-RECORDS DISPLAY " πŸ“‹ Processing HEADER record:" DISPLAY " File date: " FILE-DATE DISPLAY " Expected records: " TOTAL-RECORDS. PROCESS-DETAIL-RECORD-TYPE. MOVE "DETAIL" TO RECORD-TYPE OF DETAIL-RECORD MOVE "TXN123456789" TO TRANSACTION-ID MOVE 125.50 TO AMOUNT MOVE 20231201 TO DATE-PROCESSED DISPLAY " πŸ“„ Processing DETAIL record:" DISPLAY " Transaction: " TRANSACTION-ID DISPLAY " Amount: $" AMOUNT DISPLAY " Date: " DATE-PROCESSED. PROCESS-TRAILER-RECORD-TYPE. MOVE "TRAILER" TO RECORD-TYPE OF TRAILER-RECORD MOVE 1500 TO RECORD-COUNT MOVE 187500.75 TO CONTROL-TOTAL DISPLAY " πŸ“Š Processing TRAILER record:" DISPLAY " Record count: " RECORD-COUNT DISPLAY " Control total: $" CONTROL-TOTAL. DEMONSTRATE-RECORD-UPDATING. DISPLAY "=== RECORD UPDATE OPERATIONS ===" DISPLAY SPACES DISPLAY "Testing record update scenarios..." *> Simulate record updates DISPLAY " πŸ”„ Updating customer record..." MOVE "CUST0001" TO CUSTOMER-ID MOVE 2500.00 TO ACCOUNT-BALANCE MOVE FUNCTION CURRENT-DATE(1:8) TO LAST-ACTIVITY-DATE DISPLAY " Updated balance: $" ACCOUNT-BALANCE DISPLAY " Updated date: " LAST-ACTIVITY-DATE DISPLAY " βœ… Record update simulation complete" DISPLAY SPACES. DISPLAY-PROCESSING-SUMMARY. DISPLAY "=== RECORD PROCESSING SUMMARY ===" DISPLAY SPACES DISPLAY "Processing Statistics:" DISPLAY " πŸ“„ Customer records read: " WS-CUST-RECORDS-READ DISPLAY " πŸ“„ Customer records written: " WS-CUST-RECORDS-WRITTEN DISPLAY " πŸ“¦ Product records read: " WS-PROD-RECORDS-READ DISPLAY " πŸ“¦ Product records updated: " WS-PROD-RECORDS-UPDATED DISPLAY " πŸ“ Log records written: " WS-LOG-RECORDS-WRITTEN DISPLAY " " DISPLAY "Business Metrics:" DISPLAY " πŸ‘₯ Active customers: " WS-ACTIVE-CUSTOMERS DISPLAY " πŸ’€ Inactive customers: " WS-INACTIVE-CUSTOMERS DISPLAY " πŸ’° High-value customers: " WS-HIGH-VALUE-CUSTOMERS DISPLAY " πŸ’΅ Total balance: $" WS-TOTAL-BALANCE DISPLAY " " DISPLAY "Quality Metrics:" DISPLAY " ❌ Validation errors: " WS-ERROR-COUNT DISPLAY " ⚠️ Validation warnings: " WS-WARNING-COUNT DISPLAY " " DISPLAY "RECORD Features Demonstrated:" DISPLAY " βœ“ Fixed-length record processing" DISPLAY " βœ“ Variable-length record handling" DISPLAY " βœ“ Indexed record operations" DISPLAY " βœ“ Multi-record type processing" DISPLAY " βœ“ Record validation procedures" DISPLAY " βœ“ Record update operations" DISPLAY " βœ“ File status and error handling" DISPLAY " βœ“ Business logic integration" DISPLAY SPACES. *> Supporting procedures LOG-CUSTOMER-ACTIVITY. DISPLAY " πŸ“ Logging customer activity for: " CUSTOMER-ID. CREATE-NEW-PRODUCT-RECORD. DISPLAY " πŸ†• Creating new product record: " PRODUCT-KEY. CREATE-REORDER-REQUEST. DISPLAY " πŸ“‹ Creating reorder request for: " PRODUCT-KEY. UPDATE-PRODUCT-STATUS. DISPLAY " πŸ”„ Updating product status for: " PRODUCT-KEY.

RECORD Features and Capabilities

Record Types
  • β€’ Fixed-length records
  • β€’ Variable-length records
  • β€’ Multiple record formats
  • β€’ Complex nested structures
File Operations
  • β€’ Sequential record processing
  • β€’ Random record access
  • β€’ Record reading and writing
  • β€’ Record updating and deletion
Data Management
  • β€’ Record structure validation
  • β€’ Data integrity checking
  • β€’ Record size management
  • β€’ Field-level processing
Business Applications
  • β€’ Customer data management
  • β€’ Transaction processing
  • β€’ Inventory management
  • β€’ Audit trail maintenance

Best Practices