COBOL言語の表操作とは?基本を理解して使いこなそう!|基礎ガイド

COBOL(コボル)言語の表とSEARCH文を使用した表検索とは

基礎-表操作とは?-イメージ

ソフトウェアにおける表とは?

一般的に表とは、一覧表などのデータを縦と横の線で区切ったものですが、ソフトウェアの世界での表は、データの並び(配列)を意味します。データが1列に並んだものを1次元配列、縦と横に並んだものを2次元配列、さらにそれを積み重ねたものを3次元配列と呼びます。

基礎-表操作とは?-配列

COBOL言語の表操作

COBOL言語の表(配列)はテーブルとも呼ばれ、定義して操作を行ったり、SEARCH文を使用して検索したりすることができます。配列にデータを保存したり、取り出したりする場合は、配列の要素番号を指定する必要があります。

配列はDATA DIVISIONに定義し、PROCEDURE DIVISIONで操作します。

表(配列)の定義

表(配列)は、DATA DIVISIONのデータ項目の定義で、OCCURS句を使用して定義します。

■書式

 データ項目の定義 OCCURS 最少要素数 TO 最大要素数

    DEPENDING ON 要素数管理項目

    INDEXED BY インデックス項目

<データ項目の定義>

 配列にするデータ項目定義を記述します。01、66、77、88レベルのデータ項目は配列化できませんが、レベル番号が正しければ、単体のデータ項目でも、集団項目でも配列化することができます。

<最少要素数>

 配列にする最少の要素数を0以上の整数の数値定数で指定します。

<最大要素数>

 配列にする最大の要素数を最少要素数以上の整数の数値定数で指定します。

<要素数管理項目>

 配列に格納されているデータ数を管理するデータ項目を指定します。要素数管理項目は、別途数値タイプで定義しておく必要があります。

<インデックス項目>

 SEARCH文で検索した結果の要素番号が入るデータ項目を指定します。インデックス項目は特殊なデータ項目であり、コンパイラにより自動生成されるため、別途定義する必要はありません。

表(配列)の操作

表(配列)にデータを設定したり、取り出したり、検索したりする操作は、PROCEDURE DIVISIONで行います。

配列内のデータの設定や取り出しは、配列データ項目名(配列番号)でダイレクトに行い、データの検索はSEARCH文を使用します。

■SEARCH文の書式

 SEARCH 検索表領域名(配列名)

   AT END

     検索条件に一致するデータがない場合に実行する命令群

   WHEN 検索条件

     検索条件に一致するデータがある場合に実行する命令群

 END-SEARCH.

<検索表領域名(配列名)>

 検索する表領域名(配列名)を記述します。

<検索条件に一致するデータがない場合に実行する命令群>

 検索条件に一致するデータがない場合に実行する命令を記述します。命令は複数でも単数でもかまいません。

<検索条件>

 検索する表領域(配列)の検索条件を論理式で記述します。検索対象項目に指定する要素番号は、表領域(配列)を定義したときに「INDEXED BY」で指定したSEARCH文用のインデックス項目を指定します。

<検索条件に一致するデータがある場合に実行する命令群>

 検索条件に一致するデータがある場合に実行する命令を記述します。命令は複数でも単数でもかまいません。

■プログラム例

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

  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. HYOU-SAMPLE1.
  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(64).
  16. * 商品テーブル
  17. 01 SHOHIN_TBL_MASTER.
  18. 03 TBL_SIZE PIC 9(01).
  19. 03 SHOHIN_TBL OCCURS 0 TO 5
  20. DEPENDING ON TBL_SIZE
  21. INDEXED BY TBL_IDX.
  22. 05 HINBAN PIC 9(01).
  23. 05 HINMEI PIC X(10).
  24. *-------------------------------------------
  25. * 主手続
  26. *-------------------------------------------
  27. PROCEDURE DIVISION.
  28. MAIN-PROCEDURE.
  29. * コンソール入力エリアの初期化
  30. MOVE ZERO TO CONSOLE-INPUT.
  31. * 商品テーブルの初期化
  32. SET TBL_SIZE TO 5.
  33. MOVE 1 TO HINBAN(1).
  34. MOVE 2 TO HINBAN(2).
  35. MOVE 3 TO HINBAN(3).
  36. MOVE 4 TO HINBAN(4).
  37. MOVE 5 TO HINBAN(5).
  38. MOVE "みかん" TO HINMEI(1).
  39. MOVE "りんご" TO HINMEI(2).
  40. MOVE "ばなな" TO HINMEI(3).
  41. MOVE "いちご" TO HINMEI(4).
  42. MOVE "めろん" TO HINMEI(5).
  43. EXEC-DISPLAY-INPUT-PROC.
  44. * コンソール表示&入力
  45. DISPLAY "商品番号を入力してください(1~5)".
  46. ACCEPT CONSOLE-INPUT FROM CONSOLE.
  47. * 商品テーブルの検索
  48. SET TBL_IDX TO 1.
  49. SEARCH SHOHIN_TBL
  50. AT END
  51. DISPLAY "入力番号が誤っています。"
  52. GO TO EXEC-DISPLAY-INPUT-PROC
  53. WHEN HINBAN(TBL_IDX) = CONSOLE-INPUT
  54. MOVE SPACE TO DISP_BUF
  55. STRING "商品名は「" HINMEI(TBL_IDX) "」です。"
  56. DELIMITED BY SPACE
  57. INTO DISP_BUF
  58. DISPLAY DISP_BUF
  59. END-SEARCH.
  60. END-PROC.
  61. STOP RUN.
  62. END PROGRAM HYOU-SAMPLE1.

■実行結果

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

基礎-表操作とは?-実行結果

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

基礎-表操作とは?-入力例1

エラーメッセージが表示され、再度、番号入力が促されました。

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

基礎-表操作とは?-入力例2

エラーメッセージが表示され、再度、番号入力が促されました。

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

基礎-表操作とは?-入力例3

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

COBOL言語の表操作の確認問題

問)
COBOL言語のプログラムにおいて、表(配列)の検索を行う命令文は何か。

答え)
SEARCH文。

表(配列)の概念と操作方法はCOBOL言語に限らず、ソフトウェアを作成する際には必要になる知識ですが、実際に配列を操作するロジックを1から自作するには時間と労力がかかります。幸いなことにCOBOL言語には、簡単に配列の検索ができる命令としてSEARCH文が用意されていますので、ぜひ使用方法を習得しておきましょう。

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

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

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

COBOL入門のカテゴリー

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