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