Data parsing breaks down structured data into individual components for processing and manipulation. Learn string parsing techniques, data extraction methods, and text processing for effective data manipulation.
1234567891011121314151617181920212223242526272829WORKING-STORAGE SECTION. 01 PARSING-DATA. 05 INPUT-STRING PIC X(100). 05 PARSED-FIELDS. 10 FIELD-1 PIC X(20). 10 FIELD-2 PIC X(20). 10 FIELD-3 PIC X(20). 10 FIELD-4 PIC X(20). 05 DELIMITER-COUNT PIC 9(2). PROCEDURE DIVISION. PERFORM PARSE-DELIMITED-DATA PARSE-DELIMITED-DATA. MOVE 'JOHN,SMITH,12345,ACCOUNTANT' TO INPUT-STRING *> Parse comma-delimited data UNSTRING INPUT-STRING DELIMITED BY ',' INTO FIELD-1 FIELD-2 FIELD-3 FIELD-4 TALLYING DELIMITER-COUNT END-UNSTRING DISPLAY 'Parsed fields:' DISPLAY 'Field 1: ' FIELD-1 DISPLAY 'Field 2: ' FIELD-2 DISPLAY 'Field 3: ' FIELD-3 DISPLAY 'Field 4: ' FIELD-4 DISPLAY 'Delimiter count: ' DELIMITER-COUNT.
Use UNSTRING statement to parse delimited data by specifying delimiters and target fields. The TALLYING clause counts delimiters found, and UNSTRING extracts data into individual fields.
123456789101112131415161718192021222324252627282930WORKING-STORAGE SECTION. 01 MULTIPLE-DELIMITER-PARSING. 05 COMPLEX-STRING PIC X(200). 05 PARSED-COMPONENTS. 10 COMPONENT-1 PIC X(30). 10 COMPONENT-2 PIC X(30). 10 COMPONENT-3 PIC X(30). 10 COMPONENT-4 PIC X(30). 05 DELIMITER-TYPE PIC X(10). PROCEDURE DIVISION. PERFORM PARSE-MULTIPLE-DELIMITERS PARSE-MULTIPLE-DELIMITERS. MOVE 'NAME:JOHN SMITH|ID:12345|DEPT:IT|STATUS:ACTIVE' TO COMPLEX-STRING *> Parse with multiple delimiters UNSTRING COMPLEX-STRING DELIMITED BY ':' OR '|' INTO COMPONENT-1 COMPONENT-2 COMPONENT-3 COMPONENT-4 WITH POINTER POINTER-VALUE ON OVERFLOW DISPLAY 'Parsing overflow occurred' END-UNSTRING DISPLAY 'Parsed components:' DISPLAY 'Component 1: ' COMPONENT-1 DISPLAY 'Component 2: ' COMPONENT-2 DISPLAY 'Component 3: ' COMPONENT-3 DISPLAY 'Component 4: ' COMPONENT-4.
Parse data with multiple delimiters using OR clause in UNSTRING statement. Use WITH POINTER for position tracking and ON OVERFLOW for error handling when parsing complex data.
123456789101112131415161718192021222324252627282930WORKING-STORAGE SECTION. 01 FIXED-POSITION-PARSING. 05 FIXED-RECORD PIC X(80). 05 PARSED-FIELDS. 10 RECORD-TYPE PIC X(1). 10 CUSTOMER-ID PIC X(6). 10 CUSTOMER-NAME PIC X(30). 10 ACCOUNT-BALANCE PIC X(10). 10 TRANSACTION-DATE PIC X(8). 10 FILLER PIC X(25). PROCEDURE DIVISION. PERFORM PARSE-FIXED-POSITIONS PARSE-FIXED-POSITIONS. MOVE 'C123456JOHN SMITH 1500.50 20231225 ' TO FIXED-RECORD *> Parse fixed-position data using reference modification MOVE FIXED-RECORD(1:1) TO RECORD-TYPE MOVE FIXED-RECORD(2:6) TO CUSTOMER-ID MOVE FIXED-RECORD(8:30) TO CUSTOMER-NAME MOVE FIXED-RECORD(38:10) TO ACCOUNT-BALANCE MOVE FIXED-RECORD(48:8) TO TRANSACTION-DATE DISPLAY 'Fixed position parsing:' DISPLAY 'Record Type: ' RECORD-TYPE DISPLAY 'Customer ID: ' CUSTOMER-ID DISPLAY 'Customer Name: ' CUSTOMER-NAME DISPLAY 'Account Balance: ' ACCOUNT-BALANCE DISPLAY 'Transaction Date: ' TRANSACTION-DATE.
Parse fixed-position data using reference modification to extract specific portions of a record. Use position and length specifications to extract data from known locations.
12345678910111213141516171819202122232425262728293031323334353637WORKING-STORAGE SECTION. 01 DATE-TIME-PARSING. 05 INPUT-DATE-TIME PIC X(20). 05 PARSED-DATE-TIME. 10 YEAR PIC X(4). 10 MONTH PIC X(2). 10 DAY PIC X(2). 10 HOUR PIC X(2). 10 MINUTE PIC X(2). 10 SECOND PIC X(2). 05 FORMATTED-DATE PIC X(10). 05 FORMATTED-TIME PIC X(8). PROCEDURE DIVISION. PERFORM PARSE-DATE-TIME PARSE-DATE-TIME. MOVE '20231225143052' TO INPUT-DATE-TIME *> Parse date-time string MOVE INPUT-DATE-TIME(1:4) TO YEAR MOVE INPUT-DATE-TIME(5:2) TO MONTH MOVE INPUT-DATE-TIME(7:2) TO DAY MOVE INPUT-DATE-TIME(9:2) TO HOUR MOVE INPUT-DATE-TIME(11:2) TO MINUTE MOVE INPUT-DATE-TIME(13:2) TO SECOND *> Format parsed components STRING MONTH '/' DAY '/' YEAR INTO FORMATTED-DATE STRING HOUR ':' MINUTE ':' SECOND INTO FORMATTED-TIME DISPLAY 'Parsed date-time:' DISPLAY 'Year: ' YEAR DISPLAY 'Month: ' MONTH DISPLAY 'Day: ' DAY DISPLAY 'Formatted Date: ' FORMATTED-DATE DISPLAY 'Formatted Time: ' FORMATTED-TIME.
Parse date and time data from various formats using reference modification. Extract year, month, day, hour, minute, and second components, then format them for display.
123456789101112131415161718192021222324252627282930313233343536WORKING-STORAGE SECTION. 01 CSV-PARSING. 05 CSV-RECORD PIC X(200). 05 CSV-FIELDS. 10 CSV-FIELD-1 PIC X(30). 10 CSV-FIELD-2 PIC X(30). 10 CSV-FIELD-3 PIC X(30). 10 CSV-FIELD-4 PIC X(30). 10 CSV-FIELD-5 PIC X(30). 05 FIELD-COUNT PIC 9(2). 05 CURRENT-POSITION PIC 9(3). PROCEDURE DIVISION. PERFORM PARSE-CSV-DATA PARSE-CSV-DATA. MOVE 'CUSTOMER_ID,CUSTOMER_NAME,ACCOUNT_BALANCE,STATUS,DATE' TO CSV-RECORD MOVE 1 TO CURRENT-POSITION MOVE 0 TO FIELD-COUNT *> Parse CSV header UNSTRING CSV-RECORD DELIMITED BY ',' INTO CSV-FIELD-1 CSV-FIELD-2 CSV-FIELD-3 CSV-FIELD-4 CSV-FIELD-5 WITH POINTER CURRENT-POSITION TALLYING FIELD-COUNT END-UNSTRING DISPLAY 'CSV Header Fields:' DISPLAY 'Field 1: ' CSV-FIELD-1 DISPLAY 'Field 2: ' CSV-FIELD-2 DISPLAY 'Field 3: ' CSV-FIELD-3 DISPLAY 'Field 4: ' CSV-FIELD-4 DISPLAY 'Field 5: ' CSV-FIELD-5 DISPLAY 'Total fields: ' FIELD-COUNT.
Parse CSV (Comma-Separated Values) data using UNSTRING with comma delimiters. Use WITH POINTER for position tracking and TALLYING to count fields for dynamic CSV processing.
123456789101112131415161718192021222324252627WORKING-STORAGE SECTION. 01 JSON-PARSING. 05 JSON-STRING PIC X(300). 05 PARSED-JSON. 10 JSON-KEY-1 PIC X(20). 10 JSON-VALUE-1 PIC X(30). 10 JSON-KEY-2 PIC X(20). 10 JSON-VALUE-2 PIC X(30). 10 JSON-KEY-3 PIC X(20). 10 JSON-VALUE-3 PIC X(30). PROCEDURE DIVISION. PERFORM PARSE-JSON-DATA PARSE-JSON-DATA. MOVE '{"customer_id":"123456","name":"John Smith","balance":"1500.50"}' TO JSON-STRING *> Parse JSON-like data UNSTRING JSON-STRING DELIMITED BY '"' OR ':' OR ',' OR '{' OR '}' INTO JSON-KEY-1 JSON-VALUE-1 JSON-KEY-2 JSON-VALUE-2 JSON-KEY-3 JSON-VALUE-3 END-UNSTRING DISPLAY 'Parsed JSON data:' DISPLAY 'Key 1: ' JSON-KEY-1 ' Value 1: ' JSON-VALUE-1 DISPLAY 'Key 2: ' JSON-KEY-2 ' Value 2: ' JSON-VALUE-2 DISPLAY 'Key 3: ' JSON-KEY-3 ' Value 3: ' JSON-VALUE-3.
Parse JSON-like data using multiple delimiters including quotes, colons, commas, and braces. Extract key-value pairs from structured data formats.
12345678910111213141516171819202122232425262728293031323334WORKING-STORAGE SECTION. 01 PARSING-ERROR-HANDLING. 05 INPUT-DATA PIC X(100). 05 PARSED-RESULT PIC X(50). 05 PARSING-STATUS PIC X. 88 PARSING-SUCCESS VALUE 'S'. 88 PARSING-FAILED VALUE 'F'. 05 ERROR-MESSAGE PIC X(100). PROCEDURE DIVISION. PERFORM PARSE-WITH-ERROR-HANDLING PARSE-WITH-ERROR-HANDLING. MOVE 'INVALID,DATA,FORMAT' TO INPUT-DATA MOVE 'S' TO PARSING-STATUS *> Attempt parsing with error handling UNSTRING INPUT-DATA DELIMITED BY ',' INTO PARSED-RESULT ON OVERFLOW MOVE 'F' TO PARSING-STATUS MOVE 'Parsing overflow - data too long' TO ERROR-MESSAGE NOT ON OVERFLOW MOVE 'Parsing completed successfully' TO ERROR-MESSAGE END-UNSTRING IF PARSING-FAILED DISPLAY 'Parsing failed: ' ERROR-MESSAGE PERFORM HANDLE-PARSING-ERROR ELSE DISPLAY 'Parsing successful: ' ERROR-MESSAGE DISPLAY 'Parsed result: ' PARSED-RESULT END-IF.
Implement comprehensive error handling for parsing operations using ON OVERFLOW and NOT ON OVERFLOW clauses. Check parsing status and provide meaningful error messages.
123456789101112131415161718192021222324252627282930313233343536WORKING-STORAGE SECTION. 01 DYNAMIC-PARSING. 05 DYNAMIC-STRING PIC X(200). 05 PARSING-CONTROL. 10 DELIMITER-CHAR PIC X. 10 FIELD-COUNT PIC 9(2). 10 CURRENT-FIELD PIC 9(2). 05 DYNAMIC-FIELDS OCCURS 20 TIMES. 10 DYNAMIC-FIELD PIC X(30). PROCEDURE DIVISION. PERFORM DYNAMIC-PARSING-OPERATION DYNAMIC-PARSING-OPERATION. MOVE 'FIELD1|FIELD2|FIELD3|FIELD4|FIELD5' TO DYNAMIC-STRING MOVE '|' TO DELIMITER-CHAR MOVE 0 TO FIELD-COUNT *> Count fields first PERFORM COUNT-DELIMITERS *> Parse fields dynamically PERFORM PARSE-DYNAMIC-FIELDS DISPLAY 'Dynamic parsing results:' PERFORM VARYING CURRENT-FIELD FROM 1 BY 1 UNTIL CURRENT-FIELD > FIELD-COUNT DISPLAY 'Field ' CURRENT-FIELD ': ' DYNAMIC-FIELD(CURRENT-FIELD) END-PERFORM. COUNT-DELIMITERS. PERFORM VARYING I FROM 1 BY 1 UNTIL I > FUNCTION LENGTH(DYNAMIC-STRING) IF DYNAMIC-STRING(I:1) = DELIMITER-CHAR ADD 1 TO FIELD-COUNT END-IF END-PERFORM ADD 1 TO FIELD-COUNT *> Add 1 for the last field.
Implement dynamic parsing that adapts to different data formats and field counts. Count delimiters first, then parse fields dynamically based on the actual data structure.
12345678910111213141516171819202122232425262728293031323334WORKING-STORAGE SECTION. 01 OPTIMIZED-PARSING. 05 PARSING-BUFFER PIC X(1000). 05 PARSED-DATA OCCURS 50 TIMES. 10 PARSED-FIELD PIC X(50). 05 PARSING-METRICS. 10 PARSING-TIME PIC 9(6). 10 RECORDS-PARSED PIC 9(8). 10 PARSING-RATE PIC 9(6). PROCEDURE DIVISION. PERFORM OPTIMIZED-PARSING-OPERATION OPTIMIZED-PARSING-OPERATION. MOVE FUNCTION CURRENT-TIME TO START-TIME MOVE 0 TO RECORDS-PARSED *> Parse multiple records efficiently PERFORM UNTIL EOF READ INPUT-FILE AT END SET EOF TO TRUE NOT AT END PERFORM PARSE-SINGLE-RECORD ADD 1 TO RECORDS-PARSED END-READ END-PERFORM MOVE FUNCTION CURRENT-TIME TO END-TIME COMPUTE PARSING-TIME = END-TIME - START-TIME COMPUTE PARSING-RATE = RECORDS-PARSED / PARSING-TIME DISPLAY 'Parsing performance:' DISPLAY 'Records parsed: ' RECORDS-PARSED DISPLAY 'Parsing time: ' PARSING-TIME ' seconds' DISPLAY 'Parsing rate: ' PARSING-RATE ' records/second'.
Optimize parsing performance by using efficient parsing techniques, buffering data, and measuring parsing metrics. Monitor parsing rates and optimize for high-volume data processing.