Home | IBM Manuals Direct | iBytes Library | Links | About | Book Store | On-Line Code |
iByte Subject – Converting a numeric alpha string to right adjusted, zero filled. So your given data that looks something like ' 999 ' or '888 '. Your desired result is 000999 or 000888. Today's iByte tackles this conversion.
C*----------------------------------------------
C* SETUP 2 ALPHA FIELDS WITH THE SAME LENGTH AS C* THE NUMERIC FIELD THAT WILL RECIEVE THE RESULT C* POPULATE ONE WITH ALL ZEROS AND USE THE OTHER C* FOR A WORK FIELD. C*---------------------------------------------- D #ZEROS S 3 0 INZ(000) D #DIGITS S 3 0 INZ(000) D ZeroField S 7 INZ(*ZEROS) D WorkField S 7 INZ D D* EXAMPLE DATA
D NumericField S
7 0 INZ(0000000)
D AlphaField S 10 INZ(' 999 ') C C C* ------------------------------ C* STEP 1 - LEFT ADJUST THE FIELD C* ------------------------------ C EVAL WorkField = %TRIM(AlphaField) C
C*
----------------------------------
C* STEP 2 - FIND THE NUMBER OF DIGITS C* ---------------------------------- C ' ' CHECKR WorkField #DIGITS C C* -------------------------------------- C* STEP 3 - CALCULATE THE NUMBER OF ZEROS C* WE NEED TO FILL C* --------------------------------------
C
EVAL #ZEROS = (%len(NumericField)) - #DIGITS
C C* ------------------------------------- C* STEP 4 - BUILD STRING BY SUBST #ZEROS C* WITH ACTUAL NUMBER C* ------------------------------------- C EVAL WorkField = %SUBST(ZeroField:1:#ZEROS) + C WorkField C
C*
---------------------------------------------
C* STEP 5 - MOVE ADJUSTED FIELD TO NUMERIC FIELD C* --------------------------------------------- C MOVE WorkField NumericField C C* EXAMPLE C* STEP 1 - Sets WorkField = '999 ' C* STEP 2 - Returns #DIGITS = 3 C* STEP 3 - Returns #ZEROS = 4
C*
STEP 4 - Sets WorkField = '0000999'
C* ** Strings '0000' + '999 ' C* ** Blanks are truncated C* STEP 5 - Populates Numeric Field with 0000999 C |