【COBOL学習|初心者向け】ベテランが教えるCOBOLの基本:STRING文でデータをスマートに連結しよう

導入:なぜSTRING文が重要なのか?

COBOLの現場では、複数の項目を繋げて1つの文字列を作る作業が頻繁に発生します。例えば、「姓」と「名」を連結したり、日付の「年」「月」「日」をハイフンで繋いだりするケースです。初心者の方がやりがちなのは、MOVE文で一文字ずつ計算して転記する方法ですが、これではコードが複雑になり、ミスも起きやすくなります。STRING文を使えば、これらを一撃で、しかも安全に行うことができます。

基礎知識:STRING文の仕組み

STRING文は、複数のデータ項目を連結して一つの変数に格納するための命令です。
デリミタ(区切り文字)を指定することで、「どこまでを連結するか」を制御できるのが最大の特徴です。また、連結した結果が受け取り側の変数のサイズを超えてしまった場合に備え、エラーを検知する仕組み(OVERFLOW)や、書き込み位置を細かく制御する仕組み(POINTER)が用意されています。

実装:安全なデータ連結の作法

STRING文を使う際は、必ず「受け取り側の変数のサイズ」に注意してください。もし連結結果が入り切らない場合、プログラムが異常終了することはありませんが、データが途中で切り捨てられてしまいます。これを防ぐために、ON OVERFLOW句を使ってエラーハンドリングを行うのが、現場のプロとしての作法です。

サンプルプログラム

以下のコードは、姓と名をスペースで区切って結合し、結果が長すぎる場合は警告を出す実用的な例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. STRING-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 FIRST-NAME PIC X(10) VALUE ‘TARO’.
01 LAST-NAME PIC X(10) VALUE ‘YAMADA’.
01 FULL-NAME PIC X(20).
01 RESULT-STATUS PIC X(50).

PROCEDURE DIVISION.
> 姓と名の間にスペースを挟んでFULL-NAMEに結合する
STRING LAST-NAME DELIMITED BY SPACE
‘ ‘ DELIMITED BY SIZE
FIRST-NAME DELIMITED BY SPACE
INTO FULL-NAME
ON OVERFLOW
MOVE ‘警告:文字数が足りません’ TO RESULT-STATUS
NOT ON OVERFLOW
MOVE ‘連結成功’ TO RESULT-STATUS
END-STRING.

DISPLAY ‘結果: ‘ FULL-NAME.
DISPLAY ‘状態: ‘ RESULT-STATUS.

STOP RUN.

応用・注意点:現場で陥りやすい罠

1. DELIMITED BY SIZEの注意点:
上記のコードで「’ ‘ DELIMITED BY SIZE」と指定しているのは、スペース文字自体を連結対象に含めたいからです。もし「DELIMITED BY SPACE」としてしまうと、スペース自体が「区切り」とみなされ、無視されてしまうので注意してください。
2. 空白の削除:
STRING文は、指定した項目の中にある「不要な空白」を自動的に除去して連結してくれる便利な機能です。しかし、数値項目を連結する場合は、一度英数字項目にMOVEしてから連結するなど、型変換のルールをしっかり守ることがバグを防ぐコツです。

このSTRING文を使いこなせれば、帳票出力やデータ加工の効率が格段に上がります。ぜひ試してみてください!

コメント

タイトルとURLをコピーしました