データ・セットを作成するには、ユーザーの PL/I プログラム内で、 またはデータ・セットを定義する DD ステートメント内で、特定の情報を オペレーティング・システムに与える必要があります。z/OS UNIX では、次のような方法でこの情報を与えます。
次に、必須情報を示し、ユーザーが与えることのできるいくつかのオプショナルの 情報について説明します。
ユーザーのアプリケーションで STREAM ファイルを作成する場合は、PL/I は、 次の入手源の 1 つから、優先順位順に (降順)、そのファイルの行サイズの値を導き出します。
LINESIZE の値が与えられていて、RECSIZE の値が与えられていない場合は、PL/I は、次のようにレコード長を導き出します。
LINESIZE の値が与えられておらず、RECSIZE の値が与えられている場合は、PL/I は、次のように RECSIZE から行サイズの値を導き出します。
LINESIZE も RECSIZE も与えられていない場合は、PL/I は、 ファイル属性および関連付けられたデータ・セットのタイプ に基づいて、デフォルトの行サイズの値を決定します。PL/I が適切なデフォルトの行サイズを与えられない 場合は、UNDEFINEDFILE 条件が発生します。
次の場合には、デフォルトの行サイズが OUTPUT ファイルに与えられます。
なお、LINESIZE オプションが (OPEN ステートメントで) 指定されていて、かつ (ENVIRONMENT 属性、TITLE オプション、または DD ステートメントで) RECSIZE も指定されていて、 (レコード・フォーマットおよび適切な制御バイトのオーバーヘッドを考慮に入れて) レコード・サイズの値が小さ過ぎて LINESIZE を保持できない場合は、以下のようになります。
DD SYSOUT= ファイルでは、指定された LINESIZE に一致する新しいレコード・サイズを決定するために、LINESIZE オプションが使用されます。 DD DSN= ファイルおよびその他のすべてのファイルでは、UNDEFINEDFILE 条件が発生します。
すべてのファイルで、UNDEFINEDFILE 条件が発生します。
編集指示ストリーム指向データ伝送を使用して、 直接アクセス・ストレージ・デバイス上にデータ・セットを作成する方法が、 図 24 に示されています。 ファイル SYSIN によって入力ストリームから読み取られるデータには、 名前の付いていない 7 文字サブフィールドが入っているフィールド VREC が含まれており、 フィールド NUM は情報が入っているこれらのサブフィールドの数を定義します。 出力ファイル WORK は、ファイル FREC 全体と、VREC の中で情報の入っているサブフィールドだけをデータ・セットに送ります。
//EX7#2 JOB
//STEP1 EXEC IBMZCBG
//PLI.SYSIN DD *
PEOPLE: PROC OPTIONS(MAIN);
DCL WORK FILE STREAM OUTPUT,
1 REC,
2 FREC,
3 NAME CHAR(19),
3 NUM CHAR(1),
3 PAD CHAR(25),
2 VREC CHAR(35),
EOF BIT(1) INIT('0'B),
IN CHAR(80) DEF REC;
ON ENDFILE(SYSIN) EOF='1'B;
OPEN FILE(WORK) LINESIZE(400);
GET FILE(SYSIN) EDIT(IN)(A(80));
DO WHILE (¬EOF);
PUT FILE(WORK) EDIT(IN)(A(45+7*NUM));
GET FILE(SYSIN) EDIT(IN)(A(80));
END;
CLOSE FILE(WORK);
END PEOPLE;
/*
//GO.WORK DD DSN=HPU8.PEOPLE,DISP=(NEW,CATLG),UNIT=SYSDA,
// SPACE=(TRK,(1,1))
//GO.SYSIN DD *
R.C.ANDERSON 0 202848 DOCTOR
B.F.BENNETT 2 771239 PLUMBER VICTOR HAZEL
R.E.COLE 5 698635 COOK ELLEN VICTOR JOAN ANN OTTO
J.F.COOPER 5 418915 LAWYER FRANK CAROL DONALD NORMAN BRENDA
A.J.CORNELL 3 237837 BARBER ALBERT ERIC JANET
E.F.FERRIS 4 158636 CARPENTER GERALD ANNA MARY HAROLD
/*図 25 は、リスト指示出力を使ってグラフィックス をストリーム・ファイルに書き込むプログラムの例を示しています。 なお、この例では、グラフィック・データを印刷できる出力装置があることを想定しています。 このプログラムは、従業員レコードを読み取り、特定の地域に在住する従業員を選択します。 このプログラムはさらに、住所フィールドを編集して、 各住所項目間にグラフィック・ブランクを挿入し、 従業員番号、氏名、および住所を印刷します。
//EX7#3 JOB
//STEP1 EXEC IBMZCBG
//PLI.SYSIN DD *
% PROCESS GRAPHIC;
XAMPLE1: PROC OPTIONS(MAIN);
DCL INFILE FILE INPUT RECORD,
OUTFILE FILE OUTPUT STREAM ENV(GRAPHIC);
/* GRAPHIC OPTION MEANS DELIMITERS WILL BE INSERTED ON OUTPUT FILES. */
DCL
1 IN,
3 EMPNO CHAR(6),
3 SHIFT1 CHAR(1),
3 NAME,
5 LAST G(7),
5 FIRST G(7),
3 SHIFT2 CHAR(1),
3 ADDRESS,
5 ZIP CHAR(6),
5 SHIFT3 CHAR(1),
5 DISTRICT G(5),
5 CITY G(5),
5 OTHER G(8),
5 SHIFT4 CHAR(1);
DCL EOF BIT(1) INIT('0'B);
DCL ADDRWK G(20);
ON ENDFILE (INFILE) EOF = '1'B;
READ FILE(INFILE) INTO(IN);
DO WHILE(¬EOF);
DO;
IF SUBSTR(ZIP,1,3)¬='300'
THEN LEAVE;
L=0;
ADDRWK=DISTRICT;
DO I=1 TO 5;
IF SUBSTR(DISTRICT,I,1)= < >
THEN LEAVE; /* SUBSTR BIF PICKS 3P */
END; /* THE ITH GRAPHIC CHAR */
L=L+I+1; /* IN DISTRICT */
SUBSTR(ADDRWK,L,5)=CITY;
DO I=1 TO 5;
IF SUBSTR(CITY,I,1)= < >
THEN LEAVE;
END;
L=L+I;
SUBSTR(ADDRWK,L,8)=OTHER;
PUT FILE(OUTFILE) SKIP /* THIS DATA SET */
EDIT(EMPNO,IN.LAST,FIRST,ADDRWK) /* REQUIRES UTILITY */
(A(8),G(7),G(7),X(4),G(20)); /* TO PRINT GRAPHIC */
/* DATA */
END; /* END OF NON-ITERATIVE DO */
READ FILE(INFILE) INTO (IN);
END; /* END OF DO WHILE(¬EOF) */
END XAMPLE1;
/*
//GO.OUTFILE DD SYSOUT=A,DCB=(RECFM=VB,LRECL=121,BLKSIZE=129)
//GO.INFILE DD *
ABCDEF<
>300099< 3 3 3 3 3 3 3 >
ABCD <
>300011< 3 3 3 3 >
/*