導入
索引編成ファイルの他にも、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のロッカーがあり、それぞれに荷物の情報を記録する」というシステムを考えたとき、索引編成(荷物の持ち主の名前で検索したい)と相対編成(ロッカー番号そのもので直接アクセスしたい)、どちらが向いているか考えてみましょう。