The EXAMINE statement represents a legacy component of string inspection and character analysis in COBOL, serving as an early mechanism for examining and counting characters within data fields. While this statement has been superseded by the more powerful INSPECT statement in modern COBOL, understanding EXAMINE is important for maintaining legacy systems and comprehending the evolution of string processing capabilities in COBOL programming environments.
The EXAMINE statement was used in earlier versions of COBOL to count occurrences of specific characters or replace characters within data fields. It provided basic string inspection capabilities before the introduction of the more comprehensive INSPECT statement. While EXAMINE is now considered obsolete, it laid the foundation for modern string processing operations in COBOL.
Modern COBOL programs should use the INSPECT statement instead of EXAMINE, as INSPECT provides more powerful and flexible string manipulation capabilities. However, understanding EXAMINE helps in maintaining legacy code and understanding the historical development of COBOL string processing features.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244IDENTIFICATION DIVISION. PROGRAM-ID. EXAMINE-LEGACY-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 STRING-PROCESSING-AREAS. 05 SOURCE-STRING PIC X(50) VALUE 'HELLO WORLD EXAMPLE'. 05 TARGET-STRING PIC X(50). 05 WORK-STRING PIC X(50). 01 CHARACTER-ANALYSIS. 05 CHARACTER-COUNT PIC 9(3) VALUE 0. 05 SPACE-COUNT PIC 9(3) VALUE 0. 05 LETTER-COUNT PIC 9(3) VALUE 0. 05 DIGIT-COUNT PIC 9(3) VALUE 0. 01 REPLACEMENT-CONTROLS. 05 ORIGINAL-CHAR PIC X VALUE SPACE. 05 REPLACEMENT-CHAR PIC X VALUE '*'. 05 SEARCH-CHAR PIC X VALUE 'L'. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY 'Demonstrating legacy EXAMINE concepts...' PERFORM DEMONSTRATE-LEGACY-EXAMINE-CONCEPT PERFORM DEMONSTRATE-MODERN-INSPECT-ALTERNATIVES PERFORM DEMONSTRATE-ADVANCED-STRING-PROCESSING STOP RUN. DEMONSTRATE-LEGACY-EXAMINE-CONCEPT. DISPLAY 'Legacy EXAMINE concept demonstration...' *> Note: EXAMINE statement is obsolete in modern COBOL *> Historical syntax was: *> EXAMINE source-field TALLYING ALL literal *> EXAMINE source-field REPLACING ALL literal BY literal DISPLAY 'Historical EXAMINE operations:' DISPLAY 'Source string: "' SOURCE-STRING '"' *> Simulate EXAMINE TALLYING functionality using modern INSPECT MOVE SOURCE-STRING TO WORK-STRING INSPECT WORK-STRING TALLYING CHARACTER-COUNT FOR ALL 'L' DISPLAY 'Count of "L" characters: ' CHARACTER-COUNT *> Simulate EXAMINE REPLACING functionality using modern INSPECT MOVE SOURCE-STRING TO TARGET-STRING INSPECT TARGET-STRING REPLACING ALL 'L' BY '*' DISPLAY 'After replacing "L" with "*": "' TARGET-STRING '"' DISPLAY 'Note: Modern COBOL uses INSPECT instead of EXAMINE'. DEMONSTRATE-MODERN-INSPECT-ALTERNATIVES. DISPLAY 'Modern INSPECT alternatives to EXAMINE...' PERFORM COUNT-CHARACTERS-WITH-INSPECT PERFORM REPLACE-CHARACTERS-WITH-INSPECT PERFORM ADVANCED-CHARACTER-ANALYSIS. COUNT-CHARACTERS-WITH-INSPECT. DISPLAY 'Counting characters with INSPECT...' MOVE SOURCE-STRING TO WORK-STRING *> Count spaces MOVE 0 TO SPACE-COUNT INSPECT WORK-STRING TALLYING SPACE-COUNT FOR ALL SPACE DISPLAY 'Space count: ' SPACE-COUNT *> Count specific letters MOVE 0 TO LETTER-COUNT INSPECT WORK-STRING TALLYING LETTER-COUNT FOR ALL 'E' DISPLAY 'Letter "E" count: ' LETTER-COUNT *> Count all characters MOVE 0 TO CHARACTER-COUNT INSPECT WORK-STRING TALLYING CHARACTER-COUNT FOR CHARACTERS DISPLAY 'Total character count: ' CHARACTER-COUNT. REPLACE-CHARACTERS-WITH-INSPECT. DISPLAY 'Replacing characters with INSPECT...' *> Replace spaces with underscores MOVE SOURCE-STRING TO TARGET-STRING INSPECT TARGET-STRING REPLACING ALL SPACE BY '_' DISPLAY 'Spaces replaced with underscores: "' TARGET-STRING '"' *> Replace multiple characters MOVE SOURCE-STRING TO TARGET-STRING INSPECT TARGET-STRING REPLACING ALL 'E' BY '3' ALL 'O' BY '0' ALL 'L' BY '1' DISPLAY 'Multiple character replacement: "' TARGET-STRING '"' *> Replace leading characters MOVE SOURCE-STRING TO TARGET-STRING INSPECT TARGET-STRING REPLACING LEADING SPACE BY '*' DISPLAY 'Leading spaces replaced: "' TARGET-STRING '"'. ADVANCED-CHARACTER-ANALYSIS. DISPLAY 'Advanced character analysis...' PERFORM ANALYZE-CHARACTER-TYPES PERFORM VALIDATE-DATA-FORMAT PERFORM CLEAN-DATA-STRING. ANALYZE-CHARACTER-TYPES. DISPLAY 'Analyzing character types...' MOVE 'ABC123XYZ789' TO WORK-STRING *> Count alphabetic characters MOVE 0 TO LETTER-COUNT INSPECT WORK-STRING TALLYING LETTER-COUNT FOR CHARACTERS BEFORE INITIAL '0' AFTER INITIAL 'A' *> Count numeric characters MOVE 0 TO DIGIT-COUNT INSPECT WORK-STRING TALLYING DIGIT-COUNT FOR ALL '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' DISPLAY 'Analysis of "' WORK-STRING '": ' DISPLAY 'Numeric digits found: ' DIGIT-COUNT. VALIDATE-DATA-FORMAT. DISPLAY 'Validating data format...' MOVE 'TEST-DATA-123' TO WORK-STRING *> Check for invalid characters (example: no special chars except hyphen) MOVE 0 TO CHARACTER-COUNT INSPECT WORK-STRING TALLYING CHARACTER-COUNT FOR ALL '!' '@' '#' '$' '%' '^' '&' '*' '(' ')' '+' '=' '[' ']' '{' '}' '|' '' ';' ':' '"' "'" '<' '>' ',' '.' '?' '/' '~' ' ' IF CHARACTER-COUNT > 0 DISPLAY 'Invalid characters found: ' CHARACTER-COUNT ELSE DISPLAY 'Data format validation passed' END-IF. CLEAN-DATA-STRING. DISPLAY 'Cleaning data string...' MOVE 'DATA WITH EXTRA SPACES' TO WORK-STRING DISPLAY 'Original: "' WORK-STRING '"' *> Replace multiple spaces with single space PERFORM UNTIL WORK-STRING NOT CONTAINS ' ' INSPECT WORK-STRING REPLACING ALL ' ' BY ' ' END-PERFORM DISPLAY 'Cleaned: "' WORK-STRING '"' *> Remove leading and trailing spaces MOVE FUNCTION TRIM(WORK-STRING) TO TARGET-STRING DISPLAY 'Trimmed: "' TARGET-STRING '"'. DEMONSTRATE-ADVANCED-STRING-PROCESSING. DISPLAY 'Advanced string processing techniques...' PERFORM CASE-CONVERSION-SIMULATION PERFORM PATTERN-MATCHING-SIMULATION PERFORM DATA-TRANSFORMATION. CASE-CONVERSION-SIMULATION. DISPLAY 'Case conversion simulation...' MOVE 'Mixed Case String' TO WORK-STRING DISPLAY 'Original: "' WORK-STRING '"' *> Convert to uppercase (conceptual - actual implementation varies) INSPECT WORK-STRING REPLACING ALL 'a' BY 'A' ALL 'b' BY 'B' ALL 'c' BY 'C' ALL 'd' BY 'D' ALL 'e' BY 'E' ALL 'f' BY 'F' ALL 'g' BY 'G' ALL 'h' BY 'H' ALL 'i' BY 'I' ALL 'j' BY 'J' ALL 'k' BY 'K' ALL 'l' BY 'L' ALL 'm' BY 'M' ALL 'n' BY 'N' ALL 'o' BY 'O' ALL 'p' BY 'P' ALL 'q' BY 'Q' ALL 'r' BY 'R' ALL 's' BY 'S' ALL 't' BY 'T' ALL 'u' BY 'U' ALL 'v' BY 'V' ALL 'w' BY 'W' ALL 'x' BY 'X' ALL 'y' BY 'Y' ALL 'z' BY 'Z' DISPLAY 'Uppercase: "' WORK-STRING '"'. PATTERN-MATCHING-SIMULATION. DISPLAY 'Pattern matching simulation...' MOVE 'PATTERN-123-TEST' TO WORK-STRING *> Check for pattern: LETTERS-DIGITS-LETTERS MOVE 0 TO CHARACTER-COUNT INSPECT WORK-STRING TALLYING CHARACTER-COUNT FOR ALL '-' IF CHARACTER-COUNT = 2 DISPLAY 'Pattern matches expected format' ELSE DISPLAY 'Pattern does not match expected format' END-IF. DATA-TRANSFORMATION. DISPLAY 'Data transformation...' MOVE 'TRANSFORM_DATA_STRING' TO WORK-STRING DISPLAY 'Before transformation: "' WORK-STRING '"' *> Transform underscores to spaces INSPECT WORK-STRING REPLACING ALL '_' BY ' ' DISPLAY 'After transformation: "' WORK-STRING '"' *> Mask sensitive data (replace digits with X) MOVE 'ACCOUNT-12345-ACTIVE' TO TARGET-STRING INSPECT TARGET-STRING REPLACING ALL '0' BY 'X' ALL '1' BY 'X' ALL '2' BY 'X' ALL '3' BY 'X' ALL '4' BY 'X' ALL '5' BY 'X' ALL '6' BY 'X' ALL '7' BY 'X' ALL '8' BY 'X' ALL '9' BY 'X' DISPLAY 'Masked data: "' TARGET-STRING '"'.