1

RPG プログラム A と CL プログラム B があります。A はデータ構造をエントリー・パラメーターとして B を呼び出します。このデータ構造には、文字とパック 10 進数が含まれています。B のエントリ パラメータは文字変数として宣言されているため、エントリ パラメータが A から渡されると、10 進数値は 16 進形式になります。B で元の 10 進数値が必要です。これらの 16 進文字列を B で 10 進数に変換する方法はありますか?

4

1 に答える 1

2

変換する必要はありません。データ構造内の適切な位置に小数フィールドを定義します。

PGM (&STRUCT)
   DCL &STRUCT      *CHAR 12
   DCL &NAME        *CHAR 10   STG(*DEFINED) DEFVAR(&STRUCT)
   DCL &NBR         *DEC (3 0) STG(*DEFINED) DEFVAR(&STRUCT 11)

*DEFINED 格納方法は、位置が固定されている場合にうまく機能します。場所が異なる可能性がある状況では、*BASED ストレージを使用してください。

この例では、フォーマット パラメータによって決定される位置に数値があります。値は 1 または 2 増加します。

PGM (&STRUCT)
   DCL &STRUCT     *CHAR 80
   DCL &FMT        *CHAR 4
   DCL &P1         *PTR
   DCL &NUM        *DEC (3 0) STG(*BASED)
   ...
   CHGVAR &FMT %SUBSTR(&STRUCT 1 4)
   CHGVAR  &P1  %ADDRESS(&STRUCT)
   SELECT
      WHEN (&FMT = 'ONE ')  THEN(DO)
         CHGVAR %OFFSET(&P1) 20       /* POS 21 IN STRUCT */
         CHGVAR &NUM (&NUM + 1)       /* INCREMENT NUMBER BY 1 */
         ENDDO
      WHEN  (&FMT = 'TWO ')  THEN(DO)
         CHGVAR %OFFSET(&P1) 40       /* POS 41 IN STRUCT */
         CHGVAR &NUM (&NUM + 2)       /* INCREMENT NUMBER BY 2 */
         ENDDO
      OTHERWISE DO
         /* EXIT WITH ERROR */
         ...
         ENDDO
      ENDSELECT

CL コマンドの変数を参照してください。

于 2012-11-01T13:03:49.063 に答える