IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

To validate the Decimal numeric check


IBM Mainframe Forums -> DFSORT/ICETOOL
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
sureshpathi10

Active User


Joined: 03 May 2010
Posts: 154
Location: Kuala Lumpur

PostPosted: Tue Jan 28, 2014 12:07 pm
Reply with quote

Hi,

As far I know, you've to check each and every byte for numeric and space.

Here is the code. It may be big, but as long as it works, its fine, I guess.
Code:
//STEP0001 EXEC PGM=SORT                                         
//SORTIN   DD *                                                   
0002GPSAR7001CART1234567892013033099991212A111111100.00PCUSD     
0002GPSAR7002CART1234567892013033099991212       100.00PCUSD     
0002GPSAR7003CART1234567892013033099991212       200.00PCUSD     
0002GPSAR7003CART1234567892013033099991212 300   200.00PCUSD     
0002GPSAR7003CART12345678920130330999912121111111100.AAPCUSD     
0002GPSAR7003CART1234567892013033099991212  100.00     PCUSD     
0002GPSAR7003CART1234567892013043099991212  5000 78 .44PCUSD     
0002GPSAR7003CART1234567892013011099991212995000 78 .44PCUSD     
//SORTOUT  DD SYSOUT=*                                           
//SYSOUT   DD SYSOUT=*                                           
//SYSIN    DD *                                                   
  SORT FIELDS=COPY                                               
  INCLUDE COND=(53,1,CH,EQ,C'.',AND,54,2,FS,EQ,NUM)               
  INREC IFTHEN=(WHEN=(43,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'),       
                OVERLAY=(81:C'I'),HIT=NEXT),                     
        IFTHEN=(WHEN=(43,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),       
                OVERLAY=(81:C'N'),HIT=NEXT),                 
        IFTHEN=(WHEN=(43,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'),
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(44,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'), 
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(44,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),   
                OVERLAY=(81:C'N'),HIT=NEXT),                 
        IFTHEN=(WHEN=(44,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'),
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(45,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'), 
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(45,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),   
                OVERLAY=(81:C'N'),HIT=NEXT),                 
        IFTHEN=(WHEN=(45,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'),
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(46,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'), 
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(46,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),   
                OVERLAY=(81:C'N'),HIT=NEXT),                 
        IFTHEN=(WHEN=(46,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'),
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(47,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'),   
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(47,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),   
                OVERLAY=(81:C'N'),HIT=NEXT),                 
        IFTHEN=(WHEN=(47,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'), 
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(48,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'),   
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(48,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),   
                OVERLAY=(81:C'N'),HIT=NEXT),                 
        IFTHEN=(WHEN=(48,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'), 
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(49,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'),   
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(49,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),   
                OVERLAY=(81:C'N'),HIT=NEXT),                 
        IFTHEN=(WHEN=(49,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'), 
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(50,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'),   
                OVERLAY=(81:C'I'),HIT=NEXT),                 
        IFTHEN=(WHEN=(50,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'),   
                OVERLAY=(81:C'N'),HIT=NEXT),               
        IFTHEN=(WHEN=(50,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'),
                OVERLAY=(81:C'I'),HIT=NEXT),               
        IFTHEN=(WHEN=(51,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'),
                OVERLAY=(81:C'I'),HIT=NEXT),               
        IFTHEN=(WHEN=(51,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'), 
                OVERLAY=(81:C'N'),HIT=NEXT),               
        IFTHEN=(WHEN=(51,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'),
                OVERLAY=(81:C'I'),HIT=NEXT),               
        IFTHEN=(WHEN=(52,1,FS,NE,NUM,AND,43,1,CH,NE,X'40'),
                OVERLAY=(81:C'I'),HIT=NEXT),               
        IFTHEN=(WHEN=(52,1,FS,EQ,NUM,AND,81,1,CH,NE,C'I'), 
                OVERLAY=(81:C'N'),HIT=NEXT),               
        IFTHEN=(WHEN=(52,1,CH,EQ,X'40',AND,81,1,CH,EQ,C'N'),
                OVERLAY=(81:C'I'),HIT=NEXT)                 
  OUTFIL OMIT=(81,1,CH,EQ,C'I'),BUILD(1,80)                 


Here is the output:
Code:
0002GPSAR7002CART1234567892013033099991212       100.00PCUSD
0002GPSAR7003CART1234567892013033099991212       200.00PCUSD


Really appreciate if anyone come up with simple sort.
Back to top
View user's profile Send private message
Meenakshi Selvaraj

New User


Joined: 30 Oct 2009
Posts: 36
Location: Chennai

PostPosted: Tue Jan 28, 2014 5:11 pm
Reply with quote

Thank you so much Suresh.
Back to top
View user's profile Send private message
Skolusu

Senior Member


Joined: 07 Dec 2007
Posts: 2205
Location: San Jose

PostPosted: Wed Jan 29, 2014 4:59 am
Reply with quote

sureshpathi10 wrote:
Hi,

As far I know, you've to check each and every byte for numeric and space.

Here is the code. It may be big, but as long as it works, its fine, I guess.
Really appreciate if anyone come up with simple sort.


Well if you are running against millions of records your performance will take a hit. You have complicated a simple task as you can validate the input with just 3 IFTHEN clause.

1. Justify(JFY) the numeric value (10 bytes from pos 43) and put it at the end(pos 81) using IFTHEN WHEN=INIT

2. Using another IFTHEN WHEN=INIT , parse the value at 81 with STARTAT=C' ' and multiple ENDAT parms for '0' thru '9'. This will get all the values that are having imbedded blanks in between the numbers and put this value at 92.

3. Using another IFTHEN WHEN=INIT , FINDREP the values at STARTPOS=81 ENDPOS=90 replacing '0' thru '9' with a space. By doing this you will eliminate any records that do not have numbers.(ex: record1)

4. Using OUTFIL omit records that have values greater than spaces at position 81 OR at position 92 and BUILD the record removing the extra bytes at end.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> DFSORT/ICETOOL

 


Similar Topics
Topic Forum Replies
No new posts Issues Converting From ZD to Signed N... DFSORT/ICETOOL 4
No new posts Extracting Variable decimal numbers f... DFSORT/ICETOOL 17
No new posts SCOPE PENDING option -check data DB2 2
No new posts Check data with Exception Table DB2 0
No new posts How to check whether who renamed the ... JCL & VSAM 3
Search our Forums:

Back to Top