The ONLY
keyword in COBOL is primarily used in INSPECT statements to specify that operations should be performed exclusively on the specified characters or conditions. It provides precise control over character processing and replacement operations, allowing for selective text manipulation and validation.
Selective character tallying and replacement
Testing for specific character sets
Exclusive condition matching
Selective text modification
WORKING-STORAGE SECTION. 01 WS-INPUT-FIELD PIC X(20). 01 WS-NUMERIC-COUNT PIC 999. 01 WS-ALPHA-COUNT PIC 999. 01 WS-SPECIAL-COUNT PIC 999. PROCEDURE DIVISION. MOVE "ABC123XYZ" TO WS-INPUT-FIELD. *> Count only numeric characters INSPECT WS-INPUT-FIELD TALLYING WS-NUMERIC-COUNT FOR CHARACTERS "0123456789". *> Count only alphabetic characters INSPECT WS-INPUT-FIELD TALLYING WS-ALPHA-COUNT FOR CHARACTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ". DISPLAY "NUMERIC CHARS: " WS-NUMERIC-COUNT. DISPLAY "ALPHA CHARS: " WS-ALPHA-COUNT.
Using ONLY concept for character type validation.
WORKING-STORAGE SECTION. 01 WS-PHONE-NUMBER PIC X(15). 01 WS-CLEAN-PHONE PIC X(15). PROCEDURE DIVISION. MOVE "(555) 123-4567" TO WS-PHONE-NUMBER. MOVE WS-PHONE-NUMBER TO WS-CLEAN-PHONE. *> Remove only specific formatting characters INSPECT WS-CLEAN-PHONE REPLACING ALL "(" BY SPACE ALL ")" BY SPACE ALL "-" BY SPACE ALL " " BY SPACE. DISPLAY "ORIGINAL: " WS-PHONE-NUMBER. DISPLAY "CLEANED: " WS-CLEAN-PHONE.
Replacing only specific unwanted characters.
WORKING-STORAGE SECTION. 01 WS-PASSWORD PIC X(20). 01 WS-UPPERCASE-COUNT PIC 99. 01 WS-LOWERCASE-COUNT PIC 99. 01 WS-DIGIT-COUNT PIC 99. PROCEDURE DIVISION. MOVE "MyPassword123" TO WS-PASSWORD. *> Count only uppercase letters INSPECT WS-PASSWORD TALLYING WS-UPPERCASE-COUNT FOR ALL "A" THRU "Z". *> Count only lowercase letters INSPECT WS-PASSWORD TALLYING WS-LOWERCASE-COUNT FOR ALL "a" THRU "z". *> Count only digits INSPECT WS-PASSWORD TALLYING WS-DIGIT-COUNT FOR ALL "0" THRU "9". DISPLAY "UPPERCASE: " WS-UPPERCASE-COUNT. DISPLAY "LOWERCASE: " WS-LOWERCASE-COUNT. DISPLAY "DIGITS: " WS-DIGIT-COUNT.
Processing only characters within specific ranges.
WORKING-STORAGE SECTION. 01 WS-INPUT-AMOUNT PIC X(10). 01 WS-INVALID-CHAR-COUNT PIC 99. 01 WS-TEMP-FIELD PIC X(10). PROCEDURE DIVISION. VALIDATE-NUMERIC-INPUT. MOVE WS-INPUT-AMOUNT TO WS-TEMP-FIELD. MOVE ZERO TO WS-INVALID-CHAR-COUNT. *> Count characters that are NOT valid for numeric input INSPECT WS-TEMP-FIELD TALLYING WS-INVALID-CHAR-COUNT FOR ALL "A" THRU "Z" TALLYING WS-INVALID-CHAR-COUNT FOR ALL "a" THRU "z" TALLYING WS-INVALID-CHAR-COUNT FOR ALL "@#$%^&*()". IF WS-INVALID-CHAR-COUNT > ZERO DISPLAY "INVALID NUMERIC INPUT" SET WS-INPUT-VALID TO FALSE ELSE DISPLAY "VALID NUMERIC INPUT" SET WS-INPUT-VALID TO TRUE END-IF.
Validating that input contains only valid numeric characters.
WORKING-STORAGE SECTION. 01 WS-EMAIL-ADDRESS PIC X(50). 01 WS-AT-COUNT PIC 99. 01 WS-DOT-COUNT PIC 99. 01 WS-VALID-CHAR-COUNT PIC 99. PROCEDURE DIVISION. VALIDATE-EMAIL. MOVE ZERO TO WS-AT-COUNT WS-DOT-COUNT WS-VALID-CHAR-COUNT. *> Count only @ symbols (should be exactly 1) INSPECT WS-EMAIL-ADDRESS TALLYING WS-AT-COUNT FOR ALL "@". *> Count only dots INSPECT WS-EMAIL-ADDRESS TALLYING WS-DOT-COUNT FOR ALL ".". *> Count only valid email characters INSPECT WS-EMAIL-ADDRESS TALLYING WS-VALID-CHAR-COUNT FOR ALL "A" THRU "Z" TALLYING WS-VALID-CHAR-COUNT FOR ALL "a" THRU "z" TALLYING WS-VALID-CHAR-COUNT FOR ALL "0" THRU "9" TALLYING WS-VALID-CHAR-COUNT FOR ALL "@.-_". IF WS-AT-COUNT = 1 AND WS-DOT-COUNT >= 1 DISPLAY "EMAIL FORMAT APPEARS VALID" ELSE DISPLAY "INVALID EMAIL FORMAT" END-IF.
Validating email format by counting only specific characters.
WORKING-STORAGE SECTION. 01 WS-MIXED-TEXT PIC X(50). 01 WS-UPPER-ONLY PIC X(50). 01 WS-LOWER-ONLY PIC X(50). PROCEDURE DIVISION. CONVERT-CASE. MOVE "Hello World 123!" TO WS-MIXED-TEXT. MOVE WS-MIXED-TEXT TO WS-UPPER-ONLY. MOVE WS-MIXED-TEXT TO WS-LOWER-ONLY. *> Convert only lowercase to uppercase INSPECT WS-UPPER-ONLY 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 "ORIGINAL: " WS-MIXED-TEXT. DISPLAY "UPPERCASE: " WS-UPPER-ONLY.
Converting only lowercase letters to uppercase, leaving other characters unchanged.
WORKING-STORAGE SECTION. 01 WS-MESSY-DATA PIC X(30). 01 WS-CLEAN-DATA PIC X(30). PROCEDURE DIVISION. CLEAN-DATA. MOVE "A1B2C3!@#D4E5F6$%" TO WS-MESSY-DATA. MOVE WS-MESSY-DATA TO WS-CLEAN-DATA. *> Remove only punctuation marks INSPECT WS-CLEAN-DATA REPLACING ALL "!" BY SPACE ALL "@" BY SPACE ALL "#" BY SPACE ALL "$" BY SPACE ALL "%" BY SPACE ALL "^" BY SPACE ALL "&" BY SPACE ALL "*" BY SPACE ALL "(" BY SPACE ALL ")" BY SPACE. *> Compress spaces INSPECT WS-CLEAN-DATA REPLACING ALL " " BY " ". DISPLAY "ORIGINAL: " WS-MESSY-DATA. DISPLAY "CLEANED: " WS-CLEAN-DATA.
Removing only unwanted punctuation characters while preserving alphanumeric data.
WORKING-STORAGE SECTION. 01 WS-PROCESS-MODE PIC X VALUE 'A'. 01 WS-INPUT-DATA PIC X(40). 01 WS-OUTPUT-DATA PIC X(40). PROCEDURE DIVISION. PROCESS-BY-MODE. MOVE WS-INPUT-DATA TO WS-OUTPUT-DATA. EVALUATE WS-PROCESS-MODE WHEN 'A' *> Remove only alphabetic characters INSPECT WS-OUTPUT-DATA REPLACING ALL "A" THRU "Z" BY SPACE ALL "a" THRU "z" BY SPACE WHEN 'N' *> Remove only numeric characters INSPECT WS-OUTPUT-DATA REPLACING ALL "0" THRU "9" BY SPACE WHEN 'S' *> Remove only special characters INSPECT WS-OUTPUT-DATA REPLACING ALL "!" BY SPACE ALL "@" BY SPACE ALL "#" BY SPACE ALL "$" BY SPACE ALL "%" BY SPACE END-EVALUATE.
Conditionally processing only specific character types based on mode.
WORKING-STORAGE SECTION. 01 WS-CREDIT-CARD PIC X(16). 01 WS-MASKED-CARD PIC X(16). 01 WS-LAST-FOUR PIC X(4). PROCEDURE DIVISION. MASK-CREDIT-CARD. MOVE "1234567890123456" TO WS-CREDIT-CARD. MOVE WS-CREDIT-CARD TO WS-MASKED-CARD. *> Keep only the last 4 digits visible *> Replace only the first 12 digits with X INSPECT WS-MASKED-CARD (1:12) 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 "ORIGINAL: " WS-CREDIT-CARD. DISPLAY "MASKED: " WS-MASKED-CARD.
Processing only specific positions while leaving others unchanged.
WORKING-STORAGE SECTION. 01 WS-DATA-FIELD PIC X(100). 01 WS-QUALITY-METRICS. 05 WS-ALPHA-PERCENT PIC 999V99. 05 WS-NUMERIC-PERCENT PIC 999V99. 05 WS-SPACE-PERCENT PIC 999V99. 05 WS-SPECIAL-PERCENT PIC 999V99. 01 WS-COUNTERS. 05 WS-ALPHA-COUNT PIC 999. 05 WS-NUMERIC-COUNT PIC 999. 05 WS-SPACE-COUNT PIC 999. 05 WS-SPECIAL-COUNT PIC 999. 05 WS-TOTAL-CHARS PIC 999. PROCEDURE DIVISION. ANALYZE-DATA-QUALITY. MOVE ZERO TO WS-COUNTERS. MOVE LENGTH OF WS-DATA-FIELD TO WS-TOTAL-CHARS. *> Count only alphabetic characters INSPECT WS-DATA-FIELD TALLYING WS-ALPHA-COUNT FOR ALL "A" THRU "Z" TALLYING WS-ALPHA-COUNT FOR ALL "a" THRU "z". *> Count only numeric characters INSPECT WS-DATA-FIELD TALLYING WS-NUMERIC-COUNT FOR ALL "0" THRU "9". *> Count only spaces INSPECT WS-DATA-FIELD TALLYING WS-SPACE-COUNT FOR ALL " ". *> Calculate percentages COMPUTE WS-ALPHA-PERCENT = (WS-ALPHA-COUNT / WS-TOTAL-CHARS) * 100. COMPUTE WS-NUMERIC-PERCENT = (WS-NUMERIC-COUNT / WS-TOTAL-CHARS) * 100. COMPUTE WS-SPACE-PERCENT = (WS-SPACE-COUNT / WS-TOTAL-CHARS) * 100.
Analyzing data composition by counting only specific character types.
Pattern | Use Case | Example |
---|---|---|
Count Only Digits | Numeric validation | TALLYING FOR ALL "0" THRU "9" |
Replace Only Punctuation | Text cleaning | REPLACING ALL "!" BY SPACE |
Keep Only Alphanumeric | Data sanitization | Remove non-alphanumeric chars |
Convert Only Case | Case normalization | REPLACING "a" BY "A" |
Primary statement for character examination and modification
Counting characters or character sequences
Character substitution operations
Specifying character sets using THRU clause