SEEK file.variable [ , offset [ , relto] ]
{THEN statements [ ELSE statements ] | ELSE statements}
SEEK ステートメントを使用すると、ファイルの現在の位置、ファイルの先頭、またはファイルの終端からのバイト数を表すオフセットに応じて、ファイル・ポインターを移動できます。
file.variable には、順次アクセスで以前に開かれたファイルを指定します。
offset は、参照位置の前後のバイト数です。負のオフセット値が指定されると、ポインターが relto で指定された位置の前に移動されます。 offset が指定されない場合、0 とみなされます。
relto の暗黙的値とその意味は、以下のとおりです。
relto が指定されない場合、0 とみなされます。
ファイル・ポインターが移動すると、THEN 文が実行され、ELSE 文は無視されます。 THEN ステートメントが指定されていなければ、プログラムは次のステートメントから実行を続けます。
ファイルにアクセスできなかったり、ファイルが存在しない場合は、ELSE 文が実行されます。すべての THEN 文は無視されます。
file.variable、offset、または relto が NULL 値に評価されると、SEEK ステートメントは正しく実行されずプログラムはランタイム・エラー・メッセージを出力して終了します。
ファイルの終端を超えた部分にデータを書き込むと、ファイルにはギャップができます。 このギャップは物理的には空の領域ではなく、この部分を読み込むと 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