定数の種類

COBOLでは、プログラム中に記述したデータを定数と呼びます。

定数は、数値定数、文字定数、表意定数の3つに分けることができます。


数値定数

プログラム中に記述した数値データを「数値定数」と言います。
数値定数は、符号(+/-)、数字(0~9)、小数点(.)を組み合わせて記述します。
ただし、プラス値を表すときは符号(+)を省略できます。

000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-14.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-NUMBER    PIC 9(5).
000090 01 WRK-PAI       PIC 9V9(4).
000100 01 WRK-MINUS     PIC S9(5).
000110*
000120 PROCEDURE DIVISION.
000130 MAIN.
000140     MOVE 12345    TO WRK-NUMBER.
000150     MOVE 3.1415   TO WRK-PAI.
000160     MOVE -12345   TO WRK-MINUS.
000170*
000180     DISPLAY "WRK-NUMBER[" WRK-NUMBER "]".
000190     DISPLAY "WRK-PAI[" WRK-PAI "]".
000200     DISPLAY "WRK-MINUS[" WRK-MINUS "]".
000210     STOP RUN.

実行結果
WRK-NUMBER[12345]
WRK-PAI[3.1415]
WRK-MINUS[-12345]

なお、数値定数の最大桁数は18桁(整数部・小数部の合計)と決められています。



文字定数

プログラム中に記述した文字データを「文字定数」と言います。
文字定数を記述するときは、前後をダブルクォーテーション(“)もしくはシングルクォーテーション(‘)で括ります。

000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-15.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-STRING      PIC X(5).
000090 01 WRK-NUMSTRING   PIC X(5).
000100 01 WRK-HEXASCII    PIC X(3).
000110*
000120 PROCEDURE DIVISION.
000130 MAIN.
000140     MOVE "ABCDE"    TO WRK-STRING.
000150     MOVE "12345"    TO WRK-NUMSTRING.
000160     MOVE X"414243"  TO WRK-HEXASCII.
000170*
000180     DISPLAY "WRK-STRING[" WRK-STRING "]".
000190     DISPLAY "WRK-NUMSTRING[" WRK-NUMSTRING "]".
000200     DISPLAY "WRK-HEXASCII[" WRK-HEXASCII "]".
000210     STOP RUN.

実行結果
WRK-STRING[ABCDE]
WRK-NUMSTRING[12345]
WRK-HEXASCII[ABC]

内容が数値だとしても、ダブルクォーテーション(もしくはシングルクォーテーション)で括れば、文字定数として扱われます。
また、文字を16進文字コードで記述することもできます。
その場合は、ダブルクォーテーションの前に「X」を記述します。

なお、文字定数の最大長は160文字(160バイト)となります。



表意定数

COBOLには、数値のゼロや文字のスペースなどを表す特殊な定数があります。
それらを「表意定数」と言います。


表意定数の種類
意味形式
ZERO,ZEROS,ZEROESn個の0を意味する数値
SPACE,SPACESn個の空白を意味する文字
QUOTE,QUOTES領域全体を引用符(“)で埋める文字
HIGH-VALUE,HIGH-VALUES領域全体をFFで埋める文字
LOW-VALUE,LOW-VALUES領域全体を00で埋める文字
ALL定数指定した文字定数を領域全体に埋める文字

000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-16.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-NUMBER      PIC 9(5).
000090 01 WRK-STRING      PIC X(5).
000100 01 WRK-ASTRING     PIC X(5).
000110*
000120 PROCEDURE DIVISION.
000130 MAIN.
000140     MOVE ZERO      TO WRK-NUMBER.
000160     MOVE SPACE     TO WRK-STRING.
000160     MOVE ALL "A"   TO WRK-ASTRING.
000170*
000180     DISPLAY "WRK-NUMBER[" WRK-NUMBER "]".
000190     DISPLAY "WRK-STRING[" WRK-STRING "]".
000200     DISPLAY "WRK-ASTRING[" WRK-ASTRING "]".
000210     STOP RUN.

WRK-NUMBER[00000]
WRK-STRING[     ]
WRK-ASTRING[AAAAA]


データ項目の初期値を定義する

上記サンプルではMOVE文による定数の転記方法を紹介していますが、データ定義時に各データ項目に初期値を設定することも可能です。

000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-17.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-NUMBER      PIC 9(5) VALUE 12345.
000090 01 WRK-STRING      PIC X(5) VALUE "ABCDE".
000100*
000110 01 WRK-DATA       VALUE "12345ABDCE".
000120    03 WRK-ITEM1    PIC 9(5).
000130    03 WRK-ITEM2    PIC X(5).
000140*
000150 PROCEDURE DIVISION.
000160 MAIN.
000170     DISPLAY "WRK-NUMBER[" WRK-NUMBER "]".
000180     DISPLAY "WRK-STRING[" WRK-STRING "]".
000190*
000200     DISPLAY "WRK-ITEM1[" WRK-ITEM1 "]".
000210     DISPLAY "WRK-ITEM2[" WRK-ITEM2 "]".
000220     STOP RUN.

実行結果
WRK-NUMBER[12345]
WRK-STRING[ABCDE]
WRK-ITEM1[12345]
WRK-ITEM2[ABDCE]

データ項目に初期値を設定するにはVALUE句を使用します。
VALUE句を使用した初期値の設定は、プログラム内で値が常に同じである場合は非常に便利な方法です。

VALUE句は基本項目だけでなく集団項目にも指定できます。
その場合、その集団項目配下の集団項目や基本項目にはVALUE句を指定できません。
また、初期値の長さは集団項目配下の全基本項目以下にする必要があります。