SEEK ステートメント

構文

SEEK file.variable [ , offset [ , relto] ]
{THEN statements [ ELSE statements ] | ELSE statements}

説明

SEEK ステートメントを使用すると、ファイルの現在の位置、ファイルの先頭、またはファイルの終端からのバイト数を表すオフセットに応じて、ファイル・ポインターを移動できます。

file.variable には、順次アクセスで以前に開かれたファイルを指定します。

offset は、参照位置の前後のバイト数です。負のオフセット値が指定されると、ポインターが relto で指定された位置の前に移動されます。 offset が指定されない場合、0 とみなされます。

注: Windows システムでは、ファイル内の行の終わりが、UNIX ファイルで使用される単一の LINEFEED ではなく、文字シーケンス RETURN + LINEFEED によって表示されます。offset の値によって、Windows ファイル・システム内の各行でこの余分なバイトが考慮されます。

relto の暗黙的値とその意味は、以下のとおりです。

0
ファイルの先頭
1
ファイルの現在の位置
2
ファイルの終端

relto が指定されない場合、0 とみなされます。

ファイル・ポインターが移動すると、THEN 文が実行され、ELSE 文は無視されます。 THEN ステートメントが指定されていなければ、プログラムは次のステートメントから実行を続けます。

ファイルにアクセスできなかったり、ファイルが存在しない場合は、ELSE 文が実行されます。すべての THEN 文は無視されます。

file.variableoffset、または relto が NULL 値に評価されると、SEEK ステートメントは正しく実行されずプログラムはランタイム・エラー・メッセージを出力して終了します。

注: Windows システムで、OPENDEV ステートメントを使用して、順次処理用の 1/4 インチ・カートリッジ・テープ (60 MB または 150 MB) を開いた場合、ファイル・ポインターはデータの先頭または末尾にのみ移動できます。またディスケット・ドライブの場合、ファイル・ポインターは、データの先頭にしか移動できません。

ファイルの終端を超えた部分にデータを書き込むと、ファイルにはギャップができます。 このギャップは物理的には空の領域ではなく、この部分を読み込むと ASCII CHAR 0 となります (この 0 は数値でも文字でもありません)。

順次ファイル処理について詳しくは、OPENSEQ ステートメント、READSEQ ステートメント、および WRITESEQ ステートメントを参照してください。

次の例では、RECORD4 というファイルの 1 行目を読み取りそれを出力します。 ここでの SEEK ステートメントは、ファイルの先頭から 5 バイトの位置にポインターを移動し、それ以降の内容を読み込んでからそれを出力します。

OPENSEQ 'FILE.E', 'RECORD4' TO FILE ELSE ABORT
READSEQ B FROM FILE THEN PRINT B
SEEK FILE,5, 0 THEN READSEQ A FROM FILE
THEN PRINT A ELSE ABORT

次のプログラム出力が得られます。

FIRST LINE
 LINE