ファイル内での位置の設定

ジョブによってファイルがオープンされた後、システムはそのジョブの ファイル内での位置を維持します。ファイル位置は、ファイルの処理で使用されます。

たとえば、プログラムが次の順次レコードを要求する読み取り操作を 実行する場合には、システムはファイル位置を使用して、プログラムに返す レコードを決めます。その後で、システムは、読み込まれたばかりのレコード にファイル位置を移し、次の順次レコードを要求する別の読み取り操作が実行 されたときに正しいレコードが返されるようにします。システムは、各ジョブごとにすべてのファイル位置の追跡を保持しています。さらに、各ジョブは同じファイルの中に複数の位置を持つことができます。

ファイル位置は、データベース・ファイルによる一時変更 (OVRDBF) コマンド の POSITION パラメーターで指定されている位置に最初に設定されます。 OVRDBF コマンドを使用しない場合、または POSITION パラメーターの省略時 の値を使用する場合には、ファイル位置はメンバーのアクセス・パスの最初の レコードのすぐ前に設定されます。

プログラムは、該当の高水準言語プログラムのファイル位置決め操作 (例えば、RPG 言語の SETLL または COBOL 言語の START) を使用して現在のファイル位置を変更できます。 また、プログラムは、「データベース・ファイルの位置決め (POSDBF)」コマンドを 使用してファイル位置を変更することもできます。
注: OVRDBF コマンドによるファイル の位置決めは、次にファイルがオープンするまで起きません。ファイルは制御言語 (CL) プログラム内で 1 回だけしかオープンできないので、このコマンドを 1 つの CL プログラムで使用して、「ファイルの受け取り (RCVF)」コマンドを介して読み取られるものに影響を与えることはできません。

ファイルの終わりでは、最後の読み取りの後、プログラムがファイルを順方向に 読み取るか逆方向に読み取るかに応じて、ファイル・メンバーは *START ファイル位置 または *END ファイル位置に位置付けられます。以下の図は、*START ファイル位置および *END ファイル位置を示しています。 先頭に *START があり、その後に 3 つのレコード、 さらに末尾に *END があります。

ファイルの例

ファイル位置は、読み取り操作、データ強制終了操作、高水準言語の位置決め 操作、またはファイル位置を変更する特定の CL コマンドによってのみ変更できます。追加、変更、または削除の操作ではファイル位置は変更されません。読み取り操作の後で、ファイルは新しいレコードに位置付けられます。その後、このレコードはプログラムに戻されます。読み取り操作が完了した後、ファイルはプログラムに戻されたばかりのレコードに位置 付けされます。メンバーが入力用にオープンされている場合には、ファイルはデータ強制終了 操作によってファイル内の最後のレコードの後 (*END) に位置付けられ、ファイルの終わりメッセージがプログラムに送られます。

順次読み取り操作では、アクセス・パス上の次のレコードまたは前のレコードを 見つけるために現在のファイル位置が使用されます。キーによる読み取り操作 または相対レコード番号による読み取り操作では、ファイル位置は使用されません。オープン時に POSITION(*NONE) を指定した場合、開始ファイル 位置は設定されません。この場合、順次読み取りを行うには、ユーザー はプログラムの中でファイル位置を設定しなければなりません。

OVRDBF コマンドでファイルに対して ファイルの終わり遅延が指定されている場合には、プログラムが最後のレコードを 読み取った時点でもファイルは *START または *END に位置付けられず、読み取られた最後のレコードに位置付けられたままになります。ファイルの終わり遅延処理が指定されたファイルは、データ強制終了 (FEOD) が起こるか、あるいはジョブの強制終了が起こったときにだけ *START または *END に位置 付けられます。

データベース・ファイルのオープン (OPNDBF) コマンド または Query ファイルのオープン (OPNQRYF) コマンドを使用してオープンされる ファイルの場合には、ファイル中の現在のファイル位置を設定または変更するのに POSDBF コマンドも使用できます。