比较两个文件,然后匹配并删除记录,以复制两个差异文件

时间:2018-10-12 13:16:00

标签: dfsort

我需要比较两个文件,然后匹配记录一个文件,然后使用jcl中的joinkeys将其不匹配到另一个文件中。我不确定这是否正确。请你帮助我好吗? 第一个具有唯一18个记录长度的输入文件,它将与input2的前18个长度进行比较。如果匹配,那么我们将根据buid条件将记录写入输出文件中;如果不匹配,则将记录复制到另一个文件中

SORT FIELDS=COPY                             
JOINKEYS FILE=F1,FIELDS=(1,18,A)             
JOINKEYS FILE=F2,FIELDS=(1,18,A)             
REFORMAT FIELDS=(F2:1,258,F2:264,1,F2:334,2) 
OUTFIL FNAMES=MATCH                          
SORT FIELDS=COPY                             
JOINKEYS FILE=F1,FIELDS=(1,18,A)             
JOINKEYS FILE=F2,FIELDS=(1,18,A)             
JOIN UNPAIRED,F2,ONLY                        
REFORMAT FIELDS=(F2:1,258,F2:264,1,F2:334,2) 
OUTFIL FNAMES=UNMATCH                        

3 个答案:

答案 0 :(得分:1)

欢迎堆栈溢出!您必须在dfsort中使用 indicator方法才能达到期望的效果。请参见下面的SORT语句。

JOINKEYS FILE=F1,FIELDS=(1,18,A)             
JOINKEYS FILE=F2,FIELDS=(1,18,A)             
REFORMAT FIELDS=(F2:1,258,F2:264,1,F2:334,2,?) 
OUTFIL FNAMES=BOTH,INCLUDE=(262,1,CH,EQ,C'B'),BUILD=(1,261)                          
OUTFIL FNAMES=F1ONLY,INCLUDE=(262,1,CH,EQ,C'1'),BUILD=(1,258)
OUTFIL FNAMES=F2ONLY,INCLUDE=(262,1,CH,EQ,C'2'),BUILD=(259,3)

?中的REFORMAT FIELD负责填充指标在第262个位置。如果密钥在两个文件中都匹配,则第262位将具有B,表示两者。如果密钥不匹配,则第262位将通知您12记录来自哪个文件。

注意:

  • 您可以更改BUILD语句以编写您要使用的列 如果密钥不匹配,则要求。确保您有那些列 在REFORMAT FIELDS中被提及。

  • 确保在JCL中具有DD名称BOTHF1ONLYF2ONLY

更多详细信息here

答案 1 :(得分:1)

我尝试了以下示例。一切正常。输入和输出文件的记录长度为80。记录格式(RECFM)为FB。

//SYSIN    DD    *                                          
  JOINKEYS FILE=F1,FIELDS=(1,10,A),SORTED                   
  JOINKEYS FILE=F2,FIELDS=(1,10,A),SORTED                   
  JOIN UNPAIRED,F1,F2                                       
  REFORMAT FIELDS=(F1:1,10,F2:1,10,?)                       
  OPTION COPY                                               
  OUTFIL FNAMES=F1ONLY,INCLUDE=(21,1,CH,EQ,C'1'),           
  BUILD=(1,10,70X)                                          
  OUTFIL FNAMES=F2ONLY,INCLUDE=(21,1,CH,EQ,C'2'),           
  BUILD=(11,10,70X)                                         
  OUTFIL FNAMES=BOTH,INCLUDE=(21,1,CH,EQ,C'B'),             
  BUILD=(1,10,70X)                                          
/*

答案 2 :(得分:0)

您可以使用 1. JCL程序-JOIN KEYS的使用 2. COBOL程序-文件匹配逻辑(在下面的链接中对这两种逻辑进行了说明) 3. Easytrieve或REXX程序

https://www.youtube.com/watch?v=pQumm7ueYik&list=PLB4QPUJFZRcTsP1cKe2sSIObFMlvkyjnn&index=4