COBOL言語の「INDEX句」について知ろう!使い方とは | 用語辞典

COBOL(コボル)言語の予約語INDEXを使った配列(表)のアクセスとは

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

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

INDEX(英語)は、日本語に訳すると「目盛り(名詞)」、「索引をつける(動詞)」という意味です。

COBOL(コボル)言語のINDEX句は、配列の索引(インデックス)となる指標データ項目を定義するために使用します。

INDEX句の形式

INDEX句は、指標データ項目を定義するために使用しますが、現在は単体で定義されることはありません。なぜなら、SEARCH文で検索できる配列を定義するときに使用する「INDEXED BY」によって、指標データ項目がコンパイラにより自動的に定義されるからです。

■書式

 レベル番号 データ項目名 USAGE INDEX

■構文規則

 <レベル番号>

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

 <データ項目名>

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

■使用例

 実際にINDEX句を使用したプログラム例をご紹介します。

 このプログラムは、コンソールに商品番号の入力を促すメッセージを表示したのち、入力された商品番号を商品テーブルから検索し、商品名を表示するプログラムです。該当する商品番号がない場合は、商品コードの再入力を促します。

辞典・辞書-INDEX-使用例

■実行結果

はじめに商品番号入力を促すメッセージが表示されます。

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

数字の5を入力してみます。

辞典・辞書-INDEX-入力例

商品名「メロン」が表示され、プログラムが終了しました。

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

INDEX句は、基本項目のデータ項目の表現形式を指標データ型(インデックス)にします。インデックスは配列の検索に使用することができます。

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

INDEX句を指定できるのは基本項目だけです。集団項目には指定できないことに注意してください。

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

INDEX句の発展形にINDEXEDという予約語があります。「INDEXED BY」を使用すると、配列インデックスをつけることができ、インデックスがつくとSEARCH文を使って、配列を簡単に検索することができます。

■INDEXED BYの構文

レベル番号 データ項目名 OCCURS OCCURS TO 最大要素数

   DEPENDING ON 要素数管理項目名
   INDEXED BY インデックス項目名

<レベル番号>

レベル番号を記述します。

<データ項目名>

配列化するデータ項目名を記述します。基本項目と集団項目が記述できます。

<最小要素数>

配列がとり得る最小の要素数を記述します。

<最大要素数>

配列がとり得る最大の要素数を記述します。

<要素管理項目名>

配列の要素数を管理するデータ項目名を記述します。要素管理項目は別途定義が必要です。

<インデックス項目名>

配列のインデックス名を記述します。インデックスの定義はコンパイラが自動で行うため、別途定義する必要はありません。

■INDEXED BYを使用したプログラム例

「COBOL(コボル)言語のINDEX句とは?」でご紹介したサンプルプログラムに、値段を表示する機能を追加し、データ項目を配列化してインデックスをつけ、SEARCH文による検索に変更してみましょう。

   
  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. INDEX-SUMPLE2.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. WORKING-STORAGE SECTION.
  12. 01 WORKING-AREA.
  13. * コンソール入力&表示バッファ
  14. 03 CONSOLE-INPUT PIC 9(01).
  15. 03 DISP_BUF PIC X(20).
  16.  
  17. * 商品テーブル
  18. 01 SHOHIN_TBL_MASTER.
  19. 03 TBL_SIZE PIC 9(01).
  20. 03 SHOHIN_TBL OCCURS 0 TO 5
  21. DEPENDING ON TBL_SIZE
  22. INDEXED BY TBL_IDX.
  23. 05 HINBAN PIC 9(01).
  24. 05 HINMEI PIC X(10).
  25. 05 NEDAN PIC 9(03).
  26.  
  27. PROCEDURE DIVISION.
  28. *-------------------------------------------
  29. * 主手続
  30. *-------------------------------------------
  31. MAIN-PROCEDURE.
  32. * コンソール入力エリアの初期化
  33. MOVE ZERO TO CONSOLE-INPUT.
  34.  
  35. * 商品テーブルの初期化
  36. SET TBL_SIZE TO 5.
  37. MOVE 1 TO HINBAN(1).
  38. MOVE 2 TO HINBAN(2).
  39. MOVE 3 TO HINBAN(3).
  40. MOVE 4 TO HINBAN(4).
  41. MOVE 5 TO HINBAN(5).
  42. MOVE "みかん" TO HINMEI(1).
  43. MOVE "りんご" TO HINMEI(2).
  44. MOVE "バナナ" TO HINMEI(3).
  45. MOVE "いちご" TO HINMEI(4).
  46. MOVE "メロン" TO HINMEI(5).
  47. MOVE 100 TO NEDAN(1).
  48. MOVE 200 TO NEDAN(2).
  49. MOVE 250 TO NEDAN(3).
  50. MOVE 600 TO NEDAN(4).
  51. MOVE 900 TO NEDAN(5).
  52.  
  53. EXEC-DISPLAY-INPUT-PROC.
  54. * コンソール表示&入力
  55. DISPLAY "商品番号を入力してください(1~5)".
  56. ACCEPT CONSOLE-INPUT FROM CONSOLE.
  57.  
  58. * 商品テーブルの検索
  59. SET TBL_IDX TO 1.
  60. SEARCH SHOHIN_TBL
  61. AT END
  62. DISPLAY "1~5の値を入力してください"
  63. GO TO EXEC-DISPLAY-INPUT-PROC
  64.  
  65. WHEN HINBAN(TBL_IDX) = CONSOLE-INPUT
  66. MOVE SPACE TO DISP_BUF
  67. STRING HINMEI(TBL_IDX) " " "(" NEDAN(TBL_IDX) "円)"
  68. DELIMITED BY SPACE
  69. INTO DISP_BUF
  70. DISPLAY DISP_BUF
  71. END-SEARCH.
  72.  
  73. END-PROC.
  74. STOP RUN.
  75. END PROGRAM INDEX-SUMPLE2.

■実行結果

はじめに商品番号入力を促すメッセージが表示されます。

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

数字の5を入力してみます。

辞典・辞書-INDEX-入力例

「メロン (900円)」が表示され、プログラムが終了しました。

配列の検索を自分でプログラミングすると、何10ステップものコーディングとデバッグが必要ですが、INDEXED BYを使って配列にインデックスをつけ、SEARCH文を使って検索すると、10ステップとかからず、デバッグも簡単です。「できるだけ自分で作らないプログラム」がバグを内包しないプログラムですので、配列の検索は、ぜひINDEXED BYとSEARCH文を活用しましょう。

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

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

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

COBOL入門のカテゴリー

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