本文へスキップ
BecomeCoder

COBOLコース · 第8章 索引編成ファイルとランダムアクセス · レッスン44

相対編成ファイルの触り ― RELATIVEというもう一つの選択肢

ローカル実施

導入

索引編成ファイルの他にも、COBOLには 相対編成ファイル(RELATIVE) という第三のファイル構成があります。この章の締めくくりとして、その考え方に軽く触れておきましょう。

説明

相対編成ファイルは、各レコードを**先頭からの相対的な位置番号(レコード番号)**でアクセスする方式です。

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SLOT-FILE ASSIGN TO "slots.dat"
               ORGANIZATION IS RELATIVE
               ACCESS MODE IS RANDOM
               RELATIVE KEY IS WS-SLOT-NO.

       WORKING-STORAGE SECTION.
       01  WS-SLOT-NO           PIC 9(4).

       PROCEDURE DIVISION.
           MOVE 5 TO WS-SLOT-NO.
           READ SLOT-FILE
               INVALID KEY
                   DISPLAY "5番目のレコードは存在しません"
               NOT INVALID KEY
                   DISPLAY "5番目のレコードを読み込みました"
           END-READ.
  • ORGANIZATION IS RELATIVE … 相対編成であることを宣言。
  • RELATIVE KEY IS WS-SLOT-NO … キーとして使うのは、業務データの一部(顧客番号など)ではなく、単なる連番の位置番号

索引編成ファイルとの違いを整理します。

索引編成(INDEXED相対編成(RELATIVE
キーの正体業務データの一部(顧客番号など)ファイル内の相対的な位置番号
内部の仕組みインデックス(索引)による検索位置番号から直接計算してアクセス
アクセス速度インデックス経由(高速だが索引の管理コストあり)位置がわかれば非常に高速
向いている場面業務キーで検索したい一般的な場面固定長のスロット・キューのような用途

相対編成ファイルは、**「あらかじめ決まった件数分のスロット(枠)を確保しておき、番号で直接アクセスしたい」**ような、やや特殊な用途で使われます。実務での登場頻度は索引編成ファイルほど高くありませんが、「COBOLにはファイル構成が3種類(順編成・索引編成・相対編成)ある」ということを知っておくと、他人のコードを読むときに迷わなくなります。

この章では索引編成ファイルを中心に学びましたが、いずれの構成も「ファイルという外部データをどう表現し、どうアクセスするか」というCOBOLの基本思想は共通しています。次章では、視点を変えて「プログラム自体をどう分割し、再利用するか」を学んでいきます。

試すには

「番号1〜100のロッカーがあり、それぞれに荷物の情報を記録する」というシステムを考えたとき、索引編成(荷物の持ち主の名前で検索したい)と相対編成(ロッカー番号そのもので直接アクセスしたい)、どちらが向いているか考えてみましょう。