The END-UNSTRING statement represents a fundamental component of string parsing and data extraction operations in COBOL, serving as an explicit scope terminator that clearly defines the boundaries of UNSTRING statement blocks. This statement embodies modern text processing principles by providing unambiguous termination points for string decomposition operations, enabling sophisticated parsing algorithms for delimited data, and supporting the development of robust data processing applications that require precise control over string parsing operations and field extraction procedures.
In contemporary enterprise COBOL development, END-UNSTRING plays a vital role in creating sophisticated data parsing systems that must handle various delimiter patterns, field validation requirements, and complex data transformation scenarios. By providing explicit termination for UNSTRING blocks, this statement enables developers to implement comprehensive string parsing logic while maintaining code clarity and ensuring that decomposition operations are properly bounded and controlled within the application's data processing flow.
The END-UNSTRING statement implements sophisticated scope management for string parsing operations. This architecture addresses the complexity inherent in modern data processing scenarios where UNSTRING statements must manage delimiter recognition, field boundary detection, overflow conditions, and data validation requirements. The explicit termination provided by END-UNSTRING ensures that all these operations are properly contained within defined boundaries.
The architectural design of END-UNSTRING reflects the evolution of COBOL toward robust text processing paradigms that emphasize data integrity, proper error handling, and maintainable code organization. When used with conditional phrases like OVERFLOW and NOT ON OVERFLOW, END-UNSTRING creates a comprehensive framework for handling both successful parsing operations and various error conditions that may arise during string decomposition processes.
END-UNSTRING also plays a crucial role in data validation and field management. Modern COBOL implementations can perform more sophisticated analysis when parsing boundaries are explicitly defined, leading to better field validation, more efficient delimiter processing, and improved data integrity management for complex string parsing scenarios.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534IDENTIFICATION DIVISION. PROGRAM-ID. END-UNSTRING-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 STRING-PARSING-AREAS. 05 INPUT-DATA-RECORDS. 10 CSV-RECORD PIC X(200) VALUE 'JOHN,SMITH,ENGINEER,75000,IT,2022-01-15'. 10 PIPE-DELIMITED PIC X(150) VALUE 'JANE|DOE|MANAGER|85000|HR|2021-05-20'. 10 MIXED-DELIMITED PIC X(180) VALUE 'BOB;JOHNSON,ANALYST:65000|FINANCE;2023-03-10'. 10 FIXED-WIDTH-DATA PIC X(120) VALUE 'ALICE BROWN DIRECTOR 95000SALES '. 05 PARSED-OUTPUT-FIELDS. 10 EMPLOYEE-FIRST-NAME PIC X(20). 10 EMPLOYEE-LAST-NAME PIC X(25). 10 EMPLOYEE-TITLE PIC X(20). 10 EMPLOYEE-SALARY PIC 9(7). 10 EMPLOYEE-DEPARTMENT PIC X(15). 10 EMPLOYEE-HIRE-DATE PIC X(10). 01 PARSING-CONTROLS. 05 PARSING-STATISTICS. 10 FIELDS-EXTRACTED PIC 9(3) VALUE 0. 10 PARSING-OPERATIONS PIC 9(5) VALUE 0. 10 SUCCESSFUL-PARSES PIC 9(5) VALUE 0. 10 OVERFLOW-ERRORS PIC 9(3) VALUE 0. 10 DELIMITER-ERRORS PIC 9(3) VALUE 0. 05 FIELD-COUNTERS. 10 FIELD-COUNT PIC 9(2) VALUE 0. 10 EXPECTED-FIELDS PIC 9(2) VALUE 6. 10 ACTUAL-FIELDS PIC 9(2) VALUE 0. 05 PARSING-FLAGS. 10 PARSING-SUCCESS PIC X VALUE 'N'. 88 PARSE-OK VALUE 'Y'. 88 PARSE-FAILED VALUE 'N'. 01 ADVANCED-PARSING-CONTROLS. 05 DELIMITER-MANAGEMENT. 10 PRIMARY-DELIMITER PIC X VALUE ','. 10 SECONDARY-DELIMITER PIC X VALUE '|'. 10 TERTIARY-DELIMITER PIC X VALUE ';'. 10 SPACE-DELIMITER PIC X VALUE ' '. 10 COLON-DELIMITER PIC X VALUE ':'. 05 FIELD-VALIDATION. 10 MIN-FIELD-LENGTH PIC 9(2) VALUE 1. 10 MAX-FIELD-LENGTH PIC 9(2) VALUE 50. 10 NUMERIC-VALIDATION PIC X VALUE 'N'. 88 VALIDATE-NUMERIC VALUE 'Y'. 88 SKIP-VALIDATION VALUE 'N'. 01 ERROR-HANDLING-SYSTEM. 05 ERROR-TRACKING. 10 ERROR-COUNT PIC 9(3) VALUE 0. 10 LAST-ERROR-TYPE PIC X(10). 10 ERROR-FIELD-NUMBER PIC 9(2) VALUE 0. 10 ERROR-DESCRIPTION PIC X(80). PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-PARSING-SYSTEM PERFORM DEMONSTRATE-BASIC-CSV-PARSING PERFORM DEMONSTRATE-PIPE-DELIMITED-PARSING PERFORM DEMONSTRATE-MIXED-DELIMITER-PARSING PERFORM DEMONSTRATE-ADVANCED-PARSING-TECHNIQUES PERFORM DEMONSTRATE-ERROR-HANDLING-SCENARIOS PERFORM DISPLAY-PARSING-STATISTICS STOP RUN. INITIALIZE-PARSING-SYSTEM. DISPLAY 'Initializing string parsing system...' MOVE 0 TO FIELDS-EXTRACTED MOVE 0 TO PARSING-OPERATIONS MOVE 0 TO SUCCESSFUL-PARSES MOVE 0 TO OVERFLOW-ERRORS MOVE 0 TO ERROR-COUNT DISPLAY 'Parsing system initialized successfully'. DEMONSTRATE-BASIC-CSV-PARSING. DISPLAY 'Demonstrating basic CSV parsing...' MOVE 0 TO FIELD-COUNT SET PARSE-FAILED TO TRUE UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE WITH POINTER FIELD-COUNT TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'CSV parsing overflow occurred' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Too many fields in CSV record' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'CSV parsing successful' DISPLAY 'Fields extracted: ' ACTUAL-FIELDS DISPLAY 'Employee: ' EMPLOYEE-FIRST-NAME ' ' EMPLOYEE-LAST-NAME DISPLAY 'Title: ' EMPLOYEE-TITLE DISPLAY 'Salary: ' EMPLOYEE-SALARY DISPLAY 'Department: ' EMPLOYEE-DEPARTMENT DISPLAY 'Hire Date: ' EMPLOYEE-HIRE-DATE SET PARSE-OK TO TRUE ADD 1 TO SUCCESSFUL-PARSES ADD ACTUAL-FIELDS TO FIELDS-EXTRACTED END-UNSTRING ADD 1 TO PARSING-OPERATIONS PERFORM VALIDATE-PARSED-DATA. DEMONSTRATE-PIPE-DELIMITED-PARSING. DISPLAY 'Demonstrating pipe-delimited parsing...' PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO FIELD-COUNT MOVE 0 TO ACTUAL-FIELDS SET PARSE-FAILED TO TRUE UNSTRING PIPE-DELIMITED DELIMITED BY SECONDARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Pipe-delimited parsing overflow' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Field capacity exceeded in pipe parsing' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'Pipe-delimited parsing successful' DISPLAY 'Fields parsed: ' ACTUAL-FIELDS DISPLAY 'Employee: ' EMPLOYEE-FIRST-NAME ' ' EMPLOYEE-LAST-NAME DISPLAY 'Title: ' EMPLOYEE-TITLE DISPLAY 'Salary: ' EMPLOYEE-SALARY DISPLAY 'Department: ' EMPLOYEE-DEPARTMENT DISPLAY 'Hire Date: ' EMPLOYEE-HIRE-DATE SET PARSE-OK TO TRUE ADD 1 TO SUCCESSFUL-PARSES ADD ACTUAL-FIELDS TO FIELDS-EXTRACTED END-UNSTRING ADD 1 TO PARSING-OPERATIONS PERFORM VALIDATE-PARSED-DATA. DEMONSTRATE-MIXED-DELIMITER-PARSING. DISPLAY 'Demonstrating mixed delimiter parsing...' PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO FIELD-COUNT MOVE 0 TO ACTUAL-FIELDS SET PARSE-FAILED TO TRUE *> Parse with multiple delimiters UNSTRING MIXED-DELIMITED DELIMITED BY TERTIARY-DELIMITER OR PRIMARY-DELIMITER OR COLON-DELIMITER OR SECONDARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Mixed delimiter parsing overflow' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Multiple delimiter parsing capacity exceeded' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'Mixed delimiter parsing successful' DISPLAY 'Fields extracted: ' ACTUAL-FIELDS DISPLAY 'Employee: ' EMPLOYEE-FIRST-NAME ' ' EMPLOYEE-LAST-NAME DISPLAY 'Title: ' EMPLOYEE-TITLE DISPLAY 'Salary: ' EMPLOYEE-SALARY DISPLAY 'Department: ' EMPLOYEE-DEPARTMENT DISPLAY 'Hire Date: ' EMPLOYEE-HIRE-DATE SET PARSE-OK TO TRUE ADD 1 TO SUCCESSFUL-PARSES ADD ACTUAL-FIELDS TO FIELDS-EXTRACTED END-UNSTRING ADD 1 TO PARSING-OPERATIONS PERFORM VALIDATE-PARSED-DATA. DEMONSTRATE-ADVANCED-PARSING-TECHNIQUES. DISPLAY 'Demonstrating advanced parsing techniques...' PERFORM PARSE-WITH-LEADING-DELIMITER PERFORM PARSE-WITH-TRAILING-DELIMITER PERFORM PARSE-WITH-CONSECUTIVE-DELIMITERS PERFORM PARSE-WITH-QUOTED-FIELDS DISPLAY 'Advanced parsing techniques completed'. PARSE-WITH-LEADING-DELIMITER. DISPLAY 'Parsing with leading delimiter handling...' *> Simulate data with leading delimiter MOVE ',LEADING,DELIMITER,TEST,DATA,RECORD' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Leading delimiter parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Leading delimiter parsing successful' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'First field (empty): "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Second field: "' EMPLOYEE-LAST-NAME '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. PARSE-WITH-TRAILING-DELIMITER. DISPLAY 'Parsing with trailing delimiter handling...' *> Simulate data with trailing delimiter MOVE 'TRAILING,DELIMITER,TEST,DATA,RECORD,' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Trailing delimiter parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Trailing delimiter parsing successful' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'First field: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Last field: "' EMPLOYEE-HIRE-DATE '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. PARSE-WITH-CONSECUTIVE-DELIMITERS. DISPLAY 'Parsing with consecutive delimiters...' *> Simulate data with consecutive delimiters MOVE 'FIELD1,,FIELD3,,,FIELD6' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Consecutive delimiter parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Consecutive delimiter parsing successful' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'Field 1: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Field 2 (empty): "' EMPLOYEE-LAST-NAME '"' DISPLAY 'Field 3: "' EMPLOYEE-TITLE '"' DISPLAY 'Fields 4-5 (empty): "' EMPLOYEE-SALARY '" "' EMPLOYEE-DEPARTMENT '"' DISPLAY 'Field 6: "' EMPLOYEE-HIRE-DATE '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. PARSE-WITH-QUOTED-FIELDS. DISPLAY 'Parsing with quoted field simulation...' *> Simulate CSV with quoted fields (simplified handling) MOVE 'JOHN SMITH,SENIOR ENGINEER,75000,IT DEPARTMENT,2022-01-15' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Quoted field parsing overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Quoted field parsing successful' DISPLAY 'Name: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Title: "' EMPLOYEE-TITLE '"' DISPLAY 'Salary: "' EMPLOYEE-SALARY '"' DISPLAY 'Department: "' EMPLOYEE-DEPARTMENT '"' DISPLAY 'Hire Date: "' EMPLOYEE-HIRE-DATE '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. DEMONSTRATE-ERROR-HANDLING-SCENARIOS. DISPLAY 'Demonstrating error handling scenarios...' PERFORM HANDLE-INSUFFICIENT-FIELDS PERFORM HANDLE-EXCESSIVE-FIELDS PERFORM HANDLE-MALFORMED-DATA DISPLAY 'Error handling demonstrations completed'. HANDLE-INSUFFICIENT-FIELDS. DISPLAY 'Handling insufficient fields scenario...' *> Simulate data with fewer fields than expected MOVE 'JOHN,SMITH,ENGINEER' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Insufficient fields - overflow should not occur' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Insufficient fields handled successfully' DISPLAY 'Fields found: ' ACTUAL-FIELDS DISPLAY 'Expected: ' EXPECTED-FIELDS IF ACTUAL-FIELDS < EXPECTED-FIELDS DISPLAY 'Warning: Missing fields detected' MOVE 'MISSING' TO LAST-ERROR-TYPE MOVE 'Insufficient fields in input data' TO ERROR-DESCRIPTION ADD 1 TO DELIMITER-ERRORS ADD 1 TO ERROR-COUNT END-IF ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. HANDLE-EXCESSIVE-FIELDS. DISPLAY 'Handling excessive fields scenario...' *> Simulate data with more fields than target variables MOVE 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T' TO CSV-RECORD PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Excessive fields caused overflow' MOVE 'OVERFLOW' TO LAST-ERROR-TYPE MOVE 'Too many fields for available variables' TO ERROR-DESCRIPTION ADD 1 TO OVERFLOW-ERRORS ADD 1 TO ERROR-COUNT NOT ON OVERFLOW DISPLAY 'Excessive fields handled (partial parsing)' DISPLAY 'Fields processed: ' ACTUAL-FIELDS ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. HANDLE-MALFORMED-DATA. DISPLAY 'Handling malformed data scenario...' *> Simulate malformed data with unusual characters MOVE 'JOHN' TO CSV-RECORD STRING CSV-RECORD DELIMITED BY SIZE X'00' DELIMITED BY SIZE *> Null character 'SMITH,ENGINEER' DELIMITED BY SIZE INTO CSV-RECORD END-STRING PERFORM CLEAR-OUTPUT-FIELDS MOVE 0 TO ACTUAL-FIELDS UNSTRING CSV-RECORD DELIMITED BY PRIMARY-DELIMITER INTO EMPLOYEE-FIRST-NAME EMPLOYEE-LAST-NAME EMPLOYEE-TITLE EMPLOYEE-SALARY EMPLOYEE-DEPARTMENT EMPLOYEE-HIRE-DATE TALLYING IN ACTUAL-FIELDS ON OVERFLOW DISPLAY 'Malformed data caused overflow' ADD 1 TO OVERFLOW-ERRORS NOT ON OVERFLOW DISPLAY 'Malformed data processed' DISPLAY 'Fields extracted: ' ACTUAL-FIELDS DISPLAY 'First field: "' EMPLOYEE-FIRST-NAME '"' DISPLAY 'Second field: "' EMPLOYEE-LAST-NAME '"' ADD 1 TO SUCCESSFUL-PARSES END-UNSTRING ADD 1 TO PARSING-OPERATIONS. VALIDATE-PARSED-DATA. IF PARSE-OK PERFORM VALIDATE-FIELD-LENGTHS PERFORM VALIDATE-NUMERIC-FIELDS PERFORM VALIDATE-REQUIRED-FIELDS END-IF. VALIDATE-FIELD-LENGTHS. *> Validate field lengths are within acceptable ranges IF FUNCTION LENGTH(FUNCTION TRIM(EMPLOYEE-FIRST-NAME)) < MIN-FIELD-LENGTH DISPLAY 'Warning: First name too short' MOVE 'LENGTH' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF IF FUNCTION LENGTH(FUNCTION TRIM(EMPLOYEE-LAST-NAME)) < MIN-FIELD-LENGTH DISPLAY 'Warning: Last name too short' MOVE 'LENGTH' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF. VALIDATE-NUMERIC-FIELDS. *> Validate salary is numeric IF EMPLOYEE-SALARY IS NOT NUMERIC DISPLAY 'Warning: Salary is not numeric: ' EMPLOYEE-SALARY MOVE 'NUMERIC' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF. VALIDATE-REQUIRED-FIELDS. *> Check for required fields IF EMPLOYEE-FIRST-NAME = SPACES DISPLAY 'Error: First name is required' MOVE 'REQUIRED' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF IF EMPLOYEE-LAST-NAME = SPACES DISPLAY 'Error: Last name is required' MOVE 'REQUIRED' TO LAST-ERROR-TYPE ADD 1 TO ERROR-COUNT END-IF. CLEAR-OUTPUT-FIELDS. MOVE SPACES TO EMPLOYEE-FIRST-NAME MOVE SPACES TO EMPLOYEE-LAST-NAME MOVE SPACES TO EMPLOYEE-TITLE MOVE ZEROS TO EMPLOYEE-SALARY MOVE SPACES TO EMPLOYEE-DEPARTMENT MOVE SPACES TO EMPLOYEE-HIRE-DATE. DISPLAY-PARSING-STATISTICS. DISPLAY 'String Parsing Statistics:' DISPLAY '=========================' DISPLAY 'Total parsing operations: ' PARSING-OPERATIONS DISPLAY 'Successful parses: ' SUCCESSFUL-PARSES DISPLAY 'Total fields extracted: ' FIELDS-EXTRACTED DISPLAY 'Overflow errors: ' OVERFLOW-ERRORS DISPLAY 'Delimiter errors: ' DELIMITER-ERRORS DISPLAY 'Total errors: ' ERROR-COUNT DISPLAY '' DISPLAY 'Error Analysis:' DISPLAY 'Last error type: ' LAST-ERROR-TYPE DISPLAY 'Last error description: ' ERROR-DESCRIPTION DISPLAY '' DISPLAY 'Performance Metrics:' IF PARSING-OPERATIONS > 0 COMPUTE SUCCESSFUL-PARSES = (SUCCESSFUL-PARSES / PARSING-OPERATIONS) * 100 DISPLAY 'Success rate: ' SUCCESSFUL-PARSES '%' COMPUTE FIELDS-EXTRACTED = FIELDS-EXTRACTED / PARSING-OPERATIONS DISPLAY 'Average fields per operation: ' FIELDS-EXTRACTED END-IF.