導入:なぜ「ALL」が必要なのか?
COBOL開発の現場で、画面の罫線を作成したり、配列を特定の値で埋めたりする際、一つひとつ手作業で文字を並べていませんか?「10個のハイフンを並べるために『———-』と書く」……これでは可読性も低く、修正時に桁数を数え間違えるリスクがあります。ここで登場するのが「ALL」表意定数です。これを使うことで、定義したサイズに合わせて自動的に文字列を埋めてくれるため、コードの保守性が劇的に向上します。
基礎知識:表意定数とは何か
COBOLにおける「表意定数(Figurative Constant)」とは、特定の値を表現するためにあらかじめ予約された名称のことです。「ZERO(0)」や「SPACE(空白)」などが代表的ですが、「ALL」は少し特殊で、「後に続く文字列を、項目の長さに応じて自動的に繰り返す」という役割を持ちます。
例えば、PIC X(5)に対して「VALUE ALL “AB”」と指定すると、自動的に「ABABA」という値がセットされます。
実装と解決策
「ALL」は、主に以下の2つのシーンで真価を発揮します。
1. データの初期化: 特定の値(例えばすべて’9’など)でワークエリアを埋めたい場合。
2. 帳票や画面の装飾: 罫線や区切り文字を、項目の桁数に合わせて動的に表示したい場合。
PICTURE句の桁数が変更になったとしても、VALUE句を書き直す必要がないため、仕様変更に強いコードが書けます。
サンプルプログラム
以下は、ALL表意定数を使用して罫線や初期値設定を行うサンプルコードです。
000200 PROGRAM-ID. ALL-SAMPLE.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 罫線を10文字分定義(ハイフンで自動埋め)
000600 05 WS-LINE-10 PIC X(10) VALUE ALL “-“.
000700 罫線を20文字分定義(桁数を変えても自動対応)
000800 05 WS-LINE-20 PIC X(20) VALUE ALL “-“.
000900 繰り返し文字(ABCを繰り返して埋める)
001000 05 WS-REPEAT PIC X(9) VALUE ALL “ABC”.
001100
001200 PROCEDURE DIVISION.
001300 DISPLAY “10桁の罫線: ” WS-LINE-10.
001400 DISPLAY “20桁の罫線: ” WS-LINE-20.
001500 DISPLAY “繰り返し値 : ” WS-REPEAT.
001600 STOP RUN.
応用・注意点
現場で使う際のポイントは、「PICTURE句の長さとの兼ね合い」です。
・端数の扱い:指定した文字列の長さが、PICTURE句の桁数で割り切れない場合、最後は中途半端な位置で切り捨てられます。例えば、PIC X(4)にALL “ABC”を指定すると「ABCA」となります。
・数値項目での使用:ALLは基本的には文字項目(PIC X)で使用しますが、数値項目(PIC 9)で使用する場合は注意が必要です。PIC 9(3)にVALUE ALL “1”とすると「111」となりますが、計算で使用する際は、意図しない値になっていないか、一度MOVEして確認する癖をつけましょう。
「ALL」を使いこなして、無駄な文字数カウントから解放され、より本質的なロジック構築に時間を使いましょう!

コメント