セグメント化データ・テンプレートを使用するレコードのコピー

セグメント化テンプレートを使用してデータをコピーしていた旧リリースの File Manager は、出力ファイルをセグメント解除していました。セグメント化データがコピーできるようにこの動作は変更されており、レコード・セグメント関係または物理レコード構造は維持されます。このことは、以下の操作を実行できることを意味します。

  • 選択基準を指定した入力テンプレートを使用して、セグメント化データ・セットからレコードを選択してコピーします。
  • 入力テンプレートと出力テンプレートを使用して、セグメント化データを再形式設定します。これには、出力のスクランブル処理機能も含まれます。再形式設定時に、出力のセグメント長は出力テンプレートによって決定され、入力セグメントは埋め込みまたは切り捨てが行われることに注意してください。予期しない結果とならないように、入力セグメントをマップするときに長さが誤っていないことを確認してください。
  • 物理レコード内のセグメントの除去または挿入の手順を使用します。手順の処理では、一度に 1 つのセグメントずつ入力データを確認します。RETURN 'DROP' をコーディングすると、そのセグメントは現行の出力レコードから除去されます。WRITE() ステートメントをコーディングすると、セグメントは現行の出力レコードに挿入されます。RETURN 'STOP' をコーディングすると、処理中のセグメントがその物理レコードで最後のセグメントである場合にのみ、現行の物理レコードが書き出されます。そうでない場合は、処理中の現行の物理レコードが書き出されない RETURN 'STOP IMMEDIATE' と同じような動作になります。次の例を参照してください。
例 1
出力レコードに新規セグメントを挿入します。

以下の入力セグメント化レコードがあるとします。

AsegBsegCsegDseg
これは、セグメント A から E をマップする 5 つのレイアウトがあるセグメント化テンプレートによってマップされます。
$$FILEM DSC ,
$$FILEM TCIN=MYSEG.TEMPLATE(SEGTP),,
$$FILEM PROC=*
IF FLD(1,1) = 'D' THEN DO              /* found a Dseg */
  WRITE()                              /* Write out current segment */
  OVLY_OUT('E',1)                      /* Create 'Eseg' in output area */
END                                    /* normal return writes Eseg  */
上記の手順を実行した後、出力レコードは次のようになります。
AsegBsegCsegDsegEseg.
例 2.
出力レコードのセグメントを削除します。

以下の入力セグメント化レコードがあるとします。

AsegBsegCsegDseg
$$FILEM DSC ,
$$FILEM TCIN=MYSEG.TEMPLATE(SEGTP),,
$$FILEM PROC=*
IF FLD(1,1) = 'C' THEN                  /* found a Cseg */
  Return 'DROP'                         /* drop this segment */
上記の手順を実行した後、出力レコードは次のようになります。
AsegBsegDseg 
例 3.
セグメント化ファイルをセグメント解除します。
//DDIN     DD DISP=SHR,DSN=MYSEG.DATA
//DDOUT    DD DUMMY
//DDDESEG  DD DISP=SHR,DSN=MYDESEG.DATA
//SYSIN    DD *
$$FILEM DSC ,
$$FILEM TCIN=MYSEG.TEMPLATE(SEGTP),
$$FILEM PROC=*
WRITE(DDDESEG)   /* Write segment out as physical record */
RETURN 'DROP'    /* don't copy any data */
/*

関連トピック