例 2

この例は、REXX メンバー選択を他の REXX プロシージャー・ステートメントと同時に使用した場合に、どのようになるかを示しています。このシナリオでは、データ・セットのメンバーをコピーしようとしており、また、同時にこのメンバーの値を累算しようとしています。

最初のメンバー (MEM1) には、次の 5 レコードが含まれています。

AAA111BBB456CCC789
AAB222BBB456CCC789
AAC333BBB456CCC789
AAA444BBB456CCC789
AAA555BBB456CCC789

2 番目のメンバー (MEM2) には、次の 4 レコードが含まれています。

AAA001BBB456CCC789
AAA002BBB456CCC789
AAA003BBB456CCC789
AAA004BBB456CCC789

「Copy Utility (コピー・ユーティリティー)」の「REXX member selection (REXX メンバー選択)」のデフォルトが「P」に設定され、次のプロシージャーが提供されます。

/* rexx */
if substr(inrec,1,3) == 'AAA'  /* If cols 1-3 in current rec contain 'AAA' */
then x = tally(4,3,Z,'total') /* then add up the value in columns 4-6 */
if substr(inrec,4,3) == '333'  /* If cols 4-6 contain '333' */
then RETURN DROP MEMBER       /* then drop member from copy processing */
if substr(inrec,4,3) == '003'  /* If cols 4-6 contain '003' */
then RETURN PROCESS MEMBER    /* then process (copy) member */
return 

「total」への累算には、MEM1 がコピー処理からドロップされたとしても、MEM1 の最初のレコードが組み込まれます。2 番目と 3 番目のレコードは「AAA」の要件を満たさないため割り当てられず、その後に続くレコードは、3 番目のレコードの処理中に、ドロップの決定が行われたため、処理されません。

「total」への累算には、MEM2 の最初の 3 つのレコードも組み込まれます。4 番目のレコードは、3 番目のレコードの処理中に、コピーの決定が行われたため、REXX プロシージャーによって処理されません。

このコピー・アクションが終了したときの結果は、MEM1 がドロップされ、MEM2 がコピーされ、「total」への累算は 117(111 + 1 + 2 + 3) と等しくなります。

関連トピック