【COBOL学習|豆知識】索引ファイルの「ピンポイント読み込み」を極める:START文の活用術

1. 導入:なぜSTART文が重要なのか

COBOLのファイル操作において、全件を先頭から読み込むのは非効率な場面が多々あります。特に大規模な索引順ファイル(VSAMなど)では、特定のキー値から処理を開始したいというケースが頻発します。START文を使いこなすことで、プログラムの処理速度を劇的に向上させ、不要なI/Oを省くことが可能になります。これはバッチ処理の実行時間を短縮するための、ベテランにとって必須のテクニックです。

2. 基礎知識:START文とは

START文は、索引ファイルや相対ファイルにおいて、読み込みを開始するレコードの「位置」をポインタで指定するための命令です。
重要なのは、START文自体はレコードを読み込まない(メモリ上のバッファへ転送しない)という点です。START文で位置を特定した後、READ文(NEXT指定)を実行することで、指定したキー以降のデータを順番に取得できます。

3. 実装のポイント

START文では、比較演算子(=, >, >=, <, <=)を使い、柔軟な制御が可能です。 特に「NOT <」や「>=」を組み合わせることで、「指定したキーと一致する、またはそれより大きい最初のレコードから開始する」といった制御が可能になります。範囲指定処理を行う際は、START文で開始位置を決め、READ文のループ内で終了条件(キーが変わった等)を判定するのが定石です。

4. サンプルプログラム

以下は、支店コード(BRANCH-ID)を指定して、その支店のデータのみを読み込む例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. START-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT M-FILE ASSIGN TO ‘MASTER.DAT’
ORGANIZATION INDEXED
ACCESS DYNAMIC
RECORD KEY IS M-KEY.
DATA DIVISION.
FILE SECTION.
FD M-FILE.
01 M-REC.
05 M-KEY.
10 M-BRANCH-ID PIC X(04).
10 M-SEQ-NO PIC X(04).
WORKING-STORAGE SECTION.
01 WS-SEARCH-KEY PIC X(04) VALUE ‘0005’.
01 WS-EOF PIC X(01) VALUE ‘N’.

PROCEDURE DIVISION.
OPEN INPUT M-FILE.

> 検索キーを設定
MOVE WS-SEARCH-KEY TO M-BRANCH-ID.

> 指定したキー以降の最初のレコードに位置付ける
START M-FILE KEY IS NOT LESS THAN M-KEY
INVALID KEY
DISPLAY ‘対象データが見つかりません’
NOT INVALID KEY
PERFORM UNTIL WS-EOF = ‘Y’
READ M-FILE NEXT RECORD
AT END
MOVE ‘Y’ TO WS-EOF
NOT AT END
> 支店コードが変わったらループ終了
IF M-BRANCH-ID NOT = WS-SEARCH-KEY
MOVE ‘Y’ TO WS-EOF
ELSE
DISPLAY ‘読み込みデータ: ‘ M-KEY
END-IF
END-READ
END-PERFORM
END-START.

CLOSE M-FILE.
STOP RUN.

5. 応用・注意点

INVALID KEYの判定を忘れないこと:START文が失敗した(指定したキーが存在しない、または範囲外)場合に備えて、必ずINVALID KEY句を実装してください。ここを省くと、意図しないレコードを読み込んで誤処理の原因となります。
ACCESSモード:START文を使用するファイルは、必ず「ACCESS DYNAMIC」または「ACCESS SEQUENTIAL」で定義されている必要があります。ランダムアクセス専用の定義では動作しないことがあるため注意してください。
パフォーマンス:START文はインデックスを辿るため、非常に高速です。ループの中でREAD文を回す際は、終了条件を厳密に判定し、無駄なファイルアクセスが発生しないよう心がけましょう。

コメント

タイトルとURLをコピーしました