COBOL言語の「ACCEPT文」の使い方を分かり易く解説 | 用語辞典

COBOL(コボル)言語の予約語ACCEPTを使った命令文の書き方とは

辞典・辞書-ACCEPT-イメージ

COBOL(コボル)言語のACCEPT文とは?

COBOL(コボル)には、様々な予約語が用意されていますが、その中のACCEPTは、その意味の通りデータを受け取ったり、ハードウェア装置の時刻や年月日などを取得して格納する機能を持ちます。(ACCEPTとは、受け入れる・受納するという意味です。)

辞典・辞書-ACCEPT-実行例1

書き方1:(データの取得)
・ACCEPT 一意名(受け取りデータ項目) FROM 呼び名(取得先指定)

使用例1:
・ACCEPT CONSOLE-INPUT-DATA FROM CONSOLE
・ACCEPT SYSIN-INPUT-DATA    FROM SYSIN
※CONSOLEはコンソール(操作卓)からデータを取得し、SYSINは入力されたデータを取得します。

辞典・辞書-ACCEPT-実行例2

書き方2: (ハードウェア装置から日時データなどを取得)
・ACCEPT 一意名(受け取りデータ項目) FROM データ形式(DATE・DAY・TIMEなど)

使用例2:
・ACCEPT DATE-DATA FROM DATE  (現在の年月日を取得します。)
・ACCEPT DAY-DATA FROM DAY   (年と1月1日からの経過日を取得します。)
・ACCEPT TIME-DATA FROM TIME (現在の時刻を取得します。)
・ACCEPT DOW-DATA FROM DAY-OF-WEEK (現在の曜日を取得します。)
※受け取れるデータの形式は、下記「日時を取得する場合の形式一覧」をご覧ください。

COBOL(コボル)言語で、日時を取得する場合の形式一覧

辞典・辞書-ACCEPT-形式一覧

※表示例は、2017年01月01日01時01分にデータを取得して出力したと仮定した場合になります。

※DAYは、「yy」:年の下2桁と、「ddd」:1月1日からカウントした現在の経過日数3桁が格納されます。(最大366まで)

※DAY-OF-WEEKは、現在の曜日を数値で表します。(月曜日:1、火曜日:2、水曜日:3、木曜日:4、金曜日:5、土曜日:6、日曜日:7)

※上記データ形式、「DATE、DAY、D-O-W」の書式に使われている「y」は年、「m」は月、「d」は日を表しています。

※上記データ形式、「TIME」の書式に使われている「hh」は時、「mm」は分、「ss」は秒、「ms」はミリ秒を表しています。

ACCEPT文のCOBOL言語におけるルールについて

1. ACCEPT文は、少量のデータを受け取る際に使われます。大量のデータ処理をすることはできませんので注意しましょう。

2. 書き方1のように、呼び名を指定する場合、ACCEPTで指定した呼び名のハードウェア装置を環境部内の「特殊名段落」で指定して関連付ける必要があります。この時、FROMの指定を省略した場合、ハードウェアの標準装置(SYSIN)が選択されたと認識されます。

3. ACCEPT文で、CONSOLE(コンソール)などから入力データを受け取る際は、作業場所節(WORKING-STORAGE SECTION)で設定した数値分(文字数)のデータを受け取ります。

4. データ取得先がCONSOLEと設定されているACCEPT文が実行された場合、あらかじめ登録したメッセージを自動で読み込み表示します。

その際、ACCEPT文はプログラム処理を中断し、キー入力が完了するまでプログラムの処理を待機状態にします。入力が完了すると、入力されたデータを受け取り項目へ格納し次の処理に移行します。

5. 書き方2の形式で受け取れるデータは、ACCEPT文と一部の関連命令文・関数内でのみ有効なデータなため、データ部など他のプログラム処理内で呼び出して使うことはできません。

6. 書き方2の、DAYやDATEなどのデータ形式は、基本的に西暦下2桁までしか取得できません。4桁の西暦を表示させたい場合は、「CURRENT-DATE関数」を使うことで、取得することが可能です。

