MF PS をいくつかのデータセットに分割しようとしています。たとえば、600 個のレコードを含むデータセットがある場合、これをそれぞれ 100 個のレコードを持つ 6 つのファイルに分割したいと考えています。JCLソートを使用してこれを行うことは可能ですか?
4 に答える
以下の JCL は、DFSORT を使用して DD SOTRIN を 3 つの出力 DATASET (OUT1、OUT2、および OUT3) に均等に分割し、6 つにまたがってそれを行い、さらに 3 つの出力 DD ステートメントを追加し、それらを FNAMES ステートメントに追加します。
//SPLIT EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=Y897797.INPUT1,DISP=OLD
//OUT1 DD DSN=Y897797.SPLIT1,DISP=(NEW,CATLG),
// SPACE=(CYL,(5,5)),UNIT=SYSDA
//OUT2 DD DSN=Y897797.SPLIT2,DISP=(NEW,CATLG),
// SPACE=(CYL,(5,5)),UNIT=SYSDA
//OUT3 DD DSN=Y897797.SPLIT3,DISP=(NEW,CATLG),
// SPACE=(CYL,(5,5)),UNIT=SYSDA
//SYSIN DD *
SORT FIELDS=(21,5,FS,A)
OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT
/*
SORT FIELDS=(21,5,FS,A) は、sortint データセットをソートする方法です。以下は、この fields ステートメントの意味です。
21 ソートするフィールドの先頭
5 ソートするフィールドの長さ
FS Floating Sign (Signed Numeric)
A 昇順
DFSORT Getting Started Manual
Smart DFSORT Tricksには、多くの役立つ例と、データセットからレコードを分割する他のいくつかの方法があります。
SPLIT は単なる SPLIT であり、数字と関連付けることはできません。
SPLITBY=n は、指定された各 OUTFIL データセット間で n レコードを「ローテーション」します。SPLIT は SPLITBY=1 と同じです。
SPLIT1R=n は 1 つの「ローテーション」のみを実行します (n レコードが最初の OUTFIL データセットに書き込まれ、次に n レコードが 2 番目の OUTFIL に書き込まれ、最後の OUTFIL データセットが使用されるまで同様に続きます。これには、入力の残りのレコードが含まれます。いくらでも。
OUTFIL FILES=OUT1 は許可されません。OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT にする必要があります。
STATREC/ENDREC または INCLUDE/OMIT を使用する場合、OUTFIL SAVE を使用して、他の OUTFIL データセットのいずれにも書き込まれないレコードのファイルを確立できます。
- DeuianのSORTCARDは、入力ファイルを出力ファイルに均等に分割します。たとえば、 3つの出力ファイルがある場合、入力レコードの合計を3で割ると、各入力ファイルのレコード数になります。
- cosのうち、以下のように、分割が発生することに基づいてカウントを指定できます。入力ファイルを暗黙的に出力ファイルに分割し、それぞれ10000レコードを記録します。たとえば、入力ファイルに40000レコードがあり、それらを3つの出力ファイルに分割すると、出力ファイルに10000+10000/3レコードが取得されます。
OUTFIL FNAMES =(OUT1、OUT2、OUT3)、SPLIT = 10000
- 一言で言えば、出力レコード数に制約がない場合にそれを利用できます。分割中にそのような基準がある場合は、以下のコードが役立ちます...
SORT FIELDS = COPY
OUTFIL FILES = OUT1、ENDREC = 10000 OUTFIL
FILES = 02、STARTREC = 10001、ENDREC = 20000 OUTFIL FILES = 03、STARTREC = 20001、ENDREC = 30000
- 最後に、入力ファイルに30000を超えるレコードがあり、それらのレコードをどうするかを指定しなかった場合、SORTはそれらについて気にしません。つまり、最後の出力ファイルには10000レコードしか保持されません。
私があなたを明確にしたことを願っています。さらに質問がある場合は戻ってください。