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 進ゼロを除去します。