JOINKEYS 组合两个文件

发布于 2024-10-09 13:25:10 字数 1934 浏览 2 评论 0原文

我想使用下面的示例代码来解释我的场景,

两个文件需要通过方法连接起来 acct# 使用 JOINKEYS 但在 file1 中 acct# 存在于位置:33 但在 file2 acct# 存在于 位置:1 或 2 取决于 char 'C' at 位置:1。换句话说,如果字符'C' 存在于位置:1 那么我们需要 考虑位置:2 的 acct# 否则考虑 acct# from 位置:1。我想做所有这些事情 只需一步。

希望我明确了我的要求。感谢您的解决方案。

//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                             
/*                                             

I would like to explain my scenario using sample code below,

Two files need to be joined by means
of acct# using JOINKEYS but in file1
acct# exists at position:33 but in
file2 acct# exists either at
position:1 or 2 depends on char 'C' at
position:1. In other words if char 'C'
exists at position:1 then we need to
consider acct# from position:2
otherwise consider acct# from
position:1. I want do all these things
in a SINGLE step.

Hope i made my requirement clear. Appreciate your solution.

//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                             
/*                                             

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怎樣才叫好 2024-10-16 13:25:10

我认为这就是您想要的(注意 JNF2CNTL 流内):

//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                             
/*

I think this is what you want (notice the JNF2CNTL in-stream):

//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                             
/*
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文