String handling in COBOL refers to operations for manipulating character strings (alphanumeric data). COBOL provides powerful string manipulation capabilities through STRING (concatenation), UNSTRING (parsing), INSPECT (replacement and counting), and intrinsic functions. Understanding string handling is essential for data transformation, formatting, parsing, and text processing in COBOL programs.
This guide covers STRING for concatenating strings, UNSTRING for parsing strings, INSPECT for character operations, string functions, and best practices for effective string handling in COBOL.
STRING concatenates multiple strings into a target field:
1234567891011121314151617WORKING-STORAGE SECTION. 01 FIRST-NAME PIC X(20) VALUE 'JOHN'. 01 LAST-NAME PIC X(20) VALUE 'SMITH'. 01 FULL-NAME PIC X(50). PROCEDURE DIVISION. MAIN-LOGIC. STRING FIRST-NAME DELIMITED BY SIZE " " DELIMITED BY SIZE LAST-NAME DELIMITED BY SIZE INTO FULL-NAME END-STRING DISPLAY "Full name: " FULL-NAME *> Displays: JOHN SMITH STOP RUN.
UNSTRING parses a source string into multiple target fields:
1234567891011121314151617181920WORKING-STORAGE SECTION. 01 INPUT-LINE PIC X(50) VALUE 'JOHN,SMITH,12345'. 01 FIRST-NAME PIC X(20). 01 LAST-NAME PIC X(20). 01 ID-NUMBER PIC X(10). PROCEDURE DIVISION. MAIN-LOGIC. UNSTRING INPUT-LINE DELIMITED BY "," INTO FIRST-NAME LAST-NAME ID-NUMBER END-UNSTRING DISPLAY "First: " FIRST-NAME DISPLAY "Last: " LAST-NAME DISPLAY "ID: " ID-NUMBER STOP RUN.
INSPECT performs character replacement and counting:
1234567891011WORKING-STORAGE SECTION. 01 TEXT-LINE PIC X(50) VALUE 'Hello, World!'. PROCEDURE DIVISION. MAIN-LOGIC. *> Replace commas with spaces INSPECT TEXT-LINE REPLACING ALL "," BY " " DISPLAY "After replace: " TEXT-LINE *> Displays: Hello World! STOP RUN.
12345678910111213141516171819202122WORKING-STORAGE SECTION. 01 TEXT PIC X(30) VALUE ' Hello World '. 01 TEXT-LENGTH PIC 9(3). 01 TEXT-UPPER PIC X(30). 01 TEXT-TRIMMED PIC X(30). PROCEDURE DIVISION. MAIN-LOGIC. *> Get length COMPUTE TEXT-LENGTH = FUNCTION LENGTH(TEXT) *> Convert to uppercase MOVE FUNCTION UPPER-CASE(TEXT) TO TEXT-UPPER *> Trim spaces MOVE FUNCTION TRIM(TEXT) TO TEXT-TRIMMED DISPLAY "Length: " TEXT-LENGTH DISPLAY "Upper: " TEXT-UPPER DISPLAY "Trimmed: " TEXT-TRIMMED STOP RUN.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849IDENTIFICATION DIVISION. PROGRAM-ID. STRING-HANDLING-EXAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-ID PIC 9(8) VALUE 12345678. 01 CUSTOMER-NAME PIC X(30) VALUE 'JOHN SMITH'. 01 BALANCE PIC S9(8)V99 VALUE 1234.56. 01 FORMATTED-MESSAGE PIC X(100). 01 INPUT-CSV PIC X(100) VALUE '12345,JOHN,SMITH,1000.00'. 01 PARSED-FIELDS. 05 PARSED-ID PIC X(10). 05 PARSED-FIRST PIC X(20). 05 PARSED-LAST PIC X(20). 05 PARSED-AMOUNT PIC X(10). PROCEDURE DIVISION. MAIN-LOGIC. DISPLAY "=== String Handling Examples ===" *> STRING example - build formatted message STRING "Customer ID: " DELIMITED BY SIZE CUSTOMER-ID DELIMITED BY SIZE " | Name: " DELIMITED BY SIZE CUSTOMER-NAME DELIMITED BY SIZE " | Balance: $" DELIMITED BY SIZE BALANCE DELIMITED BY SIZE INTO FORMATTED-MESSAGE END-STRING DISPLAY "Formatted: " FORMATTED-MESSAGE *> UNSTRING example - parse CSV UNSTRING INPUT-CSV DELIMITED BY "," INTO PARSED-ID PARSED-FIRST PARSED-LAST PARSED-AMOUNT END-UNSTRING DISPLAY "Parsed ID: " PARSED-ID DISPLAY "Parsed First: " PARSED-FIRST DISPLAY "Parsed Last: " PARSED-LAST DISPLAY "Parsed Amount: " PARSED-AMOUNT *> INSPECT example - clean data INSPECT FORMATTED-MESSAGE REPLACING ALL " " BY "-" DISPLAY "After INSPECT: " FORMATTED-MESSAGE STOP RUN.
1. What does STRING do?
2. What does UNSTRING do?
3. What is INSPECT used for?
4. What does DELIMITED BY SIZE mean?