Quantcast
Channel: IBM Mainframe Computers Forums
Viewing all articles
Browse latest Browse all 8500

DFSORT/ICETOOL :: RE: compare 2 records in seq. file & report differences

$
0
0
Author: rajatbagga
Subject: Re: Reply to: compare 2 records in seq. file & report differ
Posted: Tue Sep 20, 2016 10:50 am (GMT 5.5)

Skolusu wrote:
dr.ostman,

Here is DFSORT/ICETOOL Job which will give the desired results. However there are certain limitations for the job.

1. We can compare upto a max lrecl of 9999.
2. Input files are are always FB (no variable block files)

You need to supply the LRECL of the file to be compared via SYMNAMES DD.
Code:

//SYMNAMES DD *
LRECL,+nnnn


The range of n is from +1 to +4096.

Once you supply the LRECL in STEP0100 of the job it automatically builds the control cards on the fly and the actual compare is done in step0200 using the dynamic control cards created in step0100.

Code:

//STEP0100 EXEC PGM=ICETOOL
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYMNAMES DD *
LRECL,+0080
//IN       DD *
DUMMY RECORD
//C1       DD DSN=&&C1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//C2       DD DSN=&&C2,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//C3       DD DSN=&&C3,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//C5       DD DSN=&&C5,DISP=(,PASS),SPACE=(CYL,(5,5),RLSE)
//T1       DD DSN=&&T1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T2       DD DSN=&&T2,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//TOOLIN   DD *
  COPY FROM(IN) USING(CTL1)
  COPY FROM(IN) USING(CTL2)
//CTL1CNTL DD *
  SORT FIELDS=COPY
  OUTREC FIELDS=(+0,ADD,LRECL,ZD,LENGTH=4,X,
                 +1,ADD,(+0,MUL,LRECL),ZD,LENGTH=4,X,
                 +1,ADD,LRECL,ZD,LENGTH=4,X,
                 +1,ADD,(+2,MUL,LRECL),ZD,LENGTH=4,80:X)

  OUTFIL FNAMES=T1,
  BUILD=(C'SPLICE FROM(IN) TO(M1) WITHEACH  ON(',16,4,
         C',08,CH) - ',/,
         C'WITH(',11,4,C',',1,4,
         C') KEEPNODUPS USING(CTL1)',/,
         C'COPY FROM(M1) TO(OUT) USING(CTL2)',80:X)

  OUTFIL FNAMES=T2,
  BUILD=(C' OUTFIL FNAMES=OUT,IFOUTLEN=',1,4,C',',/,
         C' IFTHEN=(WHEN=(',16,4,C',',1,4,
         C',CH,EQ,C',C'''',X,C'''',
         C'),BUILD=(01,',1,4,C',/,',
         11,4,C',',1,4,C')),',/,
         C' IFTHEN=(WHEN=NONE,BUILD=(01,',
         1,4,C',/,',16,4,C',',1,4,C',/,',11,4,C',',1,4,
         C'))',80:X)

  OUTFIL FNAMES=C1,
         BUILD=(C' INREC IFTHEN=(WHEN=INIT,',/,
                5X,C'OVERLAY=(',16,4,
                C':SEQNUM,8,ZD,START=2,INCR=1,',/,
                14X,+8,ADD,16,4,ZD,EDIT=(TTTT),
                C':',16,4,C',8,ZD,MOD,+2,TO=ZD,LENGTH=1)),',/,
                4X,C'IFTHEN=(WHEN=(',
                +8,ADD,16,4,ZD,EDIT=(TTTT),
                C',1,ZD,EQ,01),',/,
                5X,C'BUILD=(',11,4,C':01,',1,4,C',',
                16,4,C':',16,4,
                C',8,ZD,SUB,',
                +8,ADD,16,4,ZD,EDIT=(TTTT),
                C',1,ZD,M11,LENGTH=8))',80:X)

  OUTFIL FNAMES=C2,
         BUILD=(C' OUTFIL FNAMES=M1,',/,
                C' IFTHEN=(WHEN=INIT,OVERLAY=(',16,4,C':',
                1,4,C'X)),',80:X)

  OUTFIL FNAMES=C3,
         BUILD=(C' IFTHEN=(WHEN=(1,1,CH,NE,1,1,CH),',
                C'OVERLAY=(1:1,1))',80:X)

  OUTFIL FNAMES=CTL2CNTL,
         BUILD=(C' OPTION COPY,STOPAFT=1',/,
                C' OUTFIL FNAMES=C5,REPEAT=',1,4,C',',/,
                C' OUTREC=(C''',
                C' IFTHEN=(WHEN=(',C'''',C',',
                C'SEQNUM,4,ZD,START=',6,4,C',',72:C'*',/,
                9X,C'C''',C',1,CH,NE,',C'''',C',',
                C'SEQNUM,4,ZD,START=',11,4,C',',72:C'*',/,
                9X,C'C''',C',1,CH),OVERLAY=(',C'''',C',',
                C'SEQNUM,4,ZD,START=',16,4,C',',72:C'*',/,
                9X,C'C''',C':C',C'''',C',C',4C'''',C',C',
                C'''',C'+',C'''',C',C',4C'''',C',C',
                C'''',C'),HIT=NEXT),',C'''',C',80:X)',80:X)
/*
//CTL2CNTL DD DSN=&&C4,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
/*
//STEP0200 EXEC PGM=ICETOOL
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//IN       DD DSN=YOUR INPUT FILE,
//            DISP=SHR
//M1       DD DSN=&&M1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//OUT      DD SYSOUT=*
//TOOLIN   DD DSN=&&T1,DISP=SHR
//CTL1CNTL DD DSN=&&C1,DISP=SHR
//         DD DSN=&&C2,DISP=SHR
//         DD DSN=&&C5,DISP=SHR
//         DD DSN=&&C3,DISP=SHR
//CTL2CNTL DD DSN=&&T2,DISP=SHR
/*



Hello Skolusu, I know it's been a while now, but is the above code still valid.. I tried to run it for 380 LRECL but it failed at STEP0200 giving


Code:
ICE000I 0 - CONTROL STATEMENTS FOR 5650-ZOS, Z/OS DFSORT V2R1  - 15:08 ON TUE SE
           OUTFIL FNAMES=OUT,IFOUTLEN=0380,                                     
           IFTHEN=(WHEN=(0761,0380,CH,EQ,C' '),BUILD=(01,0380,/,0381,0380)),   
           IFTHEN=(WHEN=NONE,BUILD=(01,0380,/,0761,0380,/,0381,0380))           
ICE146I 0 END OF STATEMENTS FROM CTL2CNTL - PARAMETER LIST STATEMENTS FOLLOW   
          DEBUG NOABEND,ESTAE                                                   
          OPTION MSGDDN=DFSMSG,LIST,MSGPRT=ALL,RESINV=0,SORTDD=CTL2,SORTIN=M1,SO
                         TOUT=OUT,DYNALLOC                                     
          SORT FIELDS=COPY                                                     
ICE221A 1 INVALID FIELD OR CONSTANT IN OUT      IFTHEN 1 CONDITION 1           


Regards,
Rajat


Viewing all articles
Browse latest Browse all 8500

Trending Articles