導入
索引編成ファイルは「読む」だけでなく、「新しいレコードを追加する」「既存のレコードを書き換える」「レコードを削除する」といった更新操作もキー指定で行えます。この3つの命令を見ていきましょう。
説明
WRITE(新規追加)
PROCEDURE DIVISION.
OPEN I-O CUSTOMER-FILE.
MOVE 100500 TO CUST-ID.
MOVE "ITO KENJI" TO CUST-NAME.
MOVE 0 TO CUST-BALANCE.
WRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "この顧客番号はすでに存在します"
END-WRITE.
OPEN I-O CUSTOMER-FILE.… 索引編成ファイルを入出力両用で開くモード。読み込みと書き込みの両方を行いたいときに使います(順編成ファイルのOPEN INPUT/OPEN OUTPUTとは別に、索引編成ではI-Oがよく使われます)。WRITE CUSTOMER-RECORD… 新しいレコードを追加。このときINVALID KEYは「同じキーがすでに存在する」ことを意味します(索引編成ファイルではキーの重複は許されません)。
REWRITE(既存レコードの更新)
MOVE 100234 TO CUST-ID.
READ CUSTOMER-FILE
INVALID KEY
DISPLAY "更新対象が見つかりません"
NOT INVALID KEY
ADD 5000 TO CUST-BALANCE
REWRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "更新に失敗しました"
END-REWRITE
END-READ.
REWRITE CUSTOMER-RECORD… すでに読み込んだレコードの内容を書き換える命令。手順として「まずREADで対象を読み込み、値を変更し、REWRITEで書き戻す」という流れが定番です。
DELETE(削除)
MOVE 100999 TO CUST-ID.
DELETE CUSTOMER-FILE
INVALID KEY
DISPLAY "削除対象が見つかりません"
NOT INVALID KEY
DISPLAY "削除しました"
END-DELETE.
DELETE CUSTOMER-FILE…CUST-IDにセットしたキーのレコードを削除する。
3つの命令をまとめると、次のようになります。
| 命令 | 役割 | INVALID KEY の意味 |
|---|---|---|
WRITE | 新規レコードの追加 | 同じキーがすでに存在する |
REWRITE | 既存レコードの書き換え | 対象のキーが見つからない(READ済みでない) |
DELETE | レコードの削除 | 対象のキーが見つからない |
このパターンは、口座残高の更新(READして値を確認 → 計算 → REWRITEで書き戻す)のような、実務のバッチ処理・オンライン処理の両方で頻繁に使われます。
試すには
「新しい顧客を1件追加する(WRITE)」→「その顧客の残高に1000円足す(READしてREWRITE)」→「別の顧客を1件削除する(DELETE)」という3つの操作を順番に行うプログラムを、頭の中で組み立ててみましょう。