DECLARE ステートメントの ENVIRONMENT 属性を使用すれば、特定のデータ・セット特性をプログラム内に指定できます。これらの特性は、PL/I 言語の一部ではありません。そのため、ファイル宣言でこれらの特性を使用すると、そのプログラムは他の PL/I インプリメンテーションに移植できなくなる可能性があります。
プログラムにファイルの環境オプションを指定した例を以下に示します。
declare Invoices file environment(regional(1), recsize(64));
ENVIRONMENT 属性で指定できるオプションについては、以降のセクションで示します。
BKWD オプションは、DDM データ・セットに関連付けられた SEQUENTIAL INPUT ファイルまたは SEQUENTIAL UPDATE ファイルの逆方向処理を指定します。
|
順次読み取り (すなわち、KEY オプションなしの読み取り) では、直前の順序にあるレコ ードが検索されます。 索引付きデータ・セットの場合は、直前のレコードは、その次の低位キーをもつレコードのことです。
BKWD オプションを指定したファイルをオープンすると、データ・セットは最終レコードに位置決めされます。そのデータ・セットの先頭まで来ると、通常どおりに ENDFILE が生じます。BKWD オプションは、GENKEY オプションと一緒には指定しないでください。
BKWD オプションを指定して宣言されたファイルには、WRITE ステートメントは使用できません。
CONSECUTIVE オプションは、連続データ・セット編成のファイルを定義します。CONSECUTIVE 編成のデータ・セットでは、レコードは物理的順序で配置されます。あるレコードが与えられた場合、そのレコードの次のレコード位置は、そのレコードが物理的にデータ・セットのどこにあるかによって決まります。
|
CONSECUTIVE オプションを使用すれば、ストリーム指向のデータ伝送またはレコード単位のデータ伝送を使って ネイティブ・データ・セットにアクセスできます。 このオプションは、SEQUENTIAL 属性を使って 宣言され、ワークステーション VSAM データ・セットに関連付けられた入力ファイルに対しても使用できます。 この場合、ワークステーション VSAM キー順データ・セット内のレコードは、キー順で示されます。
CONSECUTIVE は、デフォルトのデータ・セット編成です。
CTLASA オプションは、レコードの先頭文字を米国標準規格 (ANS) の印刷制御文字として解釈するように指定します。このオプションは、連続データ・セットに関連付けられた RECORD OUTPUT ファイルにのみ適用されます。
|
ANS 印刷制御文字 (表 14 にリストを示す) は、関連するレコードが印刷される前に、指定の処置を実行するための文字です。
CTLASA オプションの使用方法の詳細は、プリンター向けファイルを参照してください。
IBM Proprinter 制御文字は、ANS プリンター制御文字で必要な単一バイトよりも多く、最大で 3 バイトが必要です。 ただし、論理レコード長の指定 (RECSIZE 環境オプションを参照) は調整しないでください。と言うのも、CTLASA が指定されると、PL/I は論理レコード長に自動的に 3 を追加するからです。
レコードの先頭文字が IBM Proprinter 制御文字に変換されずに残るように、CTLASA の効果を変更することができます。ASAにある ASA 環境オプションを参照してください。
プリンター向け出力操作に対して SCALARVARYING 環境オプションを指定しないでください。指定してしまうと、PL/I はレコードの先頭データ・バイトの解釈方法を認識できなくなります。
GENKEY (総称キー) オプションは、ワークステーション VSAM 索引付きデータ・セットにのみ適用されます。 このオプションを使用すると、データ・セット内に記録されているキーを分類したり、SEQUENTIAL KEYED INPUT ファイルまたは SEQUENTIAL KEYED UPDATE ファイルを使ってキー・クラス別にレコードにアクセスすることができます。
|
総称キーはキーのクラスを識別する文字ストリングです。このストリングで始まるすべてのキーは そのクラスのメンバーです。例えば、記録済みキー「ABCD」、 「ABCE」 および「ABDF」はすべて、総称キー「A」および「AB」 で識別されるクラスのメンバーであり、最初の 2 つのキー は、クラス「ABC」のメンバーでもあります。そして 3 つの記録済みキーはそれぞれ「ABCD」、 「ABCE」、および「ABDF」の各クラスの固有のメンバーと考え ることができます。
GENKEY オプションを使用すると、特定クラスのキーをもつ最初のレコードから、VSAM データ・セット を順次に読み取ることも更新することもできます。また、INDEXED データ・セットの場合は、このオプションを使用すると、特定のクラスのキーをもつ最初の非ダミー・レコードを順次に 読み取ることも更新することもできます。READ ステートメントの KEY オプションに総称キーを 入れることにより、クラスを識別することができます。KEY オプションを指定せずに、READ ステートメントで後続のレコードを読み とることができます。キー・クラスの終わりに到達したときに、その旨の指摘は行われません。
KEY オプションを指定した READ ステートメントを使用することによって、特定クラスのキーをもつ最初のレコードを検索することが できますが、KEYTO オプションは KEY オプションと同じステートメントで使用すること ができないため、レコードに組み込みキーがない限り、実際のキーを得ることはできません。
次の例では、3 バイトを超えているキーの長さが想定されます。
dcl ind file record sequential keyed
update env (indexed genkey);
.
.
.
read file (ind) into (infield)
key ('ABC');
.
.
.
next: read file (ind) into (infield);
.
.
.
go to next;
最初の READ ステートメントによって、'ABC' で始まるキーを持つデータ・セット内の最初の非ダミー・レコードが INFIELD に読み込まれます。2 番目の READ ステートメントが実行されるたびに、次に高位のキーを持つ非ダミー・レコードが取り出されます。2 番目の READ ステートメントを繰り返し実行すると、次々により高位のキー ・クラスからレコードが読み取られることになりますが、それは、キー・クラスの終わりに到達してもそのことが指摘されないからです。特定クラスのキーを超えて読み取りを続けたくない場合は、各自の責任で各キーを検査してください。最初の READ ステートメントをもう一度実行すると、そのファイルはキー・クラス 'ABC' の最初のレコードの位置に再配置されます。
指定クラス内のキーをもつレコードがデータ・セットにない場合、または指定クラスのキーをもつレコードがすべてダミー・レコード の場合は、KEY 条件が発生します。そのあと、データ・セットは上位のキーをもつ次のレコードに、あるいはファイルの終わりに位置付けられます。
GENKEY オプションの有無によって、KEYLENGTH サブパラメーターで 指定されているキー長より短いソース・キーを提供する READ ステートメントの実行が影響を受けます。KEYLENGTH サブパラメーターは、索引付きデータ・セットを定義する DD ステートメント内にあります。GENKEY オプションを指定すると、それによってソース・キーが総称キーと解釈され、キーがソース・キーで始まるデータ・セット内の最初の非ダミー・レコードに、そのデータ・セットが位置付けられることになります。
GENKEY オプションを指定しないと、指定したキー長になるよう、READ ステートメントの短いソース・キーの 右側にブランクが埋め込まれ、データ・セットは、この埋め込まれたキーを 持ったレコード (このようなレコードが存在する場合) に位置付けられます。WRITE ステートメントの場合は、短いソース・キーには常に ブランクで埋め込まれます。
GENKEY オプションを使用しても、キー長が指定キー長以上であるソース・キーを提供 してもその結果は変わりません。ソース・キーは、必要に応じて右側が切り捨てられますが、このソース・キーによって特定レコード (キーがそのクラスの唯一のメンバーと考えられるレコード) が識別されます。
リスト指示 I/O やデータ指示 I/O の GET および PUT ステートメントで DBCS 変数または DBCS 定数を使用する 場合は、GRAPHIC オプションを指定する必要があります。 GRAPHIC オプションは、編集指示 I/O にも指定できます。
|
入力データや出力データにグラフィックスが含まれているのに GRAPHIC オプションが指定されていない場合、PL/I は、 リスト指示 I/O およびデータ指示 I/O の ERROR 条件を発生させます。
グラフィック・データ型および編集指示 I/O の G フォーマット項目の詳細については、 「PL/I 言語解説書」を参照してください。
KEYLENGTH オプションは、KEYED ファイルの記録済みキーの長さ n を指定します。KEYLENGTH は、INDEXED ファイルについてのみ指定できます (このセクションの後の方にある ORGANIZATION を参照)。
|
ファイル宣言に KEYLENGTH オプションが含まれていて、その関連データ・セットがすでに存在する場合は、その値が検査に使用されます。このオプションで指定したキーの長さがデータ・セットに定義された値と矛盾する場合は、UNDEFINEDFILE 条件が発生します。
KEYLOC オプションは、KEYED ファイルのレコードにおける埋め込みキーの開始位置 n を指定します。KEYLOC は、INDEXED ファイルについてのみ指定できます (このセクションの後の方にある ORGANIZATION を参照)。
|
位置 n は、次の範囲内でなければなりません。
1 <= n <= recordsize - keylength + 1
つまり、キーがレコード長を超えることはできないので、レコード内にキーが完全に収まるようにする必要があります。
したがって、SCALARVARYING オプションを指定する場合は、埋め込みキーがレコードの先頭の 2 バイトと重複しないようにしてください。それには、KEYLOC に指定する値を 2 よりも大きい値にする必要があります。
索引付きデータ・セットの作成時に KEYLOC を指定しない場合、キーはレコードの先頭バイトから始まるとみなされます。
ファイル宣言に KEYLOC オプションが含まれていて、その関連データ・セットがすでに存在する場合は、その値が検査に使用されます。このオプションで指定したキー位置がデータ・セットに定義された値と矛盾する場合は、UNDEFINEDFILE 条件が発生します。
ORGANIZATION は、PL/I ファイルに関連付けられているデータ・セットの編成を指定します。
.-CONSECUTIVE-. >>-ORGANIZATION--(-+-INDEXED-----+-)--------------------------->< '-RELATIVE----'
RECSIZE オプションは、データ・セット内のレコードの長さ n を指定します。
|
領域データ・セットおよび固定長データ・セットの場合は、RECSIZE は データ・セットの各レコードの長さを指定します。その他のデータ・セット・タイプの場合は、RECSIZE はレコードがとれる最大の長さを指定します。
ファイル宣言に RECSIZE オプションが含まれていて、そのファイルが、すでに存在するワークステーション VSAM データ・セットに関連付けられている場合は、その値が検査に使用されます。このオプションで指定したレコード長がデータ・セットに定義された値と矛盾する場合は、UNDEFINEDFILE 条件が発生します。
テキスト・エディターなどの非 PL/I プログラムで作成されたデータ・セットにアクセスするときは、RECSIZE オプションを指定してください。
REGIONAL(1) オプションは、領域編成のファイルを定義します。
|
領域編成のデータ・セットには、記録済みキーを持たない固定長レコードが入っています。データ・セット内の各領域にはただ 1 つのレコードが入っており、したがって、各領域番号はデータ・セット内の相対レコードに 対応しています (すなわち、領域番号はデータ・セットの始めから 0 で始まります)。
領域データ・セットの使用方法の詳細は、領域データ・セットの定義と使用を参照してください。
SCALARVARYING オプションは、VARYING ストリングの入出力で使用されます。
|
VARYING ストリング用にストレージが割り振られると、コンパイラーは、ストリングの現行の長さを指定する 2 バイトの接頭部を組み込みます。エレメント可変長ストリングの場合は、ファイルに SCALARVARYING を指定したときのみ、この接頭部は出力時に組み込まれるか、入力時に認識されます。
位置指定モード・ステートメント (LOCATE および READ SET) を使って、エレメント VARYING ストリングを持つデータ・セットを作成し読み取る場合は、SCALARVARYING を指定して、長さ接頭部の存在を認識させる必要があります。これは、バッファーの位置を指定するポインターは、常に長さ接頭部の開始位置を指すと想定されるからです。
このオプションを指定して、エレメント VARYING ストリングが送信される場合は、長さ接頭部を組み込むためにレコード長に 2 バイトを与える必要があります。
SCALARVARYING を使用して作成されるデータ・セットは、SCALARVARYING を指定しているファイルだけがアクセスするようにします。
同じファイルに対して SCALARVARYING と CTLASA を指定しないでください。これらを一緒に指定すると、先頭データ・バイトがあいまいになってしまいます。
VSAM オプションは、OS PL/I との互換性を持たせるために提供されています。
|