|
On Wed, 30 Jul 2003, Carlos Kozuszko wrote:
> RE: RPGIV: Converting Packed to Char.Well... i already did what i needed
> using the ugly approach that wanted to avoid: here's my proc.
>
> P CharNum B
> D CharNum PI 30A varying
> D peNumber 30S 9 value
> D peSize 10I 0 value
> D peDecPos 10I 0 value
> D wwRetVal s 30A varying
The number is a 30S 9, but you're stuffing it into a 15-byte (29-digit)
packed number. Why not make peNumber be 29 digits?
[SNIP -- removed data structure and select group]
> c eval wwRetVal = %subst(CHAR_NUM:
> c %int(peSize / 2 + 1))
Is this code correct? It seems to me that you want peSize/2 + 1 to be
the length of the result, not the offset into the character string?! Does
this code work?
> Any ideas to improve it ?
Here's how I'd do it. Note that I eliminated the SELECT group, and
simplified the data structure by adding one line of multiplication.
I changed the logic for the %subst() because I couldn't get your
logic to work.
P CharNum B
D CharNum PI 15A varying
D peNumber 29P 9 value
D peSize 10I 0 value
D peDecPos 10I 0 value
D ds
D CHAR_NUM 15A
D NUM_P_0 29P 0 overlay(CHAR_NUM)
D wwRetVal s 30A varying
D wwStart s 10I 0
D wwBytes s 10I 0
** packed numbers must be an odd number of digits:
c if %rem(peSize: 2) = 0
c eval peSize = peSize + 1
c endif
* this is how many bytes the returned value will be:
c eval wwBytes = (peSize + 1) / 2
* calculate the returned value:
c eval wwStart = (%size(CHAR_NUM) - wwBytes) + 1
c eval NUM_P_0 = peNumber * (10**peDecPos)
c eval wwRetVal = %subst(CHAR_NUM: wwStart:
c wwBytes)
c return wwRetVal
P E
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.