The ALL clause represents one of COBOL's most versatile and powerful pattern matching mechanisms, serving as a universal qualifier that enables comprehensive string operations, character replacement, and pattern recognition across multiple COBOL statements. Far more than a simple literal qualifier, the ALL clause embodies COBOL's sophisticated approach to text processing by providing precise control over pattern matching, character manipulation, string transformation, and comprehensive text analysis that enable applications to handle complex string processing requirements while maintaining the efficiency and reliability characteristics that make COBOL ideal for enterprise text processing environments requiring advanced string manipulation capabilities.
In enterprise computing environments, the ALL clause serves as a critical foundation for advanced text processing, enabling developers to create sophisticated business applications that handle complex string manipulation requirements, pattern recognition tasks, data transformation workflows, and text validation processes. Its capabilities extend far beyond simple character replacement to encompass sophisticated pattern analysis, dynamic string generation, conditional text processing, and integration with modern data validation systems that are essential for applications requiring comprehensive text processing and string manipulation coordination capabilities.
12345678910111213*> Replace all occurrences of a character INSPECT INPUT-FIELD REPLACING ALL "A" BY "X". *> Count all occurrences of a pattern INSPECT INPUT-FIELD TALLYING WS-COUNT FOR ALL "ABC". *> Replace all spaces with underscores INSPECT INPUT-FIELD REPLACING ALL SPACES BY "_". *> Complex pattern replacement INSPECT INPUT-FIELD REPLACING ALL "OLD" BY "NEW" ALL "BAD" BY "GOOD".
ALL with INSPECT enables comprehensive character and pattern replacement operations.
12345678910111213*> Fill field with repeating pattern STRING ALL "*" DELIMITED BY SIZE INTO OUTPUT-FIELD. *> Create separator line STRING ALL "-" DELIMITED BY SIZE INTO SEPARATOR-LINE. *> Fill with specific character STRING ALL "X" DELIMITED BY SIZE INTO MASK-FIELD. *> Create padding STRING INPUT-DATA DELIMITED BY SPACE ALL " " DELIMITED BY SIZE INTO PADDED-FIELD.
ALL with STRING creates repeating patterns and fills fields with specific characters.
123456789101112131415*> Use ALL to specify multiple delimiters UNSTRING INPUT-STRING DELIMITED BY ALL "," OR ALL ";" OR ALL ":" INTO FIELD-1, FIELD-2, FIELD-3. *> Parse with whitespace delimiters UNSTRING INPUT-STRING DELIMITED BY ALL SPACES OR ALL LOW-VALUES INTO OUTPUT-FIELDS(1), OUTPUT-FIELDS(2). *> Complex delimiter handling UNSTRING COMPLEX-STRING DELIMITED BY ALL "||" OR ALL "::" INTO PART-1, PART-2, PART-3 WITH POINTER WS-POINTER.
ALL with UNSTRING handles multiple delimiter patterns for complex string parsing.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147IDENTIFICATION DIVISION. PROGRAM-ID. ALL-CLAUSE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-DATA. 05 CUSTOMER-NAME PIC X(30) VALUE "JOHN A. SMITH". 05 PHONE-NUMBER PIC X(15) VALUE "123-456-7890". 05 ADDRESS-LINE PIC X(50) VALUE "123 MAIN ST, ANYTOWN, NY". 05 COMMENT-FIELD PIC X(100) VALUE "SPECIAL||CUSTOMER::HIGH||PRIORITY". 01 OUTPUT-FIELDS. 05 FORMATTED-NAME PIC X(30). 05 CLEAN-PHONE PIC X(15). 05 MASKED-ADDRESS PIC X(50). 05 SEPARATOR-LINE PIC X(50). 01 PARSING-FIELDS. 05 COMMENT-PARTS OCCURS 10 TIMES PIC X(20). 05 ADDRESS-PARTS OCCURS 5 TIMES PIC X(15). 01 COUNTERS. 05 SPACE-COUNT PIC 9(3) VALUE 0. 05 DASH-COUNT PIC 9(3) VALUE 0. 05 VOWEL-COUNT PIC 9(3) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== ALL Clause Demonstration ===". DISPLAY " ". PERFORM DEMONSTRATE-INSPECT-ALL PERFORM DEMONSTRATE-STRING-ALL PERFORM DEMONSTRATE-UNSTRING-ALL PERFORM DEMONSTRATE-ADVANCED-PATTERNS DISPLAY " ". DISPLAY "ALL clause demonstration completed". STOP RUN. DEMONSTRATE-INSPECT-ALL. DISPLAY "1. INSPECT with ALL Operations:". DISPLAY " ============================". *> Count operations INSPECT CUSTOMER-NAME TALLYING SPACE-COUNT FOR ALL SPACES. DISPLAY " Spaces in name: " SPACE-COUNT. INSPECT PHONE-NUMBER TALLYING DASH-COUNT FOR ALL "-". DISPLAY " Dashes in phone: " DASH-COUNT. INSPECT CUSTOMER-NAME TALLYING VOWEL-COUNT FOR ALL "A" ALL "E" ALL "I" ALL "O" ALL "U". DISPLAY " Vowels in name: " VOWEL-COUNT. *> Character replacement MOVE CUSTOMER-NAME TO FORMATTED-NAME. INSPECT FORMATTED-NAME REPLACING ALL "." BY " ". INSPECT FORMATTED-NAME REPLACING ALL " " BY " ". DISPLAY " Original name: " CUSTOMER-NAME. DISPLAY " Formatted name: " FORMATTED-NAME. *> Phone number cleaning MOVE PHONE-NUMBER TO CLEAN-PHONE. INSPECT CLEAN-PHONE REPLACING ALL "-" BY " ". DISPLAY " Original phone: " PHONE-NUMBER. DISPLAY " Clean phone: " CLEAN-PHONE. DISPLAY " ". DEMONSTRATE-STRING-ALL. DISPLAY "2. STRING with ALL Operations:". DISPLAY " ============================". *> Create separator line STRING ALL "=" DELIMITED BY SIZE INTO SEPARATOR-LINE. DISPLAY " Separator: " SEPARATOR-LINE. *> Create masked address MOVE SPACES TO MASKED-ADDRESS. STRING ALL "*" DELIMITED BY SIZE INTO MASKED-ADDRESS. DISPLAY " Masked field: " MASKED-ADDRESS(1:20) "...". *> Pattern creation MOVE SPACES TO FORMATTED-NAME. STRING ">>>" DELIMITED BY SIZE ALL "-" DELIMITED BY SIZE "<<<" DELIMITED BY SIZE INTO FORMATTED-NAME. DISPLAY " Pattern: " FORMATTED-NAME(1:25). DISPLAY " ". DEMONSTRATE-UNSTRING-ALL. DISPLAY "3. UNSTRING with ALL Delimiters:". DISPLAY " ==============================". *> Parse comment field with multiple delimiters UNSTRING COMMENT-FIELD DELIMITED BY ALL "::" OR ALL "||" INTO COMMENT-PARTS(1), COMMENT-PARTS(2), COMMENT-PARTS(3), COMMENT-PARTS(4). DISPLAY " Original comment: " COMMENT-FIELD(1:40) "...". DISPLAY " Part 1: " COMMENT-PARTS(1). DISPLAY " Part 2: " COMMENT-PARTS(2). DISPLAY " Part 3: " COMMENT-PARTS(3). DISPLAY " Part 4: " COMMENT-PARTS(4). *> Parse address with comma delimiter UNSTRING ADDRESS-LINE DELIMITED BY ALL ", " INTO ADDRESS-PARTS(1), ADDRESS-PARTS(2), ADDRESS-PARTS(3). DISPLAY " Original address: " ADDRESS-LINE. DISPLAY " Street: " ADDRESS-PARTS(1). DISPLAY " City: " ADDRESS-PARTS(2). DISPLAY " State: " ADDRESS-PARTS(3). DISPLAY " ". DEMONSTRATE-ADVANCED-PATTERNS. DISPLAY "4. Advanced ALL Patterns:". DISPLAY " =======================". *> Complex text processing MOVE "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG" TO FORMATTED-NAME. *> Replace multiple patterns INSPECT FORMATTED-NAME REPLACING ALL "THE" BY "***" ALL "FOX" BY "CAT" ALL "DOG" BY "MOUSE". DISPLAY " Processed text: " FORMATTED-NAME. *> Create formatted output MOVE SPACES TO MASKED-ADDRESS. STRING "DATA: " DELIMITED BY SIZE ALL "X" DELIMITED BY SIZE " :END" DELIMITED BY SIZE INTO MASKED-ADDRESS. DISPLAY " Formatted output: " MASKED-ADDRESS(1:30). DISPLAY " ".