【COBOL学習|豆知識】COBOLの作法:72列を超えても慌てない!リテラル継続の正しい書き方

導入:なぜリテラルの継続が必要なのか

COBOLのプログラムを作成していると、非常に長いメッセージ文字列や、複雑な定数を定義したくなる場面があります。しかし、COBOLのソースコードには「72列まで」という物理的な制限があります。この制限を超えて文字列を記述しようとした際、ただ改行するだけではコンパイルエラーになってしまいます。今回は、この「長いリテラル」を正しく記述するための、ベテランなら知っておくべき継続規則について解説します。

基礎知識:COBOLソースの構造と継続の仕組み

COBOLのソース行は、主に「1-6桁目のシーケンス番号」「7桁目の標識領域」「8-72桁目の領域A・B」で構成されています。
ここで重要なのは「7桁目の標識領域」です。ここにハイフン(-)を記述することで、コンパイラに対して「この行は前の行の続きである」と伝えることができます。この仕組みを理解しておけば、どんなに長い文字列でもスマートに記述できるようになります。

実装と解決策:継続のルール

文字列リテラルを継続する際のルールは以下の通りです。
1. 前の行の文字列の途中で、あえて引用符(”)を閉じずに改行します。
2. 次の行の7桁目にハイフン(-)を記述します。
3. 次の行の領域B(8桁目以降)で、改めて引用符(”)を開始して文字列の続きを記述します。

重要な注意点として、継続行の引用符の直前にある空白は、文字列の一部として連結される可能性があります。そのため、意図しないスペースが混入しないよう、引用符の位置には注意を払いましょう。

サンプルプログラム:安全な継続記述

以下に、長い文字列を安全に継続させるサンプルコードを示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. LITERAL-TEST.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(100).

PROCEDURE DIVISION.
MAIN-PROCEDURE.

  • 72列を超えてしまうような長い文字列を定義する例
  • 7桁目にハイフンを置くことで、文字列が結合されます

MOVE “これは非常に長い文字列であり、1行では収まりきらないため”

  • “次の行へ継続して記述を行っています。” TO WS-MESSAGE.

DISPLAY WS-MESSAGE.
GOBACK.

応用・注意点:現場での落とし穴

現場でよくある失敗として、継続行の引用符の位置がずれてしまい、意図しない半角スペースが文字列の中に紛れ込んでしまうケースがあります。また、最近のコンパイラでは継続行を使わずに「文字列の結合(CONCATENATEなど)」を推奨するケースもありますが、既存の古い資産を保守する際には、この「7桁目のハイフン」による継続規則は必須の知識です。

また、日本語(全角文字)が含まれる場合、継続のさせ方によっては文字化けや、文字境界の分断によるエラーが発生する恐れがあります。日本語を含む場合は、可能な限り継続を行わず、定数定義を分けるか、領域内に収める設計を心がけるのが、ベテランとしての「事故を防ぐ」知恵です。

コメント

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