【COBOL学習|豆知識】意外と知らない「JUSTIFIED RIGHT」の挙動 — 上位桁を切り捨てるテクニック

1. 導入:なぜ「JUSTIFIED RIGHT」が必要なのか

COBOLの基本ルールでは、英数字項目への転記は「左詰め」が原則です。しかし、帳票のレイアウト調整や、特定のフォーマットに合わせるために「右端を基準にしたい」という場面に遭遇することがあります。通常のMOVEで桁あふれが発生すると、右側のデータが欠落してしまいますが、JUSTIFIED RIGHT句を使うことで、逆に「左側(上位桁)」を切り捨てて右側を保持することが可能です。この挙動を正しく理解することで、データ編集の柔軟性がぐっと広がります。

2. 基礎知識:転記の仕組み

COBOLのMOVE命令において、転記先の項目長よりも転記元のデータが長い場合、デフォルトでは「左詰め」で格納されます。
例えば、5桁の項目に「1234567」をMOVEすると、左から順に埋まり、右側の「67」が切り捨てられます。
一方で、データ定義に「JUSTIFIED RIGHT(またはJUSTIFIED)」を指定すると、転記のルールが「右詰め」に変わります。この場合、転記元データの「右端」が転記先の「右端」に合わせられるため、入りきらないデータは「左側(上位桁)」から順に切り捨てられることになります。

3. 実装と解決策

この機能を活用する際は、転記先のデータ定義にJUSTIFIED RIGHT句を記述するだけです。
特に、数値ではない「コード」や「識別子」の一部を切り出して管理する場合や、特定の下位桁のみを抽出したい場合に有効です。

4. サンプルプログラム

以下のコードをコピーして、実際に挙動を確認してみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. JUSTIFY-TEST.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • 通常の項目(左詰め用)

01 WS-NORMAL-FIELD PIC X(3).

  • 右詰め指定項目

01 WS-JUST-FIELD PIC X(3) JUSTIFIED RIGHT.

PROCEDURE DIVISION.

  • 5文字の文字列を転記

MOVE “ABCDE” TO WS-NORMAL-FIELD.
MOVE “ABCDE” TO WS-JUST-FIELD.

  • 結果の表示
  • WS-NORMAL-FIELD は “ABC” となり、右側が消える

DISPLAY “通常転記: [” WS-NORMAL-FIELD “]”

  • WS-JUST-FIELD は “CDE” となり、左側の “AB” が切り捨てられる

DISPLAY “JUSTIFIED転記: [” WS-JUST-FIELD “]”

STOP RUN.

5. 応用・注意点

現場でこの機能を使う際の注意点が二つあります。
一つ目は、数値項目(PIC 9)には指定できないという点です。JUSTIFIED句は英数字項目(PIC X)専用の指定であるため、数値演算に使おうとするとコンパイルエラーになります。
二つ目は、可読性の問題です。ソースコードを読んだ他のプログラマーが「なぜ右詰めが必要なのか」を直感的に理解できない場合があります。特殊な切り捨てを行っている箇所には、必ずコメントで「上位桁を切り捨てる意図であること」を明記しておくのが、ベテラン技術者の作法です。

このTipsを使いこなせば、複雑な文字列操作もスマートに解決できるようになります。ぜひ活用してください。

コメント

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