ACCEPT文

キーボードから入力されたデータをCOBOLプログラム上で受け取るにはACCEPT文を使用します。

下記サンプルではACCEPT文によりキーボードから入力されたデータをNUM項目にセットし、その内容をDISPLAY文でコンソール上に出力しています。


000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-03.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 NUM                           PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     ACCEPT    NUM                FROM  CONSOLE.
000130     DISPLAY  "NUM の内容は " NUM UPON  CONSOLE.
000140     STOP RUN.

ACCEPT文 書式
ACCEPT 受け取り項目 UPON 受け取り先.

受け取り項目
受け取った情報を保存するデータ項目を指定する。

受け取り先
コンソールまたは標準入力のどちらで受け取るか指定する。
CONSOLEコンソールからデータを受け取る
SYSIN標準入力からデータを受け取る

ACCEPT文使用時の注意点

ACCEPT文で指定する受け取り項目に数値形式のデータ項目を指定した際、数値以外のデータを受け取ると、実行時にエラーが発生してしまいます。
キーボード(あるいは標準入力)から入力されるデータは、必ず数値だけであるとは限りませんので、通常、受け取り項目で指定するデータ項目は英数字形式とするのが一般的です。
そしてもし、数値のみのデータを受け取りたい場合は、ACCEPT文の直後に数値かどうかの判定を行います。


000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-04.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-INPUT-AREA.
000090    03  WRK-INPUT-DATA-X          PIC X(3).
000100    03  FILLER              REDEFINES WRK-INPUT-DATA-X.
000110        05  WRK-INPUT-DATA        PIC 9(3).
000120*
000130 PROCEDURE DIVISION.
000140 MAIN.
000150     ACCEPT   WRK-INPUT-DATA-X                FROM  CONSOLE.
000160     IF  WRK-INPUT-DATA  IS  NUMERIC  THEN
000170         DISPLAY  "NUM の内容は " NUM         UPON  CONSOLE
000180     ELSE
000190         DISPLAY  "数値以外が入力されました"  UPON  CONSOLE
000200     END-IF.
000210     STOP RUN.

IS NUMERICは、数値形式のデータ項目にセットされているデータが数値であるかどうかを判定するために使用します。
また、IS NOT NUMERICを指定すると、数値以外かどうかを判定します。

ただし、IS NUMERICで数値かどうかを判定できるのは数値形式(9タイプ)のデータ項目だけであり、数値形式以外のデータ項目を指定した場合、正しい結果を得ることはできません。

そのため、ACCEPT文と組み合わせて使用する場合、上記サンプルのようにデータ項目に対して工夫が必要となります。