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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126*> 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580IDENTIFICATION 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.