COBOL(コボル)言語のACCEPT文を使う上での注意点

1. ACCEPT文は、取得先からデータを受け取る際、指定された形式(文字や数値の形式)が正しいかどうかの検査を行ないません。

2. ACCEPT文は、作業場所節(WORKING-STORAGE SECTION)の受取りデータ項目で指定した形式以外のデータを受け取ると、正常にデータを取得できない(エラーになる)場合があります。

そこで、事前に入力された形式のチェックをIF文などで指定した上で処理を分岐させる方法があります。(COBOL言語での分岐の記述方法とACCEPT文の記述方法は1番上の画像で確認できます。)

3. 基本事項・ルールでも記載しましたが、ACCEPT文は作業場所節の中で指定した数値分(文字数)のデータを、指定のデータ項目へ格納します。ですが、受け取ったデータが指定数以上の大きさで送られてきた場合は、左端のデータから指定数だけを取得し残りは切り捨てます。

4. 上記とは逆に、指定の大きさ以下のデータが送られてきた場合、数字項目ならば0を、文字項目ならば空白が挿入されます。(例えば、「PIC 999」と指定した数字項目に数値1という桁数を満たさないデータが送られた場合、「001」というデータとして格納します。

また、「PIC XXX」と指定した文字項目に文字扱いの1というデータが送られてきた場合、1□□というデータとして格納します。) ※□は空白です。 文字項目の場合、入力された場所の情報がそのまま送られてきます。ですので、入力した箇所以外に空白が挿入されます。

5. ACCEPT文は、文字項目で受け取るのが一般的です。数字項目も扱えない訳ではありませんが、処理の違いを確認する必要があります。

ACCEPT文を使ったCOBOL(コボル)プログラムの活用法

COBOL(コボル)言語でちょっとしたデータの受取りに非常に便利なACCEPT文ですが、データ部(DATA DIVISION)内の画面節(SCREEN SECTION)を活用することで、画面をコントロールする機能も備わっています。そこで今回はサンプルとして簡易な入力装置をご紹介します。

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. ACCEPT-SAMPLE03.
  3.  
  4. ENVIRONMENT DIVISION.
  5. CONFIGURATION SECTION.
  6. SPECIAL-NAMES.
  7. CURSOR IS CURSOR-POSITION.
  8. CRT STATUS IS CRT-DATA.
  9.  
  10. DATA DIVISION.
  11. WORKING-STORAGE SECTION.
  12. 01 CURSOR-POSITION PIC 9(6).
  13. 01 CRT-DATA PIC 9(4).
  14. 01 WARNING PIC X(5) VALUE "INPUT".
  15. 01 INPUT-RESULT PIC X(5).
  16.  
  17. SCREEN      SECTION.
  18. 01 CONSOLE-SCLEEN
  19. LINE 12 COLUMN 37.
  20. 05 WARNING-STRING PIC X(10)
  21. FROM WARNING.
  22. 05 INPUT-RESULT-SCREEN
  23. LINE 14 COLUMN 37 PIC X(5)
  24. TO INPUT-RESULT.
  25.  
  26. PROCEDURE   DIVISION.
  27.  
  28. MOVE "014037" TO CURSOR-POSITION.
  29. ACCEPT CONSOLE-SCLEEN
  30. ON EXCEPTION DISPLAY "ELL...".
  31.  
  32. STOP-RUN.

このプログラムは、起動すると画面中央にINPUTという文字と文字入力欄が5箇所分でてきて、入力された文字を受け取ります。画面節をコントロールするACCEPT文でも、通常時と同じく入力データを受け渡す役割をもっています。

それを利用し、キーボードなどの入力装置から入力データを取得します。このような、ファイルからデータを呼び出す必要のない簡単な処理をさせるのに、ACCEPT文は向いています。カーソルなどの動きも管理することができますので、キー入力を促す効果も期待できます。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門