COBOL - 字符串处理

COBOL 中的字符串处理语句用于对字符串执行多种功能操作。 以下是字符串处理语句 −

  • Inspect
  • String
  • Unstring

Inspect

Inspect 动词用于计算或替换字符串中的字符。 可以对字母数字、数字或字母值执行字符串操作。 检查操作是从左到右进行的。 用于字符串操作的选项如下 −

Tallying

Tallying 统计选项用于统计字符串字符数。

语法

以下是 Tallying 选项的语法 −

INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS

使用的参数是 −

  • input-string − 要计算字符数的字符串。
  • output-count − 用于保存字符数的数据项。

示例

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-CNT1 PIC 9(2) VALUE 0.
   01 WS-CNT2 PIC 9(2) VALUE 0.
   01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.
   
PROCEDURE DIVISION.
   INSPECT WS-STRING TALLYING WS-CNT1 FOR CHARACTER.
   DISPLAY "WS-CNT1 : "WS-CNT1.
   INSPECT WS-STRING TALLYING WS-CNT2 FOR ALL 'A'.
   DISPLAY "WS-CNT2 : "WS-CNT2
   
STOP RUN.

JCL来执行上述COBOL程序。

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

当你编译并执行上面的程序时,它会产生以下结果 −

WS-CNT1 : 15
WS-CNT2 : 06

Replacing

Replacing 替换选项用于替换字符串字符。

语法

以下是替换选项的语法 −

INSPECT input-string REPLACING ALL char1 BY char2.

使用的参数是 −

  • input-string − 要将字符从 char1 替换为 char2 的字符串。

示例

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.

PROCEDURE DIVISION.
   DISPLAY "OLD STRING : "WS-STRING.
   INSPECT WS-STRING REPLACING ALL 'A' BY 'X'.
   DISPLAY "NEW STRING : "WS-STRING.
   
STOP RUN.

JCL来执行上述COBOL程序。

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

当你编译并执行上面的程序时,它会产生以下结果 −

OLD STRING : ABCDACDADEAAAFF
NEW STRING : XBCDXCDXDEXXXFF

String

String 动词用于连接字符串。 使用STRING语句,可以组合两个或多个字符串以形成更长的字符串。 "Delimited By"子句是强制性的。

语法

以下是 String 动词的语法 −

STRING ws-string1 DELIMITED BY SPACE
   ws-string2 DELIMITED BY SIZE
   INTO ws-destination-string
   WITH POINTER ws-count
   ON OVERFLOW DISPLAY message1
   NOT ON OVERFLOW DISPLAY message2
END-STRING.

以下是所使用参数的详细信息 −

  • ws-string1 和 ws-string2 :要连接的输入字符串
  • ws-string:输出字符串
  • ws-count :用于计算新连接字符串的长度
  • Delimited 指定字符串的结尾
  • Pointer和Overflow是可选的

示例

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC A(30).
   01 WS-STR1 PIC A(15) VALUE 'Tutorialspoint'.
   01 WS-STR2 PIC A(7) VALUE 'Welcome'.
   01 WS-STR3 PIC A(7) VALUE 'To AND'.
   01 WS-COUNT PIC 99 VALUE 1.

PROCEDURE DIVISION.
   STRING WS-STR2 DELIMITED BY SIZE
      WS-STR3 DELIMITED BY SPACE
      WS-STR1 DELIMITED BY SIZE
      INTO WS-STRING 
      WITH POINTER WS-COUNT
      ON OVERFLOW DISPLAY 'OVERFLOW!' 
   END-STRING.
   
   DISPLAY 'WS-STRING : 'WS-STRING.
   DISPLAY 'WS-COUNT : 'WS-COUNT.

STOP RUN.

JCL 执行上面的COBOL程序 −

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

当你编译并执行上面的程序时,它会产生以下结果 −

WS-STRING : WelcomeToTutorialspoint       
WS-COUNT : 25

Unstring

Unstring 动词用于将一个字符串拆分为多个子字符串。 Delimited By 子句是强制性的。

语法

以下是 Unstring 动词的语法 −

UNSTRING ws-string DELIMITED BY SPACE
INTO ws-str1, ws-str2
WITH POINTER ws-count
ON OVERFLOW DISPLAY message
NOT ON OVERFLOW DISPLAY message
END-UNSTRING.

示例

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC A(30) VALUE 'WELCOME TO TUTORIALSPOINT'.
   01 WS-STR1 PIC A(7).
   01 WS-STR2 PIC A(2).
   01 WS-STR3 PIC A(15).
   01 WS-COUNT PIC 99 VALUE 1.

PROCEDURE DIVISION.
   UNSTRING WS-STRING DELIMITED BY SPACE
      INTO WS-STR1, WS-STR2, WS-STR3
   END-UNSTRING.
   
   DISPLAY 'WS-STR1 : 'WS-STR1.
   DISPLAY 'WS-STR2 : 'WS-STR2.
   DISPLAY 'WS-STR3 : 'WS-STR3.
   
STOP RUN.

JCL 执行上面的COBOL程序 −

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

当你编译并执行上面的程序时,它会产生以下结果 −

WS-STR1 : WELCOME
WS-STR2 : TO
WS-STR3 : TUTORIALSPOINT