Syncsort Match-Merge, OVERLAY based on condition



Support for NetApp SyncSort for z/OS, Visual SyncSort, SYNCINIT, SYNCLIST and SYNCTOOL

Syncsort Match-Merge, OVERLAY based on condition

Postby anil4321 » Thu Mar 19, 2009 8:49 pm

I have two VB files that I am trying to perform a match merge. IN File1 has RECFM=VB, LRECL=31996 and File2 has RECFM=VB,
LRECL=31996. File1 has the key in positions 6-10, and File2 has the key in positions 13-17. Both files contain binary data.

Key in File1 is unsigned packed with size 4.5, and starts at position 5.5. Key is File2 has the same property and starts at position 12.5. Since I don't know how to skip half byte, I am using my key

Position that I want to overlay in OUT1 starts in position 133 and has a size of 1. I want to replace this position with X'AA' in the output file that contains records of file1 only.

I am receiving syntax error while overlaying:
OUTFIL FNAMES=OUT1,
IFTHEN=(WHEN=(5,2,CH,EQ,C'BB',&,246,2,BI,EQ,X'AA'),
OVERLAY=(246:X'BB')),
IFTHEN=(WHEN=(5,2,CH,EQ,C'BB'),BUILD=(1,4,14))


Here is my JCL:
//MATCH EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//*************************************************************
//* UNLOAD FILE FOR THIS WEEKS DATA
//*************************************************************
//IN1 DD DSN=MYID.MYJOB.F011.@PREV,DISP=SHR
//*************************************************************
//* UNLOAD FILE FOR PREVIOUS WEEKS DATA
//*************************************************************
//IN2 DD DSN=MYID.MYJOB.NODE3.@CURR.LAFFENT,DISP=SHR
//T1 DD DSN=MYID.MATCH70.T1,
// SPACE=(&ALLOC,(&PQTY,&SQTY)),UNIT=(,&VOL),
// DISP=(MOD,PASS)
//*************************************************************
//* MATCH RECORDS BASED ON TIN+MFT+TAXPERIOD(YYYYMM)
//*************************************************************
//MATCHING DD DSN=MYID.MATCH70.OUT12,
// SPACE=(&ALLOC,(10,20),RLSE),
// UNIT=(,32),
// DISP=(,CATLG,DELETE)
//*************************************************************
//* NUMBER OF MATCHING RECORDS
//*************************************************************
//CT12 DD DSN=MYID.MATCH70.CT12,
// SPACE=(&ALLOC,(10,20),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//*************************************************************
//* RECORDS ONLY IN CURRENT WEEK. RECORDS THAT ARE NOT COMMON
//* WITH PREVIOUS WEEK DATA.
//* RECORDS COUNT IN CURRENT WEEK ONLY.
//*************************************************************
//OUT1 DD DSN=MYID.MATCH70.OUT1,
// SPACE=(&ALLOC,(10,20),RLSE),
// UNIT=(,32),
// DISP=(,CATLG,DELETE)
//CT1 DD DSN=MYID.MATCH70.CT1,
// SPACE=(TRK,(1,1),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//*************************************************************
//* RECORDS ONLY IN PREVIOUS WEEK
//*************************************************************
//OUT2 DD DSN=MYID.MATCH70.OUT2,
// SPACE=(&ALLOC,(10,20),RLSE),
// UNIT=(,32),
// DISP=(,CATLG,DELETE)
//*************************************************************
//* ENTITY CHANGE RECORD COUNT IN THIS WEEK
//*************************************************************
//OUTENT DD DSN=MYID.MATCH70.OUTENT,
// SPACE=(TRK,(1,1),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//ALLENT DD DSN=MYID.MATCH70.ALLENT,
// SPACE=(&ALLOC,(150,10),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//CT2 DD DSN=MYID.MATCH70.CT2,
// SPACE=(TRK,(1,1),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//KEY1 DD DSN=MYID.MATCH70.KEY1,
// SPACE=(&ALLOC,(1,1),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//KEY2 DD DSN=MYID.MATCH70.KEY2,
// SPACE=(&ALLOC,(1,1),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//KEY3 DD DSN=MYID.MATCH70.KEY3,
// SPACE=(&ALLOC,(1,1),RLSE),
// UNIT=SYSDA,
// DISP=(,CATLG,DELETE)
//****************************************************************
//* File1 has RECFM=VB, LRECL=31996 and no duplicates, and File2 has RECFM=VB,
//* LRECL=31996 and duplicates. File1 has the key in positions 6-10,
//* and File2 has the key in positions 13-17.
//****************************************************************
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL1)
COPY FROM(IN2) TO(T1) USING(CTL2)
SPLICE FROM(T1) TO(MATCHING) ON(19,5,BI) WITH(5,1) -
USING(CTL3) KEEPNODUPS VLENOVLY
/*
//CTL1CNTL DD *
INREC BUILD=(1,4,5:C'BB',14:5)
/*
//CTL2CNTL DD *
INREC BUILD=(1,4,5:C'VV',7:5)
/*
//*IFTHEN=(WHEN=(5,2,CH,EQ,C'BB'),BUILD=(1,4,14))
//* OVERLAY=(246:X'00'))
BUILD=(1,4,246,4)
//CTL3CNTL DD *
OUTFIL FNAMES=MATCHING,INCLUDE=(5,2,CH,EQ,C'VB'),BUILD=(1,4,14)

**************************************************************
* Reformat the OUT1 data set. If Position 233 contains X'AA',
* replace with X'00'.
**************************************************************
OUTFIL FNAMES=OUT1,
IFTHEN=(WHEN=(5,2,CH,EQ,C'BB',&,246,2,BI,EQ,X'AA'),
OVERLAY=(246:X'BB')),
IFTHEN=(WHEN=(5,2,CH,EQ,C'BB'),BUILD=(1,4,14))




OUTFIL FNAMES=OUT2,INCLUDE=(5,2,CH,EQ,C'VV'),BUILD=(1,4,14)
OUTFIL FNAMES=ALLENT,BUILD=(1,4,5)
OUTFIL FNAMES=KEY1,INCLUDE=(5,2,CH,EQ,C'BB',&,246,2,BI,EQ,X'AA'),
OVERLAY=(246:X'BB')
OUTFIL FNAMES=KEY2,INCLUDE=(5,2,CH,EQ,C'VB'),BUILD=(1,4,5,20)
OUTFIL FNAMES=KEY3,INCLUDE=(5,2,CH,EQ,C'VV'),BUILD=(1,4,5,20)
OUTFIL FNAMES=CT12,INCLUDE=(5,2,CH,EQ,C'VB'),
REMOVECC,NODETAIL,
TRAILER1=(COUNT=(M10,LENGTH=10))
OUTFIL FNAMES=CT1,INCLUDE=(5,2,CH,EQ,C'BB'),
REMOVECC,NODETAIL,
TRAILER1=(COUNT=(M10,LENGTH=10))
OUTFIL FNAMES=CT2,INCLUDE=(5,2,CH,EQ,C'VV'),
REMOVECC,NODETAIL,
TRAILER1=(COUNT=(M10,LENGTH=10))
/*
anil4321
 
Posts: 11
Joined: Wed Nov 19, 2008 4:23 am
Has thanked: 0 time
Been thanked: 0 time

Re: ICETOOL Match-Merge, OVERLAY based on condition

Postby Frank Yaeger » Thu Mar 19, 2009 11:17 pm

Please show the //TOOLMSG and //DFSMSG messages you received.

Please show an example of the records in each input file and what you expect for output.
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort
User avatar
Frank Yaeger
Global moderator
 
Posts: 1079
Joined: Sat Jun 09, 2007 8:44 pm
Has thanked: 0 time
Been thanked: 15 times

Re: ICETOOL Match-Merge, OVERLAY based on condition

Postby anil4321 » Fri Mar 20, 2009 2:03 am

I made some changes to INREC and it seems working, but, one thing that can not figure out is to combine with the half byte key.

Now I changed the
//CTL1CNTL DD *
   INREC BUILD=(1,4,5:C'BB',14:5)

to

//CTL1CNTL DD *
   INREC IFTHEN=(WHEN=(5,2,CH,EQ,C'BB',&,246,2,BI,EQ,X'AA'),
         BUILD=(1,4,5:C'BB',14:5,232,246:X'AA',247)),
         IFTHEN=(WHEN=NONE,BUILD=(1,4,5:C'BB',14:5))
/*

and
OUTFIL FNAMES=OUT1,INCLUDE=(5,2,CH,EQ,C'VV'),BUILD=(1,4,14)

and it seems working with the OVERLAY.

Here is the message:

Hex Part of Input File1:

DAMRO....ë.......o.á.Ø............Èè
CCDDD0000500020109040830000002003175
414960111300005216057027000021030244

Hex Part of Input File2:
PEXX..DSMASO............à.c.Øâ..........k.ßÍ
DCEE00CEDCED01111000201040808400000010009157
75770442412611111000082240380250000210372295

TOOLMSG:
 SYT002I  "TOOLIN" INTERFACE BEING USED                                                                                 
                                                                                                                       
            COPY FROM(IN1) TO(T1) USING(CTL1)                                                                           
 SYT020I  SYNCSORT CALLED WITH IDENTIFIER "0001"                                                                       
 SYT030I  OPERATION COMPLETED WITH RETURN CODE 0                                                                       
                                                                                                                       
            COPY FROM(IN2) TO(T1) USING(CTL2)                                                                           
 SYT020I  SYNCSORT CALLED WITH IDENTIFIER "0002"                                                                       
 SYT030I  OPERATION COMPLETED WITH RETURN CODE 0                                                                       
                                                                                                                       
            SPLICE FROM(T1) TO(MATCHING) ON(19,5,BI) WITH(5,1) -                                                       
            USING(CTL3) KEEPNODUPS VLENOVLY                                                                             
 SYT020I  SYNCSORT CALLED WITH IDENTIFIER "0003"                                                                       
 SYT031I  NUMBER OF RECORDS PROCESSED: 000000000025895                                                                 
 SYT026I  NUMBER OF SELECTED RECORDS: 000000000025879                                                                   
 SYT030I  OPERATION COMPLETED WITH RETURN CODE 0                                                                       
                                                                                                                       
 SYT004I  SYNCTOOL PROCESSING COMPLETED WITH RETURN CODE 0             


  CTL1CNTL :                                                                                                           
     INREC IFTHEN=(WHEN=(5,2,CH,EQ,C'BB',&,246,2,BI,EQ,X'AA'),                                                         
           BUILD=(1,4,5:C'BB',14:5,232,246:X'AA',247)),                                                                 
           IFTHEN=(WHEN=NONE,BUILD=(1,4,5:C'BB',14:5))                                                                 
  PARMLIST :                                                                                                           
  OPTION RESINV=0,ARESINV=0,MSGDDN=DFSMSG,SORTIN=IN1,SORTOUT=T1,SORTDD=CTL1,COPY                                       
  WER428I  CALLER-PROVIDED IDENTIFIER IS "0001"                                                                         
  WER108I  IN1      : RECFM=VB   ; LRECL= 31996; BLKSIZE= 32760                                                         
  WER257I  INREC RECORD LENGTH = 32005                                                                                 
  WER238I  POTENTIALLY INEFFICIENT USE OF INREC                                                                         
  WER110I  T1       : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER054I  RCD IN      25878, OUT      25878                                                                           
  WER169I  RELEASE 1.3 BATCH 0488 TPF LEVEL 0.2                                                                         
  WER052I  END SYNCSORT - CAB55ENT,S5,,DIAG=CE00,510C,E286,00EE,866A,6883,A688,CE62   


  CTL2CNTL :                                                                                                           
    INREC BUILD=(1,4,5:C'VV',7:5)                                                                                       
  PARMLIST :                                                                                                           
  OPTION RESINV=0,ARESINV=0,MSGDDN=DFSMSG,SORTIN=IN2,SORTOUT=T1,SORTDD=CTL2,COPY                                       
  WER428I  CALLER-PROVIDED IDENTIFIER IS "0002"                                                                         
  WER108I  IN2      : RECFM=VB   ; LRECL= 31996; BLKSIZE= 32000                                                         
  WER257I  INREC RECORD LENGTH = 31998                                                                                 
  WER238I  POTENTIALLY INEFFICIENT USE OF INREC                                                                         
  WER110I  T1       : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER462I  OUTPUT LRECL DIFFERS FROM SORTOUT LRECL                                                                     
  WER054I  RCD IN         17, OUT         17                                                                           
  WER169I  RELEASE 1.3 BATCH 0488 TPF LEVEL 0.2                                                                         
  WER052I  END SYNCSORT - CAB55ENT,S5,,DIAG=8000,53C8,A886,00E4,C86A,6CE3,AA88,2E62               


  CTL3CNTL :                                                                                                           
    OUTFIL FNAMES=MATCHING,INCLUDE=(5,2,CH,EQ,C'VB'),BUILD=(1,4,14)                                                     
    OUTFIL FNAMES=OUT1,BUILD=(1,4,14)                                                                                   
    OUTFIL FNAMES=OUT2,INCLUDE=(5,2,CH,EQ,C'VV'),BUILD=(1,4,14)                                                         
    OUTFIL FNAMES=ALLENT,BUILD=(1,4,5)                                                                                 
    OUTFIL FNAMES=KEY1,INCLUDE=(5,2,CH,EQ,C'BB',&,246,2,BI,EQ,X'AA'),                                                   
    BUILD=(1,4,5)                                                                                                       
    OUTFIL FNAMES=KEY2,INCLUDE=(5,2,CH,EQ,C'VB'),BUILD=(1,4,5,20)                                                       
    OUTFIL FNAMES=KEY3,INCLUDE=(5,2,CH,EQ,C'VV'),BUILD=(1,4,5,20)                                                       
    OUTFIL FNAMES=CT12,INCLUDE=(5,2,CH,EQ,C'VB'),                                                                       
    REMOVECC,NODETAIL,                                                                                                 
    TRAILER1=(COUNT=(M10,LENGTH=10))                                                                                   
    OUTFIL FNAMES=CT1,INCLUDE=(5,2,CH,EQ,C'BB'),                                                                       
    REMOVECC,NODETAIL,                                                                                                 
    TRAILER1=(COUNT=(M10,LENGTH=10))                                                                                   
    OUTFIL FNAMES=CT2,INCLUDE=(5,2,CH,EQ,C'VV'),                                                                       
    REMOVECC,NODETAIL,                                                                                                 
    TRAILER1=(COUNT=(M10,LENGTH=10))                                                                                   
  PARMLIST :                                                                                                           
  OPTION RESINV=0,ARESINV=0,MSGDDN=DFSMSG,SORTIN=T1,SORTDD=CTL3,SORTOUT=MATCHING,D                                     
  YNALLOC,CMP=CLC,NOVLSHRT,EQUALS                                                                                       
  SORT FIELDS=(00019,0005,BI,A)                                                                                         
  MODS E35=(SYNCT#35,4096,,N)                                                                                           
  WER428I  CALLER-PROVIDED IDENTIFIER IS "0003"                                                                         
  WER108I  T1       : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER110I  MATCHING : RECFM=VB   ; LRECL= 31996; BLKSIZE= 32000                                                         
  WER110I  OUT1     : RECFM=VB   ; LRECL= 31996; BLKSIZE= 32000                                                         
  WER110I  OUT2     : RECFM=VB   ; LRECL= 31996; BLKSIZE= 32000                                                         
  WER110I  ALLENT   : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER110I  KEY1     : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER110I  KEY2     : RECFM=VB   ; LRECL=    24; BLKSIZE= 27998                                                         
  WER110I  KEY3     : RECFM=VB   ; LRECL=    24; BLKSIZE= 27998                                                         
  WER110I  CT12     : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER110I  CT1      : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER110I  CT2      : RECFM=VB   ; LRECL= 32005; BLKSIZE= 32009                                                         
  WER045C  END SORT PHASE                                                                                               
  WER493I  ZIIP PROCESSOR USED                                                                                         
  WER055I  INSERT      25879, DELETE      25895                                                                         
  WER418I  DATASPACE(S) AND/OR HIPERSPACE(S) USED                                                                       
  WER405I  MATCHING :  DATA RECORDS OUT         16; TOTAL RECORDS OUT         16                                       
  WER405I  OUT1     :  DATA RECORDS OUT      25879; TOTAL RECORDS OUT      25879                                       
  WER405I  OUT2     :  DATA RECORDS OUT          1; TOTAL RECORDS OUT          1                                       
  WER405I  ALLENT   :  DATA RECORDS OUT      25879; TOTAL RECORDS OUT      25879                                       
  WER405I  KEY1     :  DATA RECORDS OUT          2; TOTAL RECORDS OUT          2                                       
  WER405I  KEY2     :  DATA RECORDS OUT         16; TOTAL RECORDS OUT         16                                       
  WER405I  KEY3     :  DATA RECORDS OUT          1; TOTAL RECORDS OUT          1                                       
  WER405I  CT12     :  DATA RECORDS OUT          0; TOTAL RECORDS OUT          1                                       
  WER405I  CT1      :  DATA RECORDS OUT          0; TOTAL RECORDS OUT          1                                       
  WER405I  CT2      :  DATA RECORDS OUT          0; TOTAL RECORDS OUT          1                                       
  WER246I  FILESIZE 21,074,859 BYTES                                                                                   
  WER054I  RCD IN      25895, OUT      25879                                                                           
  WER072I  EQUALS, BALANCE IN EFFECT                                                                                   
  WER169I  RELEASE 1.3 BATCH 0488 TPF LEVEL 0.2
anil4321
 
Posts: 11
Joined: Wed Nov 19, 2008 4:23 am
Has thanked: 0 time
Been thanked: 0 time

Re: ICETOOL Match-Merge, OVERLAY based on condition

Postby dick scherrer » Fri Mar 20, 2009 2:26 am

Hello,

You are using Syncsort rather than DFSORT.

I'll move your topic to the Syncsort part of the forum.
Hope this helps,
d.sch.
User avatar
dick scherrer
Global moderator
 
Posts: 6268
Joined: Sat Jun 09, 2007 8:58 am
Has thanked: 3 times
Been thanked: 93 times

Re: Syncsort Match-Merge, OVERLAY based on condition

Postby anil4321 » Sat Mar 21, 2009 6:22 pm

Key in File1 is unsigned packed with size 4.5, and starts at position 5.5. Key is File2 has the same property and starts at position 12.5. Since I don't know how to skip half byte, I am using my key. Is there any way I can use the right key instead of using an extra half byte?

Hex Part of Input File1:

DAMRO....ë.......o.á.Ø............Èè
CCDDD0000500020109040830000002003175
414960111300005216057027000021030244

Here my key is 101010350.

Hex Part of Input File2:
PEXX..DSMASO............à.c.Øâ..........k.ßÍ
DCEE00CEDCED01111000201040808400000010009157
75770442412611111000082240380250000210372295

I thought ICETOOL is part of DFSORT.
anil4321
 
Posts: 11
Joined: Wed Nov 19, 2008 4:23 am
Has thanked: 0 time
Been thanked: 0 time

Re: Syncsort Match-Merge, OVERLAY based on condition

Postby Frank Yaeger » Sat Mar 21, 2009 11:15 pm

I thought ICETOOL is part of DFSORT.


ICETOOL is part of DFSORT. But since you're using Syncsort, you're using Syncsort's SYNCTOOL, not DFSORT's ICETOOL.
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort
User avatar
Frank Yaeger
Global moderator
 
Posts: 1079
Joined: Sat Jun 09, 2007 8:44 pm
Has thanked: 0 time
Been thanked: 15 times

Re: Syncsort Match-Merge, OVERLAY based on condition

Postby dick scherrer » Sat Mar 21, 2009 11:36 pm

Hello,

First - suggest you practice with the "Code" tag - it makes for better readability as well as preserves alignment ;)
I thought ICETOOL is part of DFSORT.
It is. . . It is also an alias for Synctool on systems that use Syncsort.

"Real" packed decimal fields have a sign that is a c, d, or f. If the field does not have a sign, it is not packed decimal. Is there the possibility that your "key" would ever have anything other than zero in the high-order nibble of the low-order byte?

To simply sort FILE1 by your sort key you might use something like:
  SORT FIELDS=(5.4,.36,BI,A)   -   36 bits is 4.5 bytes

or
  SORT FIELDS=(5.4,4.4,BI,A)   -   4.4 is 4 bytes and 4 bits

This isn't tested, but the sort products support bit notation.

Suggest you look in the documentation for your release of Syncsort for processing using bits.
Hope this helps,
d.sch.
User avatar
dick scherrer
Global moderator
 
Posts: 6268
Joined: Sat Jun 09, 2007 8:58 am
Has thanked: 3 times
Been thanked: 93 times


Return to Syncsort/Synctool

 


  • Related topics
    Replies
    Views
    Last post