Domanda

I have a RPG program A and a CL program B. A calls B with a data structure as entry parameter. This data structure contains characters as well as packed decimals. The entry parameter in B is declared as a character variable, so when the entry parameter is passed in from A, the decimal values end up in their hex-decimal format. I need their original decimal values in B. Is there any way to convert these hex character strings back to decimal in B?

È stato utile?

Soluzione

You don't need to convert. Define the decimal field over the appropriate location in your data structure.

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

The *DEFINED storage method works well when the position is fixed. In a situation where the location may vary, then use *BASED storage.

In this example there is a numeric value in a position determined by a format parameter. The value will be incremented by 1 or two.

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

See Variables in CL commands

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top