MVSFORUMS.com A Community of and for MVS Professionals
View previous topic :: View next topic
Author
Message
vijayakumar Beginner Joined: 28 Jul 2006 Posts: 17 Topics: 9
Posted: Tue Apr 24, 2012 10:40 pm Post subject: Removing leading zeros for varchar field using sort
Hi,
I have a requirement to remove the leading zeros for varchar(40) field using sort. We can use JFY=(SHIFT=LEFT)) to remove the leading zeroes but whether it is possible to calculate the length also using sort. Could you please help me.
SORT FIELDS=COPY
OUTREC OVERLAY=(3,40,UFF,M10,LENGTH=40,
3:3,40,JFY=(SHIFT=LEFT))
For example
01 Var1.
49 Var1-length s9(4) Comp.
49 Var1-data x(40).
Input Sample data
Length(2 bytes) Value(40 bytes)
(BI)
05 00100
08 00020000
10 0012343533
10 1234567890
Output
Length(2 bytes) Value(40 bytes)
(BI)
03 100
05 20000
08 12343533
10 1234567890
Thanks.
Back to top
Anuj Dhawan Intermediate Joined: 19 Jul 2007 Posts: 298 Topics: 7 Location: Mumbai,India
Posted: Wed Apr 25, 2012 7:20 am Post subject:
Try: Code: //SHOWLEN EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=... input file (VB)
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
OUTREC BUILD=(1,4,1,2,BI,C':',5)
/*
_________________ Regards,
Anuj
Back to top
kolusu Site Admin Joined: 26 Nov 2002 Posts: 12378 Topics: 75 Location: San Jose
Posted: Wed Apr 25, 2012 12:24 pm Post subject:
vijayakumar ,
It is little tricky to remove the leading zeroes and also update the length. Here is a DFSORT JCL which will give you the desired results.
Code:
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=Your Input Fb 42 byte file,DISP=SHR
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=INIT,OVERLAY=(3:3,31,UFF,M10,LENGTH=31)),
IFTHEN=(WHEN=(32,1,CH,EQ,C' '),OVERLAY=(33:33,10,UFF,M10,LENGTH=10))
OUTREC IFTHEN=(WHEN=INIT,OVERLAY=(3:3,40,JFY=(SHIFT=LEFT))),
IFTHEN=(WHEN=(03,40,CH,EQ,C' '),OVERLAY=(1:+0,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(03,01,CH,GT,C' ',AND,04,39,CH,EQ,C' '),
OVERLAY=(1:+01,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(04,01,CH,GT,C' ',AND,05,38,CH,EQ,C' '),
OVERLAY=(1:+02,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(05,01,CH,GT,C' ',AND,06,37,CH,EQ,C' '),
OVERLAY=(1:+03,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(06,01,CH,GT,C' ',AND,07,36,CH,EQ,C' '),
OVERLAY=(1:+04,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(07,01,CH,GT,C' ',AND,08,35,CH,EQ,C' '),
OVERLAY=(1:+05,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(08,01,CH,GT,C' ',AND,09,34,CH,EQ,C' '),
OVERLAY=(1:+06,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(09,01,CH,GT,C' ',AND,10,33,CH,EQ,C' '),
OVERLAY=(1:+07,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(10,01,CH,GT,C' ',AND,11,32,CH,EQ,C' '),
OVERLAY=(1:+08,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(11,01,CH,GT,C' ',AND,12,31,CH,EQ,C' '),
OVERLAY=(1:+09,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(12,01,CH,GT,C' ',AND,13,30,CH,EQ,C' '),
OVERLAY=(1:+10,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(13,01,CH,GT,C' ',AND,14,29,CH,EQ,C' '),
OVERLAY=(1:+11,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(14,01,CH,GT,C' ',AND,15,28,CH,EQ,C' '),
OVERLAY=(1:+12,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(15,01,CH,GT,C' ',AND,16,27,CH,EQ,C' '),
OVERLAY=(1:+13,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(16,01,CH,GT,C' ',AND,17,26,CH,EQ,C' '),
OVERLAY=(1:+14,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(17,01,CH,GT,C' ',AND,18,25,CH,EQ,C' '),
OVERLAY=(1:+15,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(18,01,CH,GT,C' ',AND,19,24,CH,EQ,C' '),
OVERLAY=(1:+16,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(19,01,CH,GT,C' ',AND,20,23,CH,EQ,C' '),
OVERLAY=(1:+17,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(20,01,CH,GT,C' ',AND,21,22,CH,EQ,C' '),
OVERLAY=(1:+18,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(21,01,CH,GT,C' ',AND,22,21,CH,EQ,C' '),
OVERLAY=(1:+19,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(22,01,CH,GT,C' ',AND,23,20,CH,EQ,C' '),
OVERLAY=(1:+20,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(23,01,CH,GT,C' ',AND,24,19,CH,EQ,C' '),
OVERLAY=(1:+21,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(24,01,CH,GT,C' ',AND,25,18,CH,EQ,C' '),
OVERLAY=(1:+22,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(25,01,CH,GT,C' ',AND,26,17,CH,EQ,C' '),
OVERLAY=(1:+23,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(26,01,CH,GT,C' ',AND,27,16,CH,EQ,C' '),
OVERLAY=(1:+24,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(27,01,CH,GT,C' ',AND,28,15,CH,EQ,C' '),
OVERLAY=(1:+25,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(28,01,CH,GT,C' ',AND,29,14,CH,EQ,C' '),
OVERLAY=(1:+26,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(29,01,CH,GT,C' ',AND,30,13,CH,EQ,C' '),
OVERLAY=(1:+27,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(30,01,CH,GT,C' ',AND,31,12,CH,EQ,C' '),
OVERLAY=(1:+28,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(31,01,CH,GT,C' ',AND,32,11,CH,EQ,C' '),
OVERLAY=(1:+29,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(32,01,CH,GT,C' ',AND,33,10,CH,EQ,C' '),
OVERLAY=(1:+30,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(33,01,CH,GT,C' ',AND,34,09,CH,EQ,C' '),
OVERLAY=(1:+31,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(34,01,CH,GT,C' ',AND,35,08,CH,EQ,C' '),
OVERLAY=(1:+32,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(35,01,CH,GT,C' ',AND,36,07,CH,EQ,C' '),
OVERLAY=(1:+33,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(36,01,CH,GT,C' ',AND,37,06,CH,EQ,C' '),
OVERLAY=(1:+34,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(37,01,CH,GT,C' ',AND,38,05,CH,EQ,C' '),
OVERLAY=(1:+35,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(38,01,CH,GT,C' ',AND,39,04,CH,EQ,C' '),
OVERLAY=(1:+36,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(39,01,CH,GT,C' ',AND,40,03,CH,EQ,C' '),
OVERLAY=(1:+37,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(40,01,CH,GT,C' ',AND,41,02,CH,EQ,C' '),
OVERLAY=(1:+38,TO=BI,LENGTH=2)),
IFTHEN=(WHEN=(41,01,CH,GT,C' ',AND,42,01,CH,EQ,C' '),
OVERLAY=(1:+39,TO=BI,LENGTH=2))
//*
_________________ Kolusu
www.linkedin.com/in/kolusu
Back to top
kolusu Site Admin Joined: 26 Nov 2002 Posts: 12378 Topics: 75 Location: San Jose
Posted: Wed Apr 25, 2012 12:26 pm Post subject:
Anuj Dhawan wrote: Try: Code: //SHOWLEN EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=... input file (VB)
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
OUTREC BUILD=(1,4,1,2,BI,C':',5)
/*
Anuj,
You totally misunderstood the requirement. OP does NOT have a variable block file. He has DB2 Varchar column in a FB file. And he needs to update the length portion of the VARCHAR column while removing the leading zeroes from the actual content. _________________ Kolusu
www.linkedin.com/in/kolusu
Back to top
Anuj Dhawan Intermediate Joined: 19 Jul 2007 Posts: 298 Topics: 7 Location: Mumbai,India
Posted: Thu Apr 26, 2012 4:43 am Post subject:
If it is so, yes, I misunderstood... _________________ Regards,
Anuj
Back to top
vijayakumar Beginner Joined: 28 Jul 2006 Posts: 17 Topics: 9
Posted: Fri Apr 27, 2012 12:47 pm Post subject:
Thanks kolusu..
Back to top
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum