Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
💻 COBOL

COBOL UNSTRING Statement

Intermediate 🕑 10 min read 👁 0 views

COBOL UNSTRING Statement

The UNSTRING statement splits a string into multiple fields based on delimiters.

Syntax

UNSTRING identifier-1
    DELIMITED BY [ALL] identifier/literal [OR identifier/literal]
    INTO identifier-2 [DELIMITER IN identifier-3] [COUNT IN identifier-4]
         identifier-5 ...
    [WITH POINTER identifier]
    [TALLYING IN identifier]
    [ON OVERFLOW imperative-statement]
[END-UNSTRING]

Example Program

       IDENTIFICATION DIVISION.
       PROGRAM-ID. UNSTRING-DEMO.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-INPUT-LINE  PIC X(50)
           VALUE 'John,Smith,New York,NY,10001'.
       01 WS-FIRST-NAME  PIC X(15).
       01 WS-LAST-NAME   PIC X(15).
       01 WS-CITY        PIC X(15).
       01 WS-STATE       PIC X(2).
       01 WS-ZIP         PIC X(5).
       01 WS-DELIM       PIC X(1).
       01 WS-COUNT       PIC 99.
       01 WS-TALLY       PIC 99 VALUE 0.

       PROCEDURE DIVISION.
      * Simple UNSTRING
           UNSTRING WS-INPUT-LINE
               DELIMITED BY ','
               INTO WS-FIRST-NAME
                    WS-LAST-NAME
                    WS-CITY
                    WS-STATE
                    WS-ZIP
               TALLYING IN WS-TALLY
           END-UNSTRING

           DISPLAY 'First Name: [' WS-FIRST-NAME ']'
           DISPLAY 'Last Name:  [' WS-LAST-NAME ']'
           DISPLAY 'City:       [' WS-CITY ']'
           DISPLAY 'State:      [' WS-STATE ']'
           DISPLAY 'ZIP:        [' WS-ZIP ']'
           DISPLAY 'Fields found: ' WS-TALLY

      * Multiple delimiters
           MOVE 'Data1;Data2,Data3' TO WS-INPUT-LINE
           INITIALIZE WS-FIRST-NAME WS-LAST-NAME WS-CITY
           MOVE 0 TO WS-TALLY

           UNSTRING WS-INPUT-LINE
               DELIMITED BY ';' OR ','
               INTO WS-FIRST-NAME
                    WS-LAST-NAME
                    WS-CITY
               TALLYING IN WS-TALLY
           END-UNSTRING

           DISPLAY 'Multi-delim test:'
           DISPLAY 'Field 1: ' WS-FIRST-NAME
           DISPLAY 'Field 2: ' WS-LAST-NAME
           DISPLAY 'Field 3: ' WS-CITY

           STOP RUN.

Expected Output

First Name: [John           ]
Last Name:  [Smith          ]
City:       [New York       ]
State:      [NY]
ZIP:        [10001]
Fields found: 05
Multi-delim test:
Field 1: Data1
Field 2: Data2
Field 3: Data3

Key Points

  • DELIMITED BY specifies separator(s)
  • OR allows multiple delimiters
  • ALL treats consecutive delimiters as one
  • TALLYING counts fields extracted
  • DELIMITER IN captures the delimiter used