キー欄値指定子は,索引編成ファイル中の探査したい記録のキー欄を識別します。キー欄値はキー欄の内容に等しい値です。キー欄は索引編成ファイル中の記録位置を決定するので,これを使って記録を探査することができます。
キー欄は,番号,向き,長さ,バイト・オフセット,および欄の型といった属性を持ちます。キー欄の属性はファイルの作成時に指定されます。索引編成ファイル中の記録は,キー欄に関しては同じ属性を持っています。
キー欄値指定子は次の形式を取ります。
KEY[con] = val
con
val をキー欄値とどのように比較するかを指定する選択条件キーワード。キーワードは以下のいずれかです。
昇順キー・ファイルの場合 | |
---|---|
キーワード | 意味 |
EQ | キー欄値は val と等しくなくてはなりません。KEYEQ は,KEY を省略可能な要素の con なしに指定するのと同じです。 |
GE | キー欄値は val 以上でなくてはなりません。 |
GT | キー欄値は val よりも大きくなくてはなりません。 |
NXT | キー欄値は,val 以上のキーの次の値でなくてはなりません。 |
NXTNE | キー欄値は,val よりも大きいキーの次の値でなくてはなりません。 |
降順キー・ファイルの場合 | |
キーワード | 意味 |
EQ | キー欄値は val と等しくなくてはなりません。KEYEQ は,KEY を省略可能な要素の con なしに指定するのと同じです。 |
LE | キー欄値は val 以下でなくてはなりません。 |
LT | キー欄値は val よりも小さくなくてはなりません。 |
NXT | キー欄値は,val 以下のキーの次の値でなくてはなりません。 |
NXTNE | キー欄値は,val よりも小さいキーの次の値でなくてはなりません。 |
val
整数または文字式です。式は,ファイルに対して定義されたキーの型に一致していなくてはなりません。整数キーの場合には整数式を渡す必要があります。実数または複素数のデータを含んでいてはなりません。文字列キーの場合,文字式か,文字データを含んでいる BYTE 配列を渡すことができます。
指定子 KEY,KEYEQ,KEYNXT,および KEYNXTNE は,昇順キー・ファイルと降順キー・ファイルのどちらでも使用できます。ただし,KEYNXT と KEYNXTNE は,ファイル中のキーの向きによって異なる意味に解釈されます。
昇順キー・ファイル | 降順キー・ファイル | |
---|---|---|
指定子 | 次の指定子と等価 | |
KEYNXT | KEYGE | KEYLE |
KEYNXTNE | KEYGT | KEYLT |
指定子 KEYGE と KEYGT は昇順キー・ファイルでしか使用できず,指定子 KEYLE と KEYLT は降順キー・ファイルでしか使用できません。これらのキー指定子を他の用途に使用すると,実行時エラーが発生します。
プログラムが昇順キー・ファイルと降順キー・ファイルのどちらをも利用できなくてはならない場合,KEYNXT と KEYNXTNE を使用するようにしてください。
キー欄整数値を選択するプロセスは,符号付き整数そのものを使って値を比較します。
キー欄文字値を選択するプロセスは,ASCII 大小順序を使って値を比較します1。val の相対的な長さ,キー欄値,および指定された選択条件が,行われる選択の種類を決定します。選択には以下に示すように,正確選択,一般選択,および近似一般選択があります。
正確選択は,val 中の式の長さが,現在探査されている記録のキー欄中の式の長さに等しく,con キーワードが一意の選択条件を指定している場合に行われます。
このプロセスは,val 中のすべての文字を,キー欄中の同じ数の文字と,左から右の順序で比較していきます。余ったキー欄文字は無視されます。
たとえば,記録のキー欄の長さが 10 文字で,次の文が入力されたとします。
READ (3, KEYEQ = 'ABCD')
この例では,プロセスはキー欄値 'ABCDEFGHIJ' を持つ記録を選択することができます。
一般選択の場合と同様に,プロセスは値を比較する際に,キー欄中の左側の文字だけを使用します。一般選択条件を満たす最初のキー欄だけが選択されます。
たとえば,記録のキー欄の長さが 5 文字で,次の文が入力されたとします。
READ (3, KEYGT = 'ABCD')
この例では,プロセスは (キー欄値 'ABCDA' を選択せず) キー欄値 'ABCEx' を選択することができます。
val がキー欄値よりも長い場合,選択は行われず実行時エラーが発生します。
1 これ以外の大小順序もあります。詳細については,『Guide to OpenVMS File Applications』を参照してください。