首页 > 解决方案 > 比较两个文件,然后匹配和 umtached 记录以复制两个差异文件

问题描述

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

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                        

标签: dfsort

解决方案


欢迎来到堆栈溢出!您必须在 dfsort中使用指标方法来实现您的期望。请参见下面的 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 中BOTHF1ONLYDD名称。F2ONLY

更多细节在这里


推荐阅读