String Functions in COBOL

In COBOL, string manipulation is handled differently compared to more modern languages. COBOL uses the INSPECT verb for many string operations. Here’s an example showcasing some string operations in COBOL:

IDENTIFICATION DIVISION.
PROGRAM-ID. STRING-FUNCTIONS.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.

WORKING-STORAGE SECTION.
01 WS-STRING        PIC X(20) VALUE "test".
01 WS-RESULT        PIC 9(4).
01 WS-COUNT         PIC 9(4).
01 WS-INDEX         PIC 9(4).
01 WS-JOIN          PIC X(20).
01 WS-REPEAT        PIC X(20).
01 WS-REPLACE       PIC X(20).

PROCEDURE DIVISION.
MAIN-PROCEDURE.
    DISPLAY "String Functions in COBOL:".

    * Contains
    IF WS-STRING CONTAINS "es"
       DISPLAY "Contains:   TRUE"
    ELSE
       DISPLAY "Contains:   FALSE"
    END-IF.

    * Count
    MOVE ZERO TO WS-COUNT.
    INSPECT WS-STRING TALLYING WS-COUNT FOR ALL "t".
    DISPLAY "Count:      " WS-COUNT.

    * HasPrefix
    IF WS-STRING(1:2) = "te"
       DISPLAY "HasPrefix:  TRUE"
    ELSE
       DISPLAY "HasPrefix:  FALSE"
    END-IF.

    * HasSuffix
    IF WS-STRING(19:2) = "st"
       DISPLAY "HasSuffix:  TRUE"
    ELSE
       DISPLAY "HasSuffix:  FALSE"
    END-IF.

    * Index
    MOVE 1 TO WS-INDEX
    PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 20
       OR WS-STRING(WS-INDEX:1) = "e"
    END-PERFORM
    DISPLAY "Index:      " WS-INDEX.

    * Join (Simulated)
    STRING "a" DELIMITED BY SIZE
           "-" DELIMITED BY SIZE
           "b" DELIMITED BY SIZE
           INTO WS-JOIN
    END-STRING.
    DISPLAY "Join:       " WS-JOIN.

    * Repeat
    MOVE ALL "a" TO WS-REPEAT(1:5).
    DISPLAY "Repeat:     " WS-REPEAT.

    * Replace
    MOVE "foo" TO WS-REPLACE.
    INSPECT WS-REPLACE REPLACING ALL "o" BY "0".
    DISPLAY "Replace:    " WS-REPLACE.

    * Split (Not directly available in COBOL)
    DISPLAY "Split:      Not directly available in COBOL".

    * ToLower (Simulated)
    MOVE FUNCTION LOWER-CASE("TEST") TO WS-STRING.
    DISPLAY "ToLower:    " WS-STRING.

    * ToUpper
    MOVE FUNCTION UPPER-CASE("test") TO WS-STRING.
    DISPLAY "ToUpper:    " WS-STRING.

    STOP RUN.

This COBOL program demonstrates various string operations that are similar to the functions available in the Go strings package. Here’s a breakdown of the operations:

  1. Contains: Uses the CONTAINS keyword to check if a string contains a substring.
  2. Count: Uses INSPECT...TALLYING to count occurrences of a character.
  3. HasPrefix and HasSuffix: Checks the start and end of the string using substring references.
  4. Index: Simulated using a PERFORM loop to find the position of a character.
  5. Join: Simulated using the STRING verb to concatenate strings.
  6. Repeat: Uses the ALL keyword to repeat a character.
  7. Replace: Uses INSPECT...REPLACING to replace characters.
  8. Split: Not directly available in COBOL, but can be simulated using UNSTRING (not shown in this example).
  9. ToLower and ToUpper: Uses the LOWER-CASE and UPPER-CASE functions.

Note that COBOL’s string handling is generally less flexible than modern languages, and some operations require more verbose code or cannot be directly translated. The exact output may vary depending on the COBOL compiler and environment used.