MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Match valid adresses from 2 files using DFSORT

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities
View previous topic :: View next topic  
Author Message
Rhys from Stuttgart
Beginner


Joined: 07 Dec 2020
Posts: 2
Topics: 1
Location: Stuttgart

PostPosted: Tue Dec 08, 2020 5:51 am    Post subject: Match valid adresses from 2 files using DFSORT Reply with quote

I've two datasets:

First Dataset with adresses
Code:

//*      1         2         3         4         5
//* +----0----+----0----+----0----+----0----+----0
//IN1      DD *                                   
STUTTGART           DROSSELWEG 326A               
STUTTGART           MEISENGASSE 4711C             
STUTTGART           MEISENGASSE 0815             
MÃœNCHEN             STARENSTRASSE 1234           
MÃœNCHEN             AM KORMORANSEE 13-15         
MÃœNCHEN             FLAMINGO ROAD 1               
TRIER               BUSSARD STEIGE 49             
FRANKFURT           ZUR FINKENWIESE 12           
FRANKFURT           ELSTERGASSE B52               
HAMBURG             ADLERHORST 23                 
BERLIN              KOLIBRI HIN UND WEG           
/*                                               


Second dataset with valid cities
Code:

//*      1         2         3         4         5
//* +----0----+----0----+----0----+----0----+----0
//IN2      DD *                                   
STUTTGART                                         
FRANKFURT                                         
DORTMUND                                         
HAMBURG                                           
BERLIN                                           
/*                                               


as result I want to have 3 datasets:

1. all adresses with valid cities (match)
Code:

STUTTGART           DROSSELWEG 326A               
STUTTGART           MEISENGASSE 4711C             
STUTTGART           MEISENGASSE 0815             
FRANKFURT           ZUR FINKENWIESE 12           
FRANKFURT           ELSTERGASSE B52               
HAMBURG             ADLERHORST 23                 
BERLIN              KOLIBRI HIN UND WEG           


2. all adresses without valid city (not in second dataset)
Code:

MÃœNCHEN             STARENSTRASSE 1234           
MÃœNCHEN             AM KORMORANSEE 13-15         
MÃœNCHEN             FLAMINGO ROAD 1               
TRIER               BUSSARD STEIGE 49             


3. all cities without adress (not in first dataset)
Code:

DORTMUND                                         


My first thought was the icetool with parameter splice:
Code:

//TOOLIN DD *                                                   
  COPY FROM(IN1) TO(WORK) USING(CTL1)                           
  COPY FROM(IN2) TO(WORK) USING(CTL2)                           
  SPLICE FROM(WORK) TO(MATCH)  -                               
           ON(1,20,CH)         -                               
         WITH(52,1)            -                               
         USING(CTL3)           -                               
         KEEPNODUPS                                             
//*                                                             
//CTL1CNTL DD *                                                 
  OUTREC FIELDS=(1,50,51:C'11')                                 
/*                                                             
//CTL2CNTL DD *                                                 
  OUTREC FIELDS=(1,50,51:C'22')                                 
/*                                                             
//CTL3CNTL DD *                                                 
  OUTFIL FNAMES=MATCH,INCLUDE=(51,2,CH,EQ,C'12'),OUTREC=(1,50) 
  OUTFIL FNAMES=NOTIN2,INCLUDE=(51,2,CH,EQ,C'11'),OUTREC=(1,50)
  OUTFIL FNAMES=NOTIN1,INCLUDE=(51,2,CH,EQ,C'22'),OUTREC=(1,50)
/*                                                             


But the result wasn't what i need:

Match:
Code:

 BROWSE    userid.FSS00050.ICESMPL.MATCH            Line 0000000000 Col 001 080
 Command ===>                                                  Scroll ===> CSR
********************************* Top of Data **********************************
BERLIN              KOLIBRI HIN UND WEG                                         
FRANKFURT           ZUR FINKENWIESE 12                                         
HAMBURG             ADLERHORST 23                                               
STUTTGART           DROSSELWEG 326A                                             
******************************** Bottom of Data ********************************


NotIn1:
Code:
 
 BROWSE    userid.FSS00050.ICESMPL.NOTIN1           Line 0000000000 Col 001 080
 Command ===>                                                  Scroll ===> CSR
********************************* Top of Data **********************************
DORTMUND                                                                       
******************************** Bottom of Data ********************************


NotIn2:
Code:

 BROWSE    userid.FSS00050.ICESMPL.NOTIN2           Line 0000000000 Col 001 080
 Command ===>                                                  Scroll ===> CSR
********************************* Top of Data **********************************
MÃœNCHEN             STARENSTRASSE 1234                                         
TRIER               BUSSARD STEIGE 49                                           
******************************** Bottom of Data ********************************


Is there a way to get the result with icetool?
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12369
Topics: 75
Location: San Jose

PostPosted: Tue Dec 08, 2020 7:06 am    Post subject: Reply with quote

Rhys from Stuttgart,

SPLICE is an older technique to match files. You can use Joinkeys which is much more powerful and easy to use.

There are a couple of DFSORT smart tricks which shows the usage of Joinkeys


    Join fields from two files on a key
    Join fields from two files record-by-record
    Cartesian join
    Create files with matching and non-matching records



Check this link

http://www-01.ibm.com/support/docview.wss?rs=114&uid=isg3T7000094

Here is a detailed explanation of Joinkeys.

https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.icea100/joinkeys.htm

Using the smart trick "Create files with matching and non-matching records " you can use the following DFSORT Joinkeys which would give you the results you need.

Code:

//STEP0100 EXEC PGM=SORT                                           
//SYSOUT   DD SYSOUT=*                                             
//INA      DD *                                                   
STUTTGART           DROSSELWEG 326A                               
STUTTGART           MEISENGASSE 4711C                             
STUTTGART           MEISENGASSE 0815                               
MÃœNCHEN             STARENSTRASSE 1234                             
MÃœNCHEN             AM KORMORANSEE 13-15                           
MÃœNCHEN             FLAMINGO ROAD 1                               
TRIER               BUSSARD STEIGE 49                             
FRANKFURT           ZUR FINKENWIESE 12                             
FRANKFURT           ELSTERGASSE B52                               
HAMBURG             ADLERHORST 23                                 
BERLIN              KOLIBRI HIN UND WEG                           
//INB      DD *                                                   
STUTTGART                                                         
FRANKFURT                                                         
DORTMUND                                                           
HAMBURG                                                           
BERLIN                                                             
//MATCH    DD SYSOUT=*                                             
//NOTIN1   DD SYSOUT=*                                             
//NOTIN2   DD SYSOUT=*                                             
//SYSIN    DD *                                                   
  OPTION COPY                                                     
  JOINKEYS F1=INA,FIELDS=(1,20,A)                                 
  JOINKEYS F2=INB,FIELDS=(1,20,A)                                 
  JOIN UNPAIRED                                                   
  REFORMAT FIELDS=(F1:1,50,F2:1,50,?)                             
  OUTFIL FNAMES=MATCH,INCLUDE=(101,1,CH,EQ,C'B'),BUILD=(01,50)     
  OUTFIL FNAMES=NOTIN1,INCLUDE=(101,1,CH,EQ,C'2'),BUILD=(51,50)   
  OUTFIL FNAMES=NOTIN2,INCLUDE=(101,1,CH,EQ,C'1'),BUILD=(01,50)   
/*


This will produce the following results.

MATCH
Code:

BERLIN              KOLIBRI HIN UND WEG     
FRANKFURT           ZUR FINKENWIESE 12     
FRANKFURT           ELSTERGASSE B52         
HAMBURG             ADLERHORST 23           
STUTTGART           DROSSELWEG 326A         
STUTTGART           MEISENGASSE 4711C       
STUTTGART           MEISENGASSE 0815       


NOTIN1
Code:

DORTMUND


NOTIN2
Code:

MÃœNCHEN             STARENSTRASSE 1234           
MÃœNCHEN             AM KORMORANSEE 13-15         
MÃœNCHEN             FLAMINGO ROAD 1               
TRIER               BUSSARD STEIGE 49   


However notice that the results are sorted on the key. If you need to retain the original order of the input dataset then you need to use the following Joinkeys job
Code:

//STEP0100 EXEC PGM=SORT                                         
//SYSOUT   DD SYSOUT=*                                           
//INA      DD *                                                 
STUTTGART           DROSSELWEG 326A                             
STUTTGART           MEISENGASSE 4711C                           
STUTTGART           MEISENGASSE 0815                             
MÃœNCHEN             STARENSTRASSE 1234                           
MÃœNCHEN             AM KORMORANSEE 13-15                         
MÃœNCHEN             FLAMINGO ROAD 1                             
TRIER               BUSSARD STEIGE 49                           
FRANKFURT           ZUR FINKENWIESE 12                           
FRANKFURT           ELSTERGASSE B52                             
HAMBURG             ADLERHORST 23                               
BERLIN              KOLIBRI HIN UND WEG                         
//INB      DD *                                                 
STUTTGART                                                       
FRANKFURT                                                       
DORTMUND                                                         
HAMBURG                                                         
BERLIN                                                           
//MATCH    DD SYSOUT=*                                           
//NOTIN1   DD SYSOUT=*                                           
//NOTIN2   DD SYSOUT=*                                           
//SYSIN    DD *                                                 
  JOINKEYS F1=INA,FIELDS=(1,20,A)                               
  JOINKEYS F2=INB,FIELDS=(1,20,A)                               
  JOIN UNPAIRED                                                 
  SORT FIELDS=(51,8,CH,A)                                       
  REFORMAT FIELDS=(F1:1,58,?,F2:1,50)                           
  OUTFIL FNAMES=MATCH,INCLUDE=(59,1,CH,EQ,C'B'),BUILD=(01,50)   
  OUTFIL FNAMES=NOTIN1,INCLUDE=(59,1,CH,EQ,C'2'),BUILD=(60,50)   
  OUTFIL FNAMES=NOTIN2,INCLUDE=(59,1,CH,EQ,C'1'),BUILD=(01,50)   
/*                                                               
//JNF1CNTL DD *                                                 
  INREC OVERLAY=(51:SEQNUM,8,ZD)                                 
/*


The Output of Match dataset will have

Code:

STUTTGART           DROSSELWEG 326A               
STUTTGART           MEISENGASSE 4711C             
STUTTGART           MEISENGASSE 0815             
FRANKFURT           ZUR FINKENWIESE 12           
FRANKFURT           ELSTERGASSE B52               
HAMBURG             ADLERHORST 23                 
BERLIN              KOLIBRI HIN UND WEG           

_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Rhys from Stuttgart
Beginner


Joined: 07 Dec 2020
Posts: 2
Topics: 1
Location: Stuttgart

PostPosted: Tue Dec 08, 2020 8:07 am    Post subject: Reply with quote

Thanks a lot!!!

That's ingeniously simple and much more better than splice Very Happy
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
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


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group