本文へスキップ
BecomeCoder

COBOLコース · 第4章 基本の命令 ― MOVE・演算・条件分岐 · レッスン24

文字列操作 ― STRING / UNSTRING / INSPECT

ブラウザで完結

導入

これまでは1つの文字列を丸ごと扱う MOVE を見てきましたが、実務では「複数の文字列をつなげる」「区切り文字で分割する」「特定の文字を数える・置き換える」といった操作もよく必要になります。COBOLにはそれぞれ専用の命令が用意されています。

説明

STRING文(連結) … 複数の文字列を1つにつなげます。

       01  WS-FIRST             PIC X(10)    VALUE "TANAKA".
       01  WS-LAST              PIC X(10)    VALUE "TARO".
       01  WS-FULL-NAME         PIC X(21).

       PROCEDURE DIVISION.
           STRING WS-FIRST DELIMITED BY SPACE
                  " " DELIMITED BY SIZE
                  WS-LAST DELIMITED BY SPACE
                  INTO WS-FULL-NAME.
           DISPLAY WS-FULL-NAME.
      *>  結果: "TANAKA TARO"
  • DELIMITED BY SPACE … 「空白が出てきたところまで」を連結対象にする(右側の余分な空白を無視する)。
  • DELIMITED BY SIZE … 宣言された桁数ぶん全部を連結対象にする。
  • INTO WS-FULL-NAME … 連結結果の格納先。

UNSTRING文(分割) … 区切り文字で文字列を分割します。

       01  WS-CSV-LINE          PIC X(20)    VALUE "Yamada,Hanako,32".
       01  WS-NAME2             PIC X(10).
       01  WS-KANA              PIC X(10).
       01  WS-AGE2              PIC X(3).

       PROCEDURE DIVISION.
           UNSTRING WS-CSV-LINE DELIMITED BY ","
               INTO WS-NAME2 WS-KANA WS-AGE2.
           DISPLAY WS-NAME2.
      *>  結果: "Yamada"(カンマまでの部分がそれぞれの変数へ)

CSV形式のデータ(第7章で扱うファイル処理でよく登場します)を、カンマ区切りでフィールドごとに分解するのに便利です。

INSPECT文(検査・置換) … 文字の数を数えたり、置き換えたりします。

       01  WS-TEXT              PIC X(20)    VALUE "AAABBBCCC".
       01  WS-COUNT2            PIC 9(2)     VALUE 0.

       PROCEDURE DIVISION.
           INSPECT WS-TEXT TALLYING WS-COUNT2 FOR ALL "B".
           DISPLAY WS-COUNT2.
      *>  結果: 03("B" が3個含まれている。WS-COUNT2 は PIC 9(2) なので2桁表示)

           INSPECT WS-TEXT REPLACING ALL "B" BY "X".
           DISPLAY WS-TEXT.
      *>  結果: "AAAXXXCCC"
  • TALLYING ... FOR ALL "文字" … 指定した文字(または文字列)の出現回数を数える。
  • REPLACING ALL "文字" BY "文字" … 指定した文字を別の文字に置き換える。

これら3つの命令(STRING・UNSTRING・INSPECT)は、テキストデータやCSVを扱うバッチ処理プログラムで非常によく使われます。

試すには

"Sato,Ichiro,45" のような文字列をUNSTRING文で氏名・名・年齢の3つの変数に分割し、STRING文で "氏名: Sato" のような文字列に組み立て直すコードを書いてみましょう。

実際に動かしてみよう

下のエディタにCOBOLを書いて「実行」を押すと、学習用シミュレータが DISPLAY の出力を表示します(本物のGnuCOBOLではなく、教材の範囲を再現した軽量エンジンです)。PICTURE句の桁数・ゼロ詰め・切り捨てなどCOBOLらしい挙動もそのまま体験できます。本文の例を書き換えて動かしてみましょう(ファイル処理やCALLなど一部の機能は対象外です)。

COBOL — ブラウザ内で実行(学習用シミュレータ)

COBOLの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGnuCOBOLではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。