例 2

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

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

AAA111BBB456CCC789
AAB222BBB456CCC789
AAC333BBB456CCC789
AAA444BBB456CCC789
AAA555BBB456CCC789

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

AAA001BBB456CCC789
AAA002BBB456CCC789
AAA003BBB456CCC789
AAA004BBB456CCC789

「Print 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 print processing */
if substr(inrec,4,3) = '003'  /* If cols 4-6 contain '003' */
then RETURN PROCESS MEMBER  /* then process (print) member */
return

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

「total」への累算には、MEM2 の最初の 3 つのレコード も組み込まれます。4 番目のレコードは、3 番目のレコードの処理中に、印刷の決定が行われたため、REXX プロシージャーによって処理されません。この印刷アクションが終了したときの結果は、MEM1 がドロップされ、MEM2 が印刷され、「total」への累算は 117 と等しくなります。(111 + 1 + 2 + 3) と等しくなります。