|
Scott,
Nothing in you email is new to me, but thank you for the time and effort
you put into your reply.
Apparently I did a poor job of getting across what I wanted to do.
Consider the following example:
D myNumFld s 10p0
D myDS DS qualified
D 9a inz('Value is:')
D myCharFld 10a
C eval myDs.myCharFld =
%edtcde(myNumFld:'X')
What I'd like to be able to do is the following:
D myNumFld s 10p0
D myDS DS qualified
D 9a inz('Value is:')
D myCharFld
like(%size(%edtcde(myNumFld:'X'))
C eval myDs.myCharFld =
%edtcde(myNumFld:'X')
I'd agree that EVAL and BIFS are the better solution. But I'm still
wondering if there's any way to do what I'm asking.
Thanks,
Charles Wilt
--
iSeries Systems Administrator / Developer
Mitsubishi Electric Automotive America
ph: 513-573-4343
fax: 513-398-1121
> -----Original Message-----
> From: rpg400-l-bounces@xxxxxxxxxxxx
> [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Scott Klement
> Sent: Wednesday, April 19, 2006 12:47 PM
> To: RPG programming on the AS400 / iSeries
> Subject: Re: Easy way to define a DS char subfield the same
> size as somenumeric field?
>
> > I've got a standalone field defined as packed(3,0).
> > Is there an easy way to define a DS subfiled as char(3)?
>
> That would be CHAR(2), actually. Packed fields are always digits+1/2
> bytes long. In this case, 2 bytes.
>
>
> > In other words, given any specific numeric field, how can a define a
> > corresponding character field large enough to hold the numeric data
> > without having to hardcode the subfield size?
>
> D char ds
> D packed 3P 0
>
> or
>
> D ds
> D char
> D packed 3P 0 overlay(char)
>
> In either case, the character field is automatically created
> as 2 bytes
> long, and you don't have to hard code the size.
>
> > The DS is used to send out an email message.
>
> It would NOT make sense to do this in an E-mail message.
> E-mail messages
> are text-only, so you'd want to convert the number to
> human-readable form.
>
> For example, if you had the packed value -123, this would be
> stored in
> memory in a packed field as x'123D'. That means that your 2
> character
> field would be made up of 2 unprintable control characters.
> You wouldn't
> want to put that in an e-mail message!
>
> So I'm thinking to myself, "maybe he meant zoned decimal instead of
> packed?". OKay, in that case you'd define it this way:
>
> D ds
> D char
> D zoned 3S 0 overlay(char)
>
> That'd be closer. For example, if the zoned field had a
> value of 19, it'd
> be stored in memory as x'F0F1F9'. If you tried to view it as
> text, it'd
> be 019 which at least would be printable! However, it does have that
> annoying leading zero. Now consider what happens if you make it a
> negative number, such as -123. the bytes are set to x'F1F2D3', which
> would appear on the screen as 12L, since x'D3' is the EBCDIC letter L.
>
> Truly, you do NOT want to use a data structure for this. A
> data structure
> just overlays two fields so that they have the same hex byte
> values. In
> reality, you want to convert from the numeric field to a
> human-readable,
> nicely formatted, character field. Not just copy the bytes
> from one to
> the other!
>
> > If there isn't an easy way to do what I want, I'll just get
> rid of the
> > DS altogether and use eval + some bifs to build the message.
>
> That's a MUCH MUCH MUCH better idea. EVAL and BIFs will make
> this much
> easier to write, and using %char() or %editc() you can format
> the number
> any way you want.
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.