Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, プログラミング・ガイド

E15 - 入力処理ルーチン (ソート出口 E15)

入力ルーチンは、通常、データがソートされる前に、データに対して何らかの 処理を加えるのに使用されます。 入力ルーチンは、 図 51 および 図 53 に 示してあるとおり、データを印刷するのに使用するか、 正しい結果を出すためにソート・フィールドを生成または操作するのに使用することができます。

入力処理ルーチンは、PLISRTB または PLISRTD を呼び出すときに ソート・プログラムが使用します。 ソート・プログラムがレコードを必要とする場合、戻りコード 12 と一緒に、 文字ストリング・フォーマットのレコードを戻す入力ルーチン を呼び出します。 この戻りコードの意味は、渡したレコードはソートの対象になるという ことです。 ソート・プログラムは、戻りコード 8 が渡されるまでこのルーチン を呼び出し続けます。 戻りコード 8 の意味は、すべてのレコードを渡し終えたので、 ソート・プログラムがそのルーチンをもう呼び出す必要はないということです。 戻りコードが 8 のときにレコードが戻された場合、そのレコードはソート・プログラム によって無視されます。

ルーチンによって戻されるデータは、文字ストリングでなければなりません。 この文字ストリングは、固定でも可変でも構いません。 可変の場合、PLISRTx への呼び出し内 の 2 番目の引数である RECORD ステートメント内のレコード・フォーマットとして、 通常は、V を指定する必要があります。 しかし、F を指定することも可能で、その場合は、 ストリングが最大長になるようブランクが埋め込まれます。 レコードは RETURN ステートメントを使って戻されるため、PROCEDURE ステートメント 内で RETURNS 属性を指定しなければなりません。 戻りコードは、PLIRETC の呼び出し内で設定されます。 代表的な入力ルーチンのフローチャートを、図 47 に示します。

図 47. 入力および出力処理サブルーチンのフローチャート
入力および出力処理サブルーチンのフローチャート

代表的な入力ルーチンの骨組みコードを、図 48 に示します。

図 48. 入力プロシージャー用の骨組みコード
E15: PROC RETURNS (CHAR(80));
     /*---------------------------------------------------------------*/
     /*RETURNS attribute must be used specifying length of data to be */
     /* sorted, maximum length if varying strings are passed to Sort. */
     /*---------------------------------------------------------------*/
   DCL STRING CHAR(80); /*--------------------------------------------*/
                        /*A character string variable will normally be*/
                        /* required to return the data to Sort        */
                        /*--------------------------------------------*/

   IF LAST_RECORD_SENT THEN
     DO;
      /*---------------------------------------------------------------*/
      /*A test must be made to see if all the records have been sent,  */
      /*if they have, a return code of 8 is set up and control returned*/
      /*to Sort                                                        */
      /*---------------------------------------------------------------*/

        CALL PLIRETC(8);  /*-------------------------------------------*/
                          /* Set return code of 8, meaning last record */
                          /* already sent.                             */
                          /*-------------------------------------------*/
        RETURN('');
     END;

   ELSE
     DO;
      /*------------------------------------------------*/
      /* If another record is to be sent to Sort, do the*/
      /* necessary processing, set a return code of 12  */
      /* by calling PLIRETC, and return the data as a   */
      /* character string to Sort                       */
      /*------------------------------------------------*/

   ****(The code to do your processing goes here)

       CALL PLIRETC (12);  /*--------------------------------------*/
                           /* Set return code of 12, meaning this  */
                           /* record is to be included in the sort */
                           /*--------------------------------------*/
       RETURN (STRING);  /*Return data with RETURN statement*/
     END;

  END;   /*End of the input procedure*/

入力ルーチンの例は、図 51 および 図 53 に示してあります。

戻りコード 12 (ソートに現行レコードを組み込む) と 戻りコード 8 (すべてのレコードを送付済み) 以外に、 ソート・プログラムでは戻りコード 16 を使うこともできます。 これは、ソートを終了させ、戻りコード 16 (ソート失敗) とともに、 ソート・プログラムを PL/I プログラムに戻します。

注:
PLIRETC への呼び出しは、PL/I プログラムから渡され、それ以降の任意の ジョブ・ステップで使用することができる戻りコードを設定します。 出力処理ルーチンを使用した後 は、 PLISRTx を呼び出してから PLIRETC を呼び出し、 戻りコードをリセットして、ゼロ以外の完了コードが出ないようにすることをお勧めします。 ソート・プログラムからの戻りコードを引数として 使用して PLIRETC を呼び出せば、PL/I 戻りコードにソートの成功または 失敗を反映させることができます。 この方法は、図 52 に示してあります。

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)