|
I can think of many ways to do this, but not with a combination of %char
and %editc. This is a definite need for directory (library) function.
Use %Char(Number) to return '1234.21'. The following code works, and I
will admit, it is in no way pretty. I am just evaluating SomeChar to '1234.21'
because I'm on V3R7M0 and I don't have the %Char bif. If I had to do something
like this, I would write this as a function and stick it in a library so I never
had to see this ugly code again <g>
* SomeNum is actually not used in the code, but this is what you would
* do an Eval SomeChar = %Char(SomeNum) on.
D SomeNum S 10S 2 Inz(1234.21)
D SomeChar S 10A
D Result S 10A
D Position S 3B 0
C Eval SomeChar = '1234.21'
C '.' SCAN SomeChar Position 99
C If Position <> 0
C Eval Result = %SubSt(SomeChar:1:Position - 1)
C + %SubSt(SomeChar:Position + 1)
C Else
C Eval Result = SomeChar
C EndIf
C Result Dsply
C Eval *INLR = *On
Regards,
Jim Langston
"Smith, Mike" wrote:
>
>
> I know i remove my leading zeros with %char, and i know i can remove a
> decimal just by moving to a character field. but with the use of %char or
> %editc or some combination can i remove leading zeros and suppress the
> decimal point.
> ie Numbfield 7.2 (1234.21)
> have it return (123421)
>
> -----Original Message-----
> From: Jim Langston [mailto:jimlangston@conexfreight.com]
> Sent: Wednesday, November 22, 2000 11:44 AM
> To: RPG400-L@midrange.com
> Subject: Re: %CHAR()
>
> Tom,
>
> This is the beauty of ILE. You don't like the way a BIF does something,
> write your own! Very simple to make a function that does exactly what
> you want the way you want it and stick it in your directory for binding.
> Give it whatever name you wish. And then just call this function.
>
> I understand that programmers are not wanting to do this, but it is the
> only real logical way to go. If you're not doing it today, I can almost
> guarantee you that you will be someday.
>
> It is really not that hard to build your own binding directory. Put your
> headers (pr declarations) into a /copy member. Now in your programs you
> have, what, one extra line of code at the beginning?
>
> /COPY MyBind
>
> And a few extra parameters to give when you compile. Now you can use your
> own functions in your programs. IBM does something you don't like? Change
> it and give it a new name.
>
> I think the good folks at IBM could of written this BIF either way, leaving
> in
> leading zeros or taking them out. Either way they did it, someone wouldn't
> of
> liked it <g>
>
> Incidentally, the VALUE did remain unchanged. ' 123' is equal to one
> hundred
> twenty three. Also consider that the number you are converting from could
> be
> in many different formats, IBM's version of BCD (Packed), Zoned, Binary. Of
> those
> only one actually has the zeros and that is Zoned. I think the argument
> that
> the original value had 0's is a mute point, because it's a number, not a
> character.
>
> I think we are going to find more and more that IBM is doing things
> differently
> then we would of wanted them done, and it is going to be much easier to just
> build
> our own functions to do them the way we want them to. For every way IBM
> does
> something, there's going to be 20 different ways people think it should of
> been
> done. You can please some of the people some of the time...
>
> Regards,
>
> Jim Langston
>
> "Westdorp, Tom" wrote:
> >
> > Jim,
> >
> > Your desired end is the perfect example of character conversion and a z
> edit
> > code combined to get an answer. You want two things, conversion and
> > editing, and %editc does two things conversion and editing. 'edit' + 'c'.
> > %char on the other hand just says make things character, but then edits
> the
> > result to suppress leading zeros. %editc(fieldx:'Z') is clear and
> > unambiguous, I submit %char(fieldx) to the same end is not.
> >
> > As to "most PC applications do not use leading zeros" begs the question
> > whose idea of most. We convert a handful of fields from packed decimals
> on
> > the 400 send them through serial communications (albeit sometimes over
> > TCP/IP) usually with LRC characters and in some cases with parity
> checking.
> > The formats are dictated by the other vendors to be character fields
> > containing right justified numbers that are zero filled. We do it
> hundreds
> > of thousands of times a day. Frankly, that's all irrelevant. The point
> is
> > that we have two bif's that do the same thing, one explicitly and one
> > implicitly and the answer is to use the explicit one to specify an edit
> code
> > that says don't edit.
> >
> > BTW, when I show my users numbers, I edit them. %editc or %editw or an
> edit
> > code on DDS screen specs, etc. Explicitly edited. So everyone knows it
> > happened.
> >
> > As to XLATE, that's what we do in some cases because the choice was to
> > either use a MOVE statement or EVALR followed by XLATE. Either way I
> ended
> > up with a fixed format RPG400 statement in the middle of a bunch of RPGIV
> > evals. And a comment to tell the next guy why they are there. And, as
> you
> > point out, it has to be the mix of MOVE's and EVALR + XLATE's because the
> > EVALR + XLATE can produce unwanted substitutions in some cases. Clear?
> To
> > some perhaps, but not as clear as a %char the just converts each number in
> a
> > field to its character value.
> >
> > The 'taking out' I referred to is the zeros that disappeared not a command
> > or bif or anything. I know its relatively new, and arguably broken.
> >
> > >From the book:
> > >4.1.1.3 %CHAR (Convert to Character Data)
> >
> > > %CHAR(expression)
> >
> > >%CHAR converts the value of the expression from graphic, UCS-2, numeric,
> > date, time or
> > >timestamp data to type character. The converted value remains unchanged,
> > but is returned in >a format that is compatible with character data.
> >
> > Note that it says the converted value remains unchanged. To me that means
> a
> > zero is a zero and stays a zero.
> >
> > There is a notation of:
> >
> > >If a UCS-2 conversion results in substitution characters, a warning
> message
> > will be given in >the compiler listing if the parameter is a constant.
> > >Otherwise, status 00050 will be set at run time but no error message will
> > be given.
> >
> > However, no mention is made of zero suppression or substitution in the
> case
> > of numeric values.
> >
> > All that said, I will work around it however I still believe it is wrong
> and
> > should be APARed. Early, before it becomes a legacy issue.
> >
> > Tom Westdorp
> +---
> | This is the RPG/400 Mailing List!
> | To submit a new message, send your mail to RPG400-L@midrange.com.
> | To subscribe to this list send email to RPG400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
> | Questions should be directed to the list owner/operator:
> david@midrange.com
> +---
> +---
> | This is the RPG/400 Mailing List!
> | To submit a new message, send your mail to RPG400-L@midrange.com.
> | To subscribe to this list send email to RPG400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
> | Questions should be directed to the list owner/operator: david@midrange.com
> +---
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
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.