I used the following jcl and getting the correct results.
I feel the Sort JCL I used can be simplified to achieve the results in a better way. Appreciate if someone can help me to simplify the sort.
Also I would like to know is there any way to replace all non-blanks character value with 0 other than using ALTSEQ. I am not sure whether FINDREP can be used to replace all non-blank characters with 0 in a simple way rather than specifying each non-blank character in the INOUT list.
Code: Select all
//STEP018 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
AA1BB2CC2DD3EE4FF5ZZZYY2
DE2XB3ZZZMM4D13MESKLMJKG
HGFZZZUIYHMNOJYUAABBCRTM
GHHHHHHHHUUUUUULLLMZHHHZ
//*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
ALTSEQ CODE=(C1F1,C2F1,C3F1,C4F1,C5F1,C6F1,C7F1,C8F1,C9F1,
D1F1,D2F1,D3F1,D4F1,D5F1,D6F1,D7F1,D8F1,D9F1,
E2F1,E3F1,E4F1,E5F1,E6F1,E7F1,E8F1,E9F1,F0F1,
F2F1,F3F1,F4F1,F5F1,F6F1,F7F1,F8F1,F9F1,40F0,E9F1)
INREC IFTHEN=(WHEN=INIT,
PARSE=(%01=(ENDBEFR=C'ZZZ',FIXLEN=25),
%02=(SUBPOS=3,FIXLEN=25)),
BUILD=(%01,TRAN=ALTSEQ,%01,%02))
OUTFIL IFTHEN=(WHEN=(26,50,SS,EQ,C'ZZZ'),
BUILD=(26,50,SQZ=(SHIFT=LEFT,PREBLANK=C' '),C',',
1,1,FS,ADD,2,1,FS,ADD,3,1,FS,ADD,4,1,FS,ADD,5,1,FS,ADD,
6,1,FS,ADD,7,1,FS,ADD,8,1,FS,ADD,9,1,FS,ADD,10,1,FS,ADD,
11,1,FS,ADD,12,1,FS,ADD,13,1,FS,ADD,14,1,FS,ADD,15,1,FS,ADD,
16,1,FS,ADD,17,1,FS,ADD,18,1,FS,ADD,19,1,FS,ADD,20,1,FS,ADD,
21,1,FS,ADD,22,1,FS,ADD,23,1,FS,ADD,24,1,FS,ADD,25,1,FS,
ADD,+1,
TO=FS,LENGTH=3,80:X)),
IFTHEN=(WHEN=NONE,
BUILD=(26,50,SQZ=(SHIFT=LEFT,PREBLANK=C' '),C',',
+0,TO=FS,LENGTH=3,80:X))
Code: Select all
AA1BB2CC2DD3EE4FF5ZZZYY2 ,+19
DE2XB3ZZZMM4D13MESKLMJKG , +7
HGFZZZUIYHMNOJYUAABBCRTM , +4
GHHHHHHHHUUUUUULLLMZHHHZ , 0