MainframeMaster

ONLY

Overview

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.

Primary Uses

INSPECT Operations

Selective character tallying and replacement

Character Validation

Testing for specific character sets

Conditional Processing

Exclusive condition matching

Text Filtering

Selective text modification

INSPECT with ONLY

Character Validation

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.

Selective Character Replacement

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.

Range-Based Processing

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.

Data Validation with ONLY

Numeric Field Validation

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.

Email Format Validation

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.

Text Processing Applications

Case Conversion with Selective Processing

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.

Removing Only Specific Characters

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.

Advanced ONLY Patterns

Conditional Character Processing

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.

Position-Specific Processing

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.

Quality Control and Auditing

Data Quality Metrics

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.

Usage Guidelines

  • Use ONLY conceptually when you need to process specific character sets exclusively
  • Combine multiple INSPECT operations for complex character processing requirements
  • Consider performance implications when processing large text fields
  • Use reference modification for position-specific processing
  • Test with boundary conditions and edge cases

Best Practices

  • Define clear character sets for validation and processing
  • Use descriptive variable names for character counts and flags
  • Document the purpose and scope of each INSPECT operation
  • Consider using tables for complex character mapping operations
  • Validate input data before processing to prevent unexpected results

Common Patterns

PatternUse CaseExample
Count Only DigitsNumeric validationTALLYING FOR ALL "0" THRU "9"
Replace Only PunctuationText cleaningREPLACING ALL "!" BY SPACE
Keep Only AlphanumericData sanitizationRemove non-alphanumeric chars
Convert Only CaseCase normalizationREPLACING "a" BY "A"

Related Concepts

INSPECT Statement

Primary statement for character examination and modification

TALLYING Clause

Counting characters or character sequences

REPLACING Clause

Character substitution operations

Character Ranges

Specifying character sets using THRU clause