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,ZEROES | n個の0を意味する | 数値 |
SPACE,SPACES | n個の空白を意味する | 文字 |
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句を指定できません。
また、初期値の長さは集団項目配下の全基本項目以下にする必要があります。