カテゴリ: COBOL 更新日: 2025/07/07

COBOLのINDEXED BY句を使ったインデックス管理の基本をやさしく解説!

INDEXED BY句を使ったインデックス管理の基本
INDEXED BY句を使ったインデックス管理の基本

先生と生徒の会話形式で理解しよう

生徒

「COBOLで配列を使うときに、どうやってどのデータを取り出すか指定するんですか?」

先生

「いい質問ですね。COBOLでは、配列(テーブル)を扱うときに『INDEXED BY句』という仕組みでインデックス管理ができますよ。」

生徒

「インデックスって何ですか? 難しそう……」

先生

「インデックスは、配列の中のどこを見ているかを記憶してくれる『しおり』のようなものです。イメージしやすいように、やさしく説明していきますね!」

1. INDEXED BY句とは?初心者でも安心の基礎知識

1. INDEXED BY句とは?初心者でも安心の基礎知識
1. INDEXED BY句とは?初心者でも安心の基礎知識

COBOLでは、同じ種類のデータをまとめて扱いたいときに「配列(テーブル)」を使います。たとえば、生徒の点数が10人分あるとき、それぞれ別々の変数を用意するのではなく、ひとつの配列にまとめて保存できます。

その配列の中から、どの位置のデータを見ているかを指定するのが「インデックス」です。そしてこのインデックスを使うために使われるのが、INDEXED BY句です。

簡単に言うと、「インデックス変数に名前をつけて、この名前を使って配列を操作できるようにするよ」というのがINDEXED BY句です。

2. INDEXED BY句の書き方と構文

2. INDEXED BY句の書き方と構文
2. INDEXED BY句の書き方と構文

INDEXED BY句は、OCCURS句(配列を定義するための句)と一緒に使います。構文は以下のようになります。


01 STUDENT-TABLE.
   05 STUDENT-NAME PIC X(20) OCCURS 10 TIMES
      INDEXED BY STU-IDX.

この例では、STUDENT-NAMEという20文字の名前を10人分格納できる配列を定義しています。そしてINDEXED BY STU-IDXによって、インデックス変数STU-IDXが使えるようになっています。

POINT:このSTU-IDXというインデックスは、通常の数字(1, 2, 3...)ではなく、「配列の位置を記憶する特別なポインタ」と考えてください。

3. INDEXED BYのしくみを日常でたとえてみよう

3. INDEXED BYのしくみを日常でたとえてみよう
3. INDEXED BYのしくみを日常でたとえてみよう

本を読んでいて「いま読んでいるページ」を覚えておくとき、しおりを挟みますよね? INDEXED BY句は、この「しおり」とそっくり。

配列(テーブル)は「本」のようなもので、各ページがデータのひとつひとつに相当します。そしてインデックスは「今どのページを見ているか」を教えてくれる道具です。

「5番目の生徒の名前を見よう」と思ったときに、インデックスを使ってそこへ一気にジャンプできます。

4. インデックスと添字(SUBSCRIPT)の違い

4. インデックスと添字(SUBSCRIPT)の違い
4. インデックスと添字(SUBSCRIPT)の違い

COBOLでは、配列の位置を指定する方法として、「添字(サブスクリプト)」と「インデックス」の2種類があります。

  • 添字(subscript):普通の数字を使って、1番目、2番目…と指定
  • インデックス(index):内部的にアドレスを使って高速にアクセスできる

つまり、INDEXED BYで定義したインデックスを使うと、高速で効率のよい検索や処理が可能になります。特に大量のデータを扱うときに便利です。

5. インデックスを使った検索例(SEARCH文との連携)

5. インデックスを使った検索例(SEARCH文との連携)
5. インデックスを使った検索例(SEARCH文との連携)

インデックスは、COBOLのSEARCH文という文とセットで使うことがよくあります。SEARCH文を使えば、配列の中から条件に合うデータを探し出すことができます。

以下は、「生徒の名前が 'YUI' のデータを探す」という処理の例です。


WORKING-STORAGE SECTION.
01 STUDENT-TABLE.
   05 STUDENT-NAME PIC X(20) OCCURS 10 TIMES
      INDEXED BY STU-IDX.

01 SEARCH-NAME    PIC X(20) VALUE "YUI".

PROCEDURE DIVISION.
    SEARCH STUDENT-NAME
        AT END
            DISPLAY "該当の名前は見つかりませんでした。"
        WHEN STUDENT-NAME(STU-IDX) = SEARCH-NAME
            DISPLAY "見つかりました! 名前:" STUDENT-NAME(STU-IDX)
    END-SEARCH.

このプログラムでは、SEARCH文で配列を順に調べて、条件に一致するデータを表示します。STU-IDXが配列の「位置」を指してくれるので、1つずつ確認していくことができます。

実行結果のイメージ:


見つかりました! 名前:YUI

6. INDEXED BY句の注意点

6. INDEXED BY句の注意点
6. INDEXED BY句の注意点

初心者が気をつけるポイントは以下のとおりです。

  • インデックス変数(例:STU-IDX)は、定義だけで値を直接代入することはできません。
  • SET STU-IDX TO 1 のように値を設定するには、SET文を使います。
  • インデックスは、PERFORM VARYINGSEARCHなどの文とセットで使うと効果的です。

7. まとめて覚えよう!INDEXED BY句のポイント

7. まとめて覚えよう!INDEXED BY句のポイント
7. まとめて覚えよう!INDEXED BY句のポイント
  • 配列(テーブル)を使うときに、どこを見ているかを指定するのがインデックス
  • INDEXED BY句は、インデックス変数を定義するために必要
  • SEARCH文などと組み合わせることで、効率的なデータ検索ができる
  • 初心者にもやさしい「しおり」のイメージで覚えると理解しやすい
カテゴリの一覧へ
新着記事
COBOLの変数名の付け方を解説!初心者でもわかる命名規則とコツ
C#のbreakとcontinueの使い方!ループ制御の基本テクニック
COBOLのFILLERの使い方とは?未使用領域を上手に管理する基本テクニック
C#のforeach文の基本!配列やコレクションを簡単に繰り返し処理する方法
人気記事
No.1
Java&Spring記事人気No1
COBOLのDISPLAY文の使い方を完全ガイド!初心者でもわかる出力方法
No.2
Java&Spring記事人気No2
C#のwhile文の使い方!条件付きループを基礎から学ぼう
No.3
Java&Spring記事人気No3
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.4
Java&Spring記事人気No4
COBOLのINDEXED BY句を使ったインデックス管理の基本をやさしく解説!