1. 導入:なぜ文字定数が重要なのか
COBOLでのプログラミングにおいて、プログラム内で「固定された文字列」を扱うことは非常に多いです。例えば、エラーメッセージ、画面の固定見出し、あるいはファイル出力のヘッダーなどがこれに当たります。これらを適切に定義し、扱うことは、ソースコードの読みやすさを高め、誤植によるバグを防ぐために非常に重要です。今回は、COBOLにおける「文字定数(リテラル)」の扱い方について解説します。
2. 基礎知識:リテラルとは何か
「リテラル(Literal)」とは、プログラムのソースコード内に直接記述された「値そのもの」を指します。変数(データ項目)が中身を入れ替えられる箱であるのに対し、文字定数は「その場に書かれた動かせない文字」です。
COBOLでは、この文字定数は二重引用符(”)または単一引用符(’)で囲んで記述します。どちらを使っても構いませんが、プロジェクト内のコーディング規約でどちらかに統一するのが一般的です。
3. 実装と解決策:継続行のルールをマスターする
文字定数は非常に便利ですが、長い文字列を記述する際に注意が必要です。COBOLの伝統的な固定形式では、1行の中に書ける長さには限界があります。もし文字列が長すぎて行の最後(72桁目)に達してしまった場合、そのまま改行することはできません。
そこで登場するのが「継続行」のルールです。7桁目(標識領域)に「-(ハイフン)」を記述することで、前の行からの文字列が続いていることをコンパイラに伝えます。この作法を覚えておかないと、コンパイルエラーの原因となります。
4. サンプルプログラム
以下は、文字定数を定義し、変数に格納して表示する簡単なサンプルプログラムです。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-LITERAL.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 15文字分のスペースを確保
01 WS-MSG PIC X(15).
PROCEDURE DIVISION.
> 文字定数を変数に代入
MOVE “HELLO WORLD” TO WS-MSG.
DISPLAY “出力結果1: ” WS-MSG.
> 長い文字列を継続行で記述する例
> 7桁目にハイフンを入れることで文字列を連結します
MOVE “これは非常に長い文字定数の”
- “テストです。” TO WS-MSG.
DISPLAY “出力結果2: ” WS-MSG.
STOP RUN.
5. 応用・注意点:現場でのトラブルを避けるために
現場の技術者として、以下の点に注意してください。
・引用符の混在は避ける
プログラム内で「’」と「”」を混ぜて使うと、コードの可読性が著しく低下します。開発チームでどちらを使うかあらかじめ決めておきましょう。
・文字定数の中に引用符を含める場合
例えば、文字列の中に「”」という文字そのものを含めたい場合は、もう片方の引用符(’)で囲むことで表現可能です。
例: MOVE ‘名前は”COBOL”です’ TO WS-NAME.
・最大長の制限
古いシステム(COBOL 85以前)では160文字という制限がありますが、現代のコンパイラではより長い文字列も扱えます。ただし、メンテナンス性を考えると、あまりに長い文字列をプログラムに直接埋め込むのは避け、外部のパラメータファイルや定数定義専用のコピー句(COPY句)に切り出す工夫も検討してください。
これらを意識するだけで、あなたのコードは格段に美しく、保守性の高いものになります。ぜひ活用してください。

コメント