ENVIRONMENT 属性では、さまざまなオプションを使うことができます。 以下に示すように、おのおののタイプのファイルごとにさまざまな属性および 環境オプションがあります。
PL/I のファイル宣言ファイルの ENVIRONMENT 属性を使用して、 ファイルに関連付けられているデータ・セットの 物理編成についての情報やその他の関連情報を指定することができます。 この情報のフォーマットは、括弧で囲んだオプション・リストでなければなりません。
>>-ENVIRONMENT--(--option-list--)------------------------------><
省略形: ENV
ブランクまたはコンマで区切ったオプションを、任意の順序で指定することができます。
次の例は、完全なファイル宣言のコンテキスト中にある ENVIRONMENT 属性の 構文を説明しています。(指定されているオプションは VSAM 用 のもので、VSAM データ・セットの定義と使用に説明があります。)
DCL FILENAME FILE RECORD SEQUENTIAL
INPUT ENV(VSAM GENKEY);
表 13 は、ENVIRONMENT オプションとファイル属性を 要約したものです。 使用に関する特定の制限については、表内の注および注解を参照してください。 複数のデータ・セット編成に適用できるオプションは、本章の後半で説明します。 また、各オプションについては、オプションが適用される各データ・セット編成とともに 後続の章で説明します。
|
データ・セット・タイプ |
S t r e a m |
レコード |
凡例:
|
||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
ファイル のタイプ |
C o n s e c u t i v e |
順次 |
直接 |
||||||||
|
連続 |
T e l e p r o c e s s i n g |
I n d e x e d |
V S A M |
R e g i o n a l |
I n d e x e d |
V S A M |
|||||
|
B u f f e r e d |
U n b u f f e r e d |
R e g i o n a l |
|||||||||
|
ファイル属性1 |
暗黙指定属性 |
||||||||||
|
ファイル |
I |
I |
I |
I |
I |
I |
I |
I |
I |
I |
|
|
入力1 |
D |
D |
D |
D |
D |
D |
D |
D |
D |
D |
ファイル |
|
出力 |
O |
O |
O |
O |
O |
O |
O |
O |
O |
O |
ファイル |
|
環境 |
I |
I |
I |
S |
S |
S |
S |
S |
S |
S |
ファイル |
|
ストリーム |
D |
- |
- |
- |
- |
- |
- |
- |
- |
- |
ファイル |
|
印刷1 |
O |
- |
- |
- |
- |
- |
- |
- |
- |
- |
ファイル・ストリーム出力 |
|
レコード |
- |
I |
I |
I |
I |
I |
I |
I |
I |
I |
ファイル |
|
更新 |
- |
O |
O |
O |
- |
O |
O |
O |
O |
O |
ファイル・レコード |
|
順次 |
- |
D |
D |
D |
- |
D |
D |
- |
- |
D |
ファイル・レコード |
|
バッファー付き |
- |
D |
- |
- |
I |
D |
D |
- |
- |
S |
ファイル・レコード |
|
キー付2 |
- |
- |
- |
O |
I |
O |
O |
I |
I |
O |
ファイル・レコード |
|
直接 |
- |
- |
- |
- |
- |
- |
S |
S |
S |
S |
キー付きファイル・レコード |
|
|
|
ENVIRONMENT オプション |
コメント |
||||||||||
データ・セットの編成を指定するオプションは、次のとおりです。
>>-+-CONSECUTIVE-------+--------------------------------------->< +-INDEXED-----------+ +-REGIONAL--(--1--)-+ '-VSAM--------------'
各オプションについては、適用されるデータ・セット編成の 項目で解説されています。
ブロック・サイズやレコード長など、整数引数が必要な ENVIRONMENT オプシ ョンは、定数や変数と併用することができます。 変数には、添え字や修飾を付けたりすることはできません。 変数には、属性 FIXED BINARY(31,0) および STATIC が必要です。
ENVIRONMENT オプションと、それと同等の DCB パラメーターは、以下のとおりです。
サポートされるレコード・フォーマットは、データ・セット編成により異なります。
>>-+-F---+----------------------------------------------------->< +-FS--+ +-FB--+ +-FBS-+ +-V---+ +-VS--+ +-VB--+ +-VBS-+ '-U---'
レコードのフォーマットは、次のいずれかです。
|
固定長 |
F FB FS FBS |
非ブロック化 ブロック化 非ブロック化、標準 ブロック化、標準 |
|
可変長 |
V VB VS VBS |
非ブロック化 ブロック化 スパン ブロック化、スパン |
|
不定長 |
U |
(ブロック化できない) |
U フォーマット・レコードが可変長ストリングに読み込まれる 場合は、PL/I はストリングの長さを検索されたデータのブロック長に設定します。
上記のレコード・フォーマット・オプションは、VSAM データ・セットには適用されません。VSAM データ・セットに関連付けられている ファイルにレコード・フォーマット・オプションを指定すると、そのオプションは無視されます。
VS フォーマットのレコードは、連続編成のデータ・セットにのみ指定できます。
ストリーム指向データ伝送のレコード・フォーマット・オプションについては、ストリーム指向データ伝送の使用で説明します。
RECSIZE オプションは、レコード長を指定します。
>>-RECSIZE--(--record-length--)--------------------------------><
VSAM データ・セットに関連付けられている ファイルの場合、record-length (レコード長) は、次の値の合計です。
VSAM データ・セットの場合、データ・セットが定義されるときに、 レコードの最大長と平均長がアクセス方式サービス・プログラム・ユーティリティーに指定されます。 検査の目的で RECSIZE オプションをファイル宣言に組み込む場合は、 レコードの最大長を指定する必要があります。 指定した RECSIZE がデータ・セットに定義されている値と 矛盾する場合は、UNDEFINEDFILE 条件が発生します。
record-length (レコード長) は、 整数または属性 FIXED BINARY(31,0) STATIC を持つ変数を指定することができます。
UPDATE ファイルを持つ V フォーマット、ならびに VS および VBS フォーマット: 32756
入力ファイルおよび出力ファイルを持つ VS および VBS フォーマット: 16777215
ASCII データ・セット : 9999
VSAM データ・セット: 32761
注: 32,756 バイト以上の VS フォーマット および VBS フォーマット・レコードの場合は、ENVIRONMENT の RECSIZE オプションの長さを指定し、DD ステートメントの DCB サブパラメーターに LRECL=X を 指定しなければなりません。RECSIZE が INPUT または OUTPUT の最大長を超える場合は、レコード条件が発生するか、または レコードが切り捨てられます。
上記のいずれかで値を入手できない場合は、 デフォルト・アクションが行われます (レコード・フォーマット、BLKSIZE、および RECSIZE のデフォルト参照)。
BLKSIZE オプションは、データ・セット上の最大ブロック・サイズを指定します。
>>-BLKSIZE--(--block-size--)-----------------------------------><
block-size (ブロック・サイズ) は、次の値の合計です。
可変長レコードの場合、各レコードの長さまたは各レコード・セグメントの長さ には、レコードやレコード・セグメント用の 4 制御バイトが含まれています。
上記のリストは、レコード・オプションおよびレコード・セグメント・オプション、 すなわち固定長ブロック化、可変長ブロック化、非ブロック化、またはスパン、非スパンの 考えられるすべての組み合わせをまとめたものです。スパン・レコードのブロック・サイズを指定する場合、各レコードおよび各レコード・セグメントにはレコード長のための 4 制御バイトが必要であり、これらの数量は各ブロックに必要な 4 制御バイトに加算されるものであることに注意してください。
block-size (ブロック・サイズ) は、整数または 属性 FIXED BINARY(31,0) STATIC を持つ変数として指定することができます。
次のように、ブロック・サイズとレコード長の関係は、レコードのフォーマットによって 異なります。
注:
VSAM 以外のデータ・セットにレコード・フォーマット、 ブロック・サイズ、またはレコード長を指定しない場合は、 次のようなデフォルト・アクションがとられます。
ブロック・サイズもレコード長も指定されていない場合は、UNDEFINEDFILE 条件 が発生します。ただし、ダミー・データ・ セットと関連付けられているファイルの場合は除きます。 その場合、BLKSIZE は 121 (F フォーマット・レコードや U フォーマット・レコード の場合)、または 129 (V フォーマット・レコードの場合) に設定されます。 フォアグラウンド端末に関連付けられているファイルの場合 は、RECSIZE は 120 に設定されます。
z/OS 上でデータ機能プロダクト (DFP) のシステム決定ブロック・サイズ機能を使用 している場合は、割り当てられている装置タイプに 最適なブロック・サイズが DFP により算出されます。 DD 割り当てまたは ENVIRONMENT ステートメント内で BLKSIZE(0) を指定する 場合は、レコード長、レコード・フォーマット、および装置タイプを使って BLKSIZE が DFP により算出されます。
GENKEY (総称キー) オプションは、INDEXED キー順データ・セット および VSAM キー順データ・セットにのみ適用されます。 このオプションを使用すると、 データ・セット内に記録されているキーを分類したり、 キー・クラスに従ってレコードにアクセスするために SEQUENTIAL KEYED INPUT ファイル または SEQUENTIAL KEYED UPDATE ファイルを使用することができます。
>>-GENKEY------------------------------------------------------><
総称キーはキーのクラスを識別する文字ストリングです。このストリングで始まる すべてのキーはそのクラスのメンバーです。例えば、記録済みキー「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 (GENKEY);
.
.
.
READ FILE(IND) INTO(INFIELD)
KEY ('ABC');
.
.
.
NEXT: READ FILE (IND) INTO (INFIELD);
.
.
.
GO TO NEXT;
最初の READ ステートメントによって、「ABC」で始まるキー を持ったデータ・セット内の最初の非ダミー・レコードが、INFIELD に 読み込まれることになります。 第二の READ ステートメントが実行されるごとに、 次に高位のキーを持つ非ダミー・レコードが取り出されます。2 番目の READ ステートメントを繰り返し実行すると、次々により高位のキー ・クラスからレコードが読み取られることになりますが、 それは、キー・クラスの終わりに到達してもそのことが指摘されないからです。 特定クラスのキーを超えて読み取りを続けたくない場合は、各自の責任で各キーを検査してください。 最初の READ ステートメントをもう一度実行すると、 そのファイルはキー・クラス「ABC」の最初のレコードの位置に再配置されます。
指定クラス内のキーを持つレコードがデータ・セットにない場合、 または指定クラスのキーを持つレコードがすべてダミー・レコード の場合は、KEY 条件が発生します。 そのあと、データ・セットは上位のキーを持つ次のレコードに、 あるいはファイルの終わりに位置付けられます。
GENKEY オプションの有無によって、KEYLEN サブパラメーターで 指定されているキー長より短いソース・キーを 提供する READ ステートメントの実行が影響を受けます。KEYLEN サブパラメーターは、索引付きデータ・セットを 定義する DD ステートメント内にあります。GENKEY オプションを指定すると、それによってソース・キーが総称キーと解釈され、 キーがソース・キーで始まるデータ・セット内の最初の非ダミー・レコードに、 そのデータ・セットが位置付けられることになります。GENKEY オプションを指定しないと、 指定したキー長になるよう、READ ステートメントの短いソース・キーの 右側にブランクが埋め込まれ、データ・セットは、この埋め込まれたキーを 持ったレコード (このようなレコードが存在する場合) に位置付けられます。WRITE ステートメントの場合は、短いソース・キーには常に ブランクで埋め込まれます。
GENKEY オプションを使用しても、キー長が指定キー長以上であるソース・キーを提供 してもその結果に影響はありません。 必要に応じて右側が切り捨てられるソース・キーは、 特定のレコード (キーがそのクラスの唯一の メンバーだと考えられるレコード) を識別します。
SCALARVARYING オプションは 可変長ストリングの入出力について使用します。 このオプションではどのフォーマットのレコードで 使用することもできます。
>>-SCALARVARYING-----------------------------------------------><
ストレージを可変長ストリング用に割り当てるとき、コンパイラーは、 ストリングの現行長を指定するための 2 バイト接頭部を組み込みます。 エレメント可変長ストリングの場合は、そのファイルに SCALARVARYING が指定されている 場合にだけ、この接頭部が出力時に組み込まれるか、入力時に認識されます。
位置指定モード・ステートメント (LOCATE および READ SET) を使って、 エレメント可変長ストリングを持つデータ・セットを作成し 読み取る場合は、SCALARVARYING を指定して長さ接頭部の存在を認識させる必要があります。 これは、バッファーの位置を指定するポインターは、常に長さ接頭部の開始位置を 指すと想定されるからです。
SCALARVARYING を指定して、エレメント可変長ストリングが送信される場合は、 長さ接頭部を組み込むためにレコード長に 2 バイトを与える必要があります。
SCALARVARYING を使用して作成されるデータ・セットは、 SCALARVARYING を指定しているファイルだけがアクセスするようにします。
同じファイルに SCALARVARYING と CTLASA/CTL360 を指定すること はできません。それを行うと、最初のデータ・バイトがあいまいになるからです。
KEYED ファイルの記録済みキーの長さを指定するには、KEYLENGTH オプション を使用します。この場合、n は長さです。INDEXED ファイルにも KEYLENGTH オプションを指定することができます。
>>-KEYLENGTH--(--n--)------------------------------------------><
検査の目的で VSAM ファイルの宣言に KEYLENGTH オプションを指定する場合、 このオプションに指定したキー長がデータ・セットに定義されている値と矛盾 すれば、UNDEFINEDFILE 条件が発生します。
ORGANIZATION は、PL/I ファイルに関連付けられているデータ・セットの編成を指定します。
.-CONSECUTIVE-. >>-ORGANIZATION--(--+-INDEXED-----+--)------------------------->< '-RELATIVE----'
RECORD 属性を持ったデータ・セットは、データがプログラム変数に入っているとおりに 補助記憶域との間で送受信されるレコード単位データ伝送によって 処理されます。データ変換は行われません。 データ・セット内のレコードは、プログラム内の各変数に対応しています。
表 14 に、PL/I レコード入出力で使用できるさまざまな データ・セット・タイプで使用可能な機能を示します。
|
|
VSAM KSDS |
VSAM ESDS |
VSAM RRDS |
INDEXED |
CONSECUTIVE |
REGIONAL (1) |
|---|---|---|---|---|---|---|
|
SEQUENCE |
キー順 |
入力順 |
番号付き |
キー順 |
入力順 |
領域別 |
|
装置 |
DASD |
DASD |
DASD |
DASD |
DASD、 カードなど |
DASD |
|
123 |
123 |
123 |
12 |
2 3 テープのみ |
12 |
|
代替 索引 アクセス (上と同様) |
123 |
123 |
いいえ |
いいえ |
いいえ |
いいえ |
|
拡張方法 |
新規 キーで |
終了時 に |
空の スロット の中 |
新規 キーで |
終了時 に |
空の スロット の中 |
|
はい、1 |
いいえ |
はい、1 |
はい、2 |
いいえ |
はい、1 |
以下の各章は、各種データ・セットでのレコード入出力データ・セットの 用法を説明しています。
z/OS UNIX で使用できるようにするために、 設定およびエクスポートを行える環境変数がいくつかあります。
すべてのユーザーがアクセスできるように環境変数をシステム全体用に設定するには、 サブセクションで推奨されている行をファイル /etc/profile に追加します。 ある特定ユーザーだけに環境変数を設定するには、 該当するユーザーのホーム・ディレクトリーにあるファイル .profile に その環境変数を追加します。 変数は、次にユーザーがログオンしたときに設定されます。
次の例に、環境変数の設定方法を示します。
LANG=ja_JP NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/prime/%N LIBPATH=/home/joe/usr/lib:/home/joe/mylib:/usr/lib export LANG NLSPATH LIBPATH
前述の例では、最後のステートメントの 代わりに、export をその前の各行に追加することもできます (export LANG=ja_JP...)。
ECHO コマンドを使用すると、任意の環境変数の現行設定値を調べることができます。 BYPASS の値を定義するには、次の 2 つの例のどちらかを使用します。
echo $LANG echo $LIBPATH
デフォルトにより、SYSIN は stdin から 読み取られ、SYSPRINT は stdout に送られます。 関連付けを変更したい場合は、OPEN ステートメントの TITLE オプションを 使うか、データ・セットまたは別の装置に名前を指定する DD_DDNAME 環境変数を 設定する必要があります。 環境変数については、環境変数の設定で説明しています。
標準入力、標準出力、および標準エラー装置をファイルにリダイレクトすることもできます。 リダイレクトを使用できるのは、次のプログラムです。
Hello2: proc options(main);
put list('Hello!');
end;
このプログラムのコンパイルおよびリンク後、コマンド行に次のよう に入力してプログラムを呼び出すことができます。
hello2 > hello2.out
stdout と stderr を 1 つのファイルにまとめる場合は、次のコマンドを入力します。
hello2 > hello2.out 2>&1
表示ステートメントの場合と同様に、> (より大) 記号を使用すると、 その後ろに指定されているファイル、この場合は hello2.out に出力がリダイレクトされます。 これは、'Hello' という語がファイル hello2.out に書き込まれることを意味します。 PRINT 属性はデフォルトで SYSPRINT に適用されるため、 出力にはプリンター制御文字も組み込まれるということに注意してください。
READ ステートメントは stdin からのデータ にアクセスすることができます。ただし、そのデータが入るレコードには、値が 1 である LRECL がなければなりません。