2010-12-30 19 views
0

Ich mag mein Szenario erklären, unter Verwendung von Beispielcode,JOINKEYS kombinieren zwei Dateien

Zwei Dateien mittels von acct # mit JOINKEYS verbunden werden müssen, aber in file1 acct # an der Position vorhanden ist: 33 aber in datei2 acct # existiert entweder bei position: 1 oder 2 hängt ab von char 'C' bei position: 1. Mit anderen Worten, wenn char 'C' existiert an der Position: 1 dann müssen wir betrachten acct # von Position: 2 andernfalls betrachten acct # von Position: 1. Ich möchte all diese Dinge in einem einzigen Schritt tun.

Hoffe ich machte meine Anforderung klar. Schätzen Sie Ihre Lösung.

//STEP010 EXEC PGM=SORT,      
//    REGION=4096K      
//SYSPRINT DD SYSOUT=*       
//SYSLIST DD SYSOUT=*       
//SYSTOTAL DD SYSOUT=*       
//SYSOUT DD SYSOUT=*       
//*            
//SORTIN DD DUMMY       
//*            
//SORTJNF1 DD *        
1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3785253347100 
2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3785253368600 
8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3725826154600 
9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3725817782600 
1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3785253347122 
/*            
//*            
//SORTJNF2 DD *        
C3785253347100         
C3785253368600         
3725826154600 
3725817782600 

//SORTOUT DD SYSOUT=*       
//JNF2CNTL DD *        
    INCLUDE COND=(1,1,CH,EQ,C'C'),    
    INREC BUILD=(1,13)       
/*            
//*            
//SYSIN DD *        
    JOINKEYS FILES=F1,FIELDS=(33,13,A)   
    JOINKEYS FILES=F2,FIELDS=(01,13,A)   
    JOIN UNPAIRED,F1        
    REFORMAT FIELDS=(F1:01,45,F2:01,13),FILL=C'$' 
    SORT FIELDS=COPY        
/*            

Antwort

1

Ich denke, das ist das, was Sie wollen (die JNF2CNTL In-Stream bemerken):

//STEP010 EXEC PGM=SORT,      
//    REGION=0M      
//SYSPRINT DD SYSOUT=*       
//SYSLIST DD SYSOUT=*       
//SYSTOTAL DD SYSOUT=*       
//SYSOUT DD SYSOUT=*       
//*            
//SORTIN DD DUMMY       
//*            
//SORTJNF1 DD *        
1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3785253347100 
2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3785253368600 
8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3725826154600 
9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3725817782600 
1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|3785253347122 
/*            
//*            
//SORTJNF2 DD *        
C3785253347100         
C3785253368600         
3725826154600 
3725817782600 
/* 
//SORTOUT DD SYSOUT=*       
//JNF2CNTL DD *        
    INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'C'),FIELDS=(2,13)) 
     IFTHEN=(WHEN=NONE,FIELDS=(1,13)) 
/*             
//*            
//SYSIN DD *        
    JOINKEYS FILES=F1,FIELDS=(33,13,A)   
    JOINKEYS FILES=F2,FIELDS=(01,13,A) 
    JOIN UNPAIRED,F1        
    REFORMAT FIELDS=(F1:01,45,F2:01,13),FILL=C'$' 
    SORT  FIELDS=COPY        
/* 
+0

Vielen Dank für Ihre Antwort! Lemme versuchen und zurück ... –

+0

@Raja geben Sie bitte Feedback – user823959

+0

FIELDS = ist nicht gültig für IFTHEN. Komma fehlt in der ersten Zeile von INREC. Es ist viel besser, ein neues Feld für den Schlüssel anzuhängen, als die Originaldaten zu zerstören (es sei denn, dass Sie dazu aufgefordert werden). –