【COBOL学習|豆知識】COBOLの「部分参照」を使いこなす ― 長さを省略してコードをスマートに

導入

COBOLでの文字列操作において、特定の範囲を切り出す「部分参照」は避けて通れない技術です。しかし、皆さんは部分参照の「長さ」を毎回必死に計算していませんか?項目の末尾までを対象にしたい場合、長さを省略できることを知っておくと、コードの可視性が高まり、仕様変更にも強いプログラムが書けるようになります。これは、メンテナンス性を重視するベテラン技術者にとって必須の作法です。

基礎知識

COBOLの部分参照とは、データ項目名の後ろに括弧を付け、開始位置と長さを指定することで、データの一部だけを参照する機能です。通常は `(開始位置:長さ)` と記述しますが、この「長さ」を省略した記述(`開始位置:`)が可能です。これにより、プログラムは「開始位置から、その項目の末尾まで」を自動的に判別して処理します。

実装・解決策

長さの指定を省略するメリットは、何と言っても「項目の全長をハードコーディングしなくて済む」点にあります。もし将来、項目の定義長を変更した場合でも、部分参照の長さを指定している箇所をすべて修正する必要がありません。この「可変長を意識した記述」こそが、堅牢なシステム構築の第一歩です。

サンプルプログラム

以下のコードは、文字列の5文字目から最後まですべてを別項目に転記する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. PARTIAL-REF-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STR PIC X(20) VALUE ‘01234ABCDEFGHIJ’.
01 WS-REMAINDER PIC X(20) VALUE SPACES.

PROCEDURE DIVISION.
> 5文字目から最後までの全データを転記する
> 長さを指定しないことで、WS-STRの残りの長さを意識せずに済む
MOVE WS-STR(5:) TO WS-REMAINDER.

DISPLAY ‘元の文字列: ‘ WS-STR.
DISPLAY ‘切り出し結果: ‘ WS-REMAINDER.

GOBACK.

応用・注意点

このテクニックを使う際の注意点は、転記先の項目の長さです。部分参照した結果の長さが、転記先の項目サイズよりも大きい場合、当然ながら切り捨て(トランケート)が発生します。
また、開始位置に指定する値が項目の長さを超えてしまうと、実行時にエラー(範囲外参照)となる可能性があるため、事前に `IF` 文等で開始位置の妥当性をチェックする癖をつけましょう。現場では、この「動的な扱い」と「安全な境界チェック」をセットで実装することが、バグを未然に防ぐコツです。

コメント

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