FB から VB への変換
OUTFIL の FTOV パラメーターを使用すると、FB データ・セットを VB データ・セットに変換できます。 それぞれの VB 出力レコードは、4 バイトの RDW とその後に FB 入力レコードからの対応するデータを持っているので、RDW 内の長さは FB レコードに 4 を加えた長さになります。
以下の JCL および DFSORT 制御ステートメントは、ブックストア・データ・セットのレコードを FB から VB に変換します。
//FBVB JOB A92,PROGRAMMER
//S1 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=A123456.SORT.SAMPIN,DISP=SHR
//VBOUT DD DSN=A123456.SORT.VSAMP,DISP=(NEW,CATLG,DELETE),
// UNIT=3390,SPACE=(CYL,(5,5))
//SYSIN DD *
OPTION COPY
OUTFIL FNAMES=VBOUT,FTOV
/*
SORT.SAMPIN の LRECL は 173 バイトなので、SORT.VSAMP のそれぞれの VB レコードは 177 バイトになり (173 の FB レコード長に RDW の 4 を加えた長さ)、SORT.VSAMP には 177 の LRECL が与えられます。
また、OUTFIL ステートメントで FTOV と一緒に PARSE、BUILD、OUTREC、OVERLAY、FINDREP、あるいは IFTHEN パラメーターを使用することもできます。再フォーマットのすべての機能が使用可能です (入力フィールド、ストリング、編集、など)。 FTOV では、FB レコード (RDW なし) の場合に指定する入力位置と出力桁を指定します。DFSORT は、FB レコードが再フォーマットされた後に RDW を追加します。
FTOV と BUILD を一緒に使用した例を、以下に示します。
OUTFIL FTOV,BUILD=(1:120,25,32:C'in ',110,5)
VB 出力レコードは次のようになります。
Positions 1-2: Length (in RDW) = hex 002B = 43
Positions 3-4: Zeros (in RDW) = hex 0000 = 0
Positions 5-29: Input positions 120-144
Positions 30-35: Blanks
Positions 36-38: 'in '
Positions 39-43: Input positions 110-114
それぞれの VB 出力レコードは 43 バイトの長さであり、出力データ・セットには 43 の LRECL が与えられます。
前の例では、VB 出力レコードはすべて同じ長さです。
OUTFIL の VLTRIM パラメーターを使用すると、FB 入力レコードからいろいろな長さの VB 出力レコードを作成することができます。
LRECL=20 の FB 入力データ・セットがあり、次のような 20 バイトの各レコードがあるとします。
ABC
ABCDEF
AC
ABCDEFGHI
以下のステートメントは、それぞれ 20 バイトの FB 入力レコードを 24 バイトの VB 出力レコードに変更し、VB 出力データ・セットに対して LRECL=24 を設定します。
OPTION COPY
OUTFIL FTOV
VB 出力レコードは次のようになります。
Length X'0000' Data
---------------------------------------------
1 2 3 4 5 24
---------------------------------------------
24 0 ABC
24 0 ABCDEF
24 0 AC
24 0 ABCDEFGHI
---------------------------------------------
それぞれの VB 出力レコードの終わりから末尾ブランクを除去するには、VLTRIM=C' ' (または VLTRIM=X'40') を次のように使用します。
OUTFIL FTOV,VLTRIM=C' '
結果の VB 出力データ・セットには、最大レコード長が 24 であることを示す LRECL=24 がやはり設定されますが、VB 出力レコードは右側にブランクを埋め込まれません。すなわち、次のようないろいろなレコード長になります。
Length X'0000' Data
---------------------------------------------
1 2 3 4 5 24
---------------------------------------------
7 0 ABC
10 0 ABCDEF
6 0 AC
13 0 ABCDEFGHI
---------------------------------------------
VLTRIM には任意の文字または 16 進バイト値を使用できます。 例えば、VLTRIM=C'*' は末尾のアスタリスクを除去し、VLTRIM=X'00' は末尾の 2 進ゼロを除去します。