STRPDM.COM                  

   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