从fileB的ColumnB通过JCL排序/同步减去文件A的columnA中的值。在FILE3中显示结果(新文件)

时间:2013-11-12 13:13:43

标签: sorting jcl syncsort

输入file1:

 C1   C2        C3
 5102;22680372 =0000000001
 5111;21840112 =0000000002
 5363;21980235 =0000000002
 5363;22700216 =0000000001

输入文件2:

 5111;21840112 =0000000002
 5363;21980235 =0000000001
 5363;22700216 =0000000001  

预期输出:应按以下方式排序,

   JOINKEYS FILES=F1,FIELDS=(1,04,A,6,8,A,16,10,a) 
   JOINKEYS FILES=F2,FIELDS=(1,04,A,6,8,A,16,10,a) 
   REFORMAT FIELDS=(F1:1,.. and... ) 

我需要带有此swquence的输出文件

   File1 C1  File1 C2    file1C3     [file1C3 - file2 C3] value
   5102;     22680372   =0000000001  =00000             *(no records in second file for it)
   5111;     21840112   =0000000002  =00000             *(1-1 =0)
   5363;     21980235   =0000000002  =00001             *(2-1= 1)
   5363;      22700216  =0000000001  =00000             *(1-1 =0) 
  • 只是为了解释你 现在尝试这个

    选项复制
    JOINKEYS F1 = INA,FIELDS =(1,4,A,6,8,A)
    JOINKEYS F2 = INB,FIELDS =(1,4,A,6,8,A)
    改革领域=(F1:1,25,F2:16,10)
    INREC BUILD =(1,25,26,10,SFF,SUB,36,10,SFF,EDIT =(STTTTTT))

结果:

   5060;22222222 =0000000001 (blank)  i just need 0001 - nothin(0) = 1 simply 1 here         
   5102;22680372 =0000000001;000000000
   5105;22222222 =0000000002 (blank)   need 2 here same 2-0 or nothing(unmatched) = 2         

1 个答案:

答案 0 :(得分:3)

你很亲密。但是,不需要SFF。这是签名免费格式,您有一个未签名的固定格式号码。使用ZD。你的编辑不够大,10位数。如果您的结果永远不会超过六位数,那么这不是问题。使用“=”,您无法生成代码,目前还不清楚您希望该符号的位置(此时它正在引领该领域)。

到目前为止,您只能获得两个文件之间匹配的记录。你需要:

 JOIN UNPAIRED,F1

在第二个JOINKEYS之后,如果您想在输出中获得F1中不匹配的记录。

如果你没有匹配,减法会有问题,所以你需要一些代码。如何编码取决于您是DFSORT还是SyncSort

如果输入文件中的任何一个或两个都应在相应的JOINKEYS语句中指定SORTED。使用DFSORT而非SyncSort,您也可以指定NOSEQCHK。

有了进一步的信息,我们会进步:

  OPTION COPY 
  JOINKEYS F1=INA,FIELDS=(1,4,A,6,8,A) 
  JOINKEYS F2=INB,FIELDS=(1,4,A,6,8,A) 

  JOIN UNPAIRED,F1 

  REFORMAT FIELDS=(F1:1,25,F2:16,10),FILL=X'FF' 

  INREC IFTHEN=(WHEN=(35,1,CH,EQ,X'FF'), 
                 OVERLAY=(26:C'+',10C'0')), 
        IFTHEN=(WHEN=NONE, 
                     OVERLAY=(26:16,10,ZD,SUB,26,10,ZD, 
                              EDIT=(STTTTTTTTTT),SIGNS=(+,-))) 

UNPAIRED,F1表示与配对记录(匹配)一起,F1中的未配对记录将显示在主任务中。

REFORMAT语句定义主任务将使用的数据记录。在这个例子中,包括整个F1记录(F1:1,25)和F2中的10位数字(F2:16,10)。

FILL=告诉SORT在未配对记录的情况下,为任何缺失记录设置值的内容。在这种情况下,REFORMAT记录的26,10将被设置为所有X'FF'。

然后使用

IFTHEN=(WHEN=(logical-expression来识别F2数据中数字位置中的X'FF'。如果存在X'FF',那么就没有匹配。在这种情况下,源自F2的字节将设置为您实际需要的任何默认值。

IFTHEN=(WHEN=NONE对任何不满足IFTHEN=(WHEN=(logical-expression的记录都有效。计算完成,计算的输出格式化。

如果任何一个输入文件已经按照您想要的顺序排列,请查看以前的建议。

如果您希望主要任务的输出顺序不同,只需编写一个SORT语句,然后删除OPTION COPY。

您想要的确切输出格式尚不清楚,但您应该能够根据需要进行修复。

您需要获取SyncSort手册。它们可以PDF格式免费提供给具有SyncSort许可证的站点。如果没有人知道如何给你一个,那么找出谁是SyncSort的联系人,让他们通过SyncSort支持请求手册。提供一些细节,你可以通过回复电子邮件获得一份副本。