COBOL言語の「USAGE句」を基本から応用方法まで徹底解説! | 用語辞典

COBOL(コボル)言語の予約語USAGEを使ったデータ項目の表現形式の定義とは

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

COBOL(コボル)言語のUSAGE句とは?

USAGE(英語)は、日本語に訳すると「使用方法」という意味です。

COBOL(コボル)言語のUSAGE句は、英語のとおりデータ項目の使用方法(表現形式)を定義します。

USAGE句の形式

USAGE句は、データ項目の表現形式を定義します。USAGE句を省略した場合、「DISPLAY」という形式が暗黙で採用されます。

■書式

 レベル番号 データ項目名 PIC データ形式 USAGE 表現形式

■構文規則

 <レベル番号>

  データ項目のレベル番号を記述します。レベル番号は66と88を除く、01から49、および77を使用することができます。

 <データ項目名>

  データ項目名を記述します。

 <データ形式>

  データ項目のデータ形式を記述します。

 <表現形式>

  データ項目の表現形式を記述します。記述できる表現形式は、「DISPLAY」、「PACKED-DECIMAL」、「BINARY」、「NATIONAL」、「INDEX」、「COMP」、「COMP-3」の7種類です。それぞれの形式については、「USAGE句のCOBOL(コボル)言語における基本事項やルールについて」で説明します。

■使用例

 データ項目にUSAGE句を指定したプログラム例をご紹介します。

 サンプルプログラムは、表現形式にDISPLAYとPACKED-DECIMALを指定したデータ項目に整数値の1から10までを加算し、結果をコンソールに表示するプログラムです。

辞典・辞書-USAGE-使用例

 PACKED-DECIMAのデータ項目は、そのままでは表示できないため、37行目で暗黙の定義がDISPLAYのデータ項目に計算値を移送しています。

■実行結果

辞典・辞書-USAGE-実行結果

USAGE句のCOBOL(コボル)言語における基本事項やルールについて

記述できる表現形式は、「DISPLAY」、「PACKED-DECIMAL」、「BINARY」、「NATIONAL」、「INDEX」、「COMP」、「COMP-3」の7種類です。

■DISPLAY

DISPLAYはデータ項目が文字として表現されるデータ形式です。DISPLAYでは1文字を1バイトで表現し、数字の1から9は、EBCDICコードでは16進数のF1からF9に、ASCIIコードでは31から39になります。この数字を文字などで表す表現形式を外部10進形式、またはゾーン形式と呼びます。

■PACKED-DECIMAL

PACKED-DECIMALは数字項目を4ビットで表すデータ形式です。PACKED-DECIMALでは、1バイトに2つの数値を格納します。例えば、「123」という数値は、16進数で表すと「123+符号」になり、2バイトで表すことができます。

■BINARY

BINARYは、数値を2進数で表すデータ形式です。PICで定義する桁数と格納できるデータの値の関係は以下の通りです。

桁数

バイト数

格納できる値の範囲

1~4

2

-2の15乗~2の15乗-1
(-32,768~32,767)

5~9

4

-2の31乗~2の31乗-1
(-2,147,484,648~2,147,484,647)

10~18

8

-2の63乗~2の63乗-1
(-9,223,372,036,854,775,808~9,223,372,
036,854,775,807)

■NATIONARY

NATIONARYは、日本語文字項目を編集、格納するためのデータ形式です。

■INDEX

INDEXは、データ項目が指標項目で、表の要素の添え字(インデックス)とするためのデータ形式です。

■COMP

COMPは古いデータ形式で、BINARYに相当します。

■COMP-3

COMP-3は古いデータ形式で、PACKED-DECIMALに相当します。

COBOL(コボル)言語のUSAGE句を使うときの注意点

USAGE句でBINARYを指定した場合、物理的にメモリやファイルに格納するときに「エンディアン」を意識する必要があります。

エンディアンとは、コンピュータ(プロセッサ)のアーキテクチャの違いによるメモリ上のデータ格納順序です。ワークステーション系やUNIX系ではビッグエンディアン、パソコン系ではリトルエンディアンが採用されています。

例えば、10進数の15をメモリに格納する場合、ビッグエンディアンでは16進数の「000F」、リトルエンディアンでは16進数の「0F00」で格納されます。

USAGE句を使ったCOBOL(コボル)プログラムの活用方法

整数値をBINARYで定義すると、DISPLAYやPACKED-DECIMALで定義するよりも、計算速度が上がります。逆に小数点以下がある値を計算するときには、計算速度が落ちます。

では、1+1を100万回、DISPLAYとBINARYで計算させてみましょう。

   
  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7.  IDENTIFICATION DIVISION.
  8.  PROGRAM-ID. USAGE-SUMPLE2.
  9.  DATA DIVISION.
  10.  FILE SECTION.
  11.  WORKING-STORAGE SECTION.
  12.  01 WORKING-AREA.
  13. * カウンタ&合計
  14.   03 CNT PIC 9(7).
  15.   03 KEKKA_DISPLAY PIC 9(7) USAGE DISPLAY.
  16.   03 KEKKA_BIN PIC 9(7) USAGE BINARY.
  17.   03 KEKKA_TMP PIC X(7).
  18. * コンソール表示バッファ
  19.   03 DSP_BUF PIC X(64).
  20.  
  21. *-------------------------------------------
  22. * 主手続
  23. *-------------------------------------------
  24.  PROCEDURE DIVISION.
  25.  MAIN-PROCEDURE.
  26. * カウンタと合計エリアの初期化
  27.   MOVE 0 TO KEKKA_DISPLAY.
  28.   MOVE 0 TO KEKKA_BIN.
  29.  
  30. * ゾーン形式で1,000,000,回加算し、結果を表示する
  31.   DISPLAY "ゾーン形式での計算を開始します。".
  32.   PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 1000000
  33.    COMPUTE KEKKA_DISPLAY = KEKKA_DISPLAY + 1
  34.   END-PERFORM.
  35.  
  36.   DISPLAY "計算が終了しました。".
  37. MOVE SPACE TO DSP_BUF.
  38. STRING "計算結果は「" KEKKA_DISPLAY "」です。"
  39. DELIMITED BY SPACE
  40. INTO DSP_BUF.
  41. DISPLAY DSP_BUF.
  42.  
  43. * バイナリ形式で1,000,000回加算し、結果を表示する
  44. DISPLAY "バイナリ形式での計算を開始します。".
  45. PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 1000000
  46. COMPUTE KEKKA_BIN = KEKKA_BIN + 1
  47. END-PERFORM.
  48.  
  49. DISPLAY "計算が終了しました。".
  50. MOVE KEKKA_BIN TO KEKKA_TMP.
  51. MOVE SPACE TO DSP_BUF.
  52. STRING "計算結果は「" KEKKA_TMP "」です。"
  53. DELIMITED BY SPACE
  54.   INTO DSP_BUF.
  55. DISPLAY DSP_BUF.
  56.  
  57. STOP RUN.
  58.  END PROGRAM USAGE-SUMPLE2.

■実行結果

辞典・辞書-USAGE-実行結果

「USAGE句を使ったCOBOL(コボル)プログラムの活用方法」のサンプルプログラムの実行結果画面からではわかりませんが、実際にサンプルプログラムを実行してみると、計算速度の違いを実感できるでしょう。整数値の計算で速度を求められる場合は、USAGE句を使用してデータ形式をBINARYにすることも、スピードアップ手段として視野に入れてくださいね。

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

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

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

COBOL入門のカテゴリー

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