COBOL - 字串處理



COBOL 中的字串處理語句用於對字串執行多種功能操作。以下是字串處理語句:

  • 檢查
  • 字串
  • 拆分字串

檢查

Inspect 動詞用於計數或替換字串中的字元。字串操作可以對字母數字、數字或字母值執行。Inspect 操作從左到右執行。用於字串操作的選項如下:

計數

計數選項用於計數字符串字元。

語法

以下是計數選項的語法:

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

替換

替換選項用於替換字串字元。

語法

以下是替換選項的語法:

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 語句,可以將兩個或多個字元字串組合成一個較長的字串。“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 動詞用於將一個字串拆分為多個子字串。“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 
廣告

© . All rights reserved.