Sorting 通过JCL排序/syncsort,将文件A的列A中的值从文件B的列B中减去。在文件3中显示结果(新文件)
有输入文件1:Sorting 通过JCL排序/syncsort,将文件A的列A中的值从文件B的列B中减去。在文件3中显示结果(新文件),sorting,jcl,syncsort,Sorting,Jcl,Syncsort,有输入文件1: 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 预期输出:应按以下方式排序 JOINKE
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... )
我需要这个序列的输出文件
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)
只是给你解释一下
现在就试试这个
选项副本
连接键F1=INA,字段=1,4,A,6,8,A
连接键F2=INB,字段=1,4,A,6,8,A
重新格式化字段=F1:1,25,F2:16,10
INREC BUILD=1,25,26,10,SFF,SUB,36,10,SFF,EDIT=STTTT
结果:
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
你很接近。但是,不需要SFF。这是有符号的自由格式,您有一个无符号的固定格式编号。使用ZD。您的编辑不够大,无法容纳10位数字。如果你的结果永远不会,我的意思是永远不会,超过六位数,这不是问题。对于=,您没有代码来生成它,现在还不清楚该符号将指向何处,因为它正在引导字段 根据到目前为止的情况,您将只获得两个文件之间匹配的记录。您将需要:
JOIN UNPAIRED,F1
如果要在输出中使用F1中不匹配的记录,请在第二次JOINKEYS之后输入
如果没有匹配项,则减法将有问题,因此需要一些代码。您的编码方式取决于您是使用DFSORT还是SyncSort
如果输入文件中有一个或两个,则应在相应的JOINKEYS语句中指定排序。使用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=(+,-)))
未配对,F1表示与配对记录一起,来自F1的未配对记录将显示给主任务
REFORMAT语句定义主任务将使用的数据记录。在本例中,整个F1记录包括F1:1,25和F2:16,10中的10位数字
FILL=告诉SORT在未配对记录的情况下为任何丢失的记录设置值。在这种情况下,重新格式化记录的26,10将被设置为所有X'FF'
IFTHEN=WHEN=逻辑表达式用于从F2数据中识别位于数字之一位置的X'FF'。如果X'FF'存在,则不存在匹配项。在这种情况下,来自F2的字节被设置为您实际需要的任何默认值
对于未满足IFTHEN=WHEN=逻辑表达式的任何记录,IFTHEN=WHEN=NONE处于活动状态。计算完成,并格式化计算的输出
如果任何一个输入文件已经按照您想要的顺序,请查看前面的建议
如果希望以不同的顺序从主任务输出,只需编写一条SORT语句,然后删除COPY选项
您想要的确切输出格式尚不清楚,但您应该能够根据需要进行调整
您需要获得SyncSort手册。它们可以作为PDF免费提供给拥有SyncSort许可证的站点。如果没有人知道如何为您提供,那么请找出SyncSort的联系人,并让他们通过SyncSort支持请求手册。只要提供几个细节,您就可以得到一份副本,可能是通过回信的方式。您已经接近了。但是,不需要SFF。这是有符号的自由格式,您有一个无符号的固定格式编号。使用ZD。您的编辑不够大,无法容纳10位数字。如果你的结果永远不会,我的意思是永远不会,超过六位数,这不是问题。对于=,您没有代码来生成它,现在还不清楚该符号将指向何处,因为它正在引导字段 根据到目前为止的情况,您将只获得两个文件之间匹配的记录。您将需要:
JOIN UNPAIRED,F1
如果要在输出中使用F1中不匹配的记录,请在第二次JOINKEYS之后输入
如果没有匹配项,则减法将有问题,因此需要一些代码。您的编码方式取决于您是使用DFSORT还是SyncSort
如果输入文件中有一个或两个,则应在相应的JOINKEYS语句中指定排序。使用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=(+,-)))
未配对,F1表示与配对记录一起,来自F1的未配对记录将显示给主任务
REFORMAT语句定义主任务将使用的数据记录。在本例中,整个F1记录包括F1:1,25和F2:16,10中的10位数字
FILL=告诉SORT在未配对记录的情况下为任何丢失的记录设置值。在这种情况下,重新格式化记录的26,10将被设置为所有X'FF'
IFTHEN=WHEN=逻辑表达式用于从F2数据中识别位于数字之一位置的X'FF'。如果X'FF'存在,则不存在匹配项。在这种情况下,来自F2的字节被设置为您实际需要的任何默认值
对于未满足IFTHEN=WHEN=逻辑表达式的任何记录,IFTHEN=WHEN=NONE处于活动状态。计算完成了,,
并对计算结果进行格式化
如果任何一个输入文件已经按照您想要的顺序,请查看前面的建议
如果希望以不同的顺序从主任务输出,只需编写一条SORT语句,然后删除COPY选项
您想要的确切输出格式尚不清楚,但您应该能够根据需要进行调整
您需要获得SyncSort手册。它们可以作为PDF免费提供给拥有SyncSort许可证的站点。如果没有人知道如何为您提供,那么请找出SyncSort的联系人,并让他们通过SyncSort支持请求手册。只要提供几个细节,您就可以得到一份副本,可能是通过返回电子邮件。您还没有澄清您使用的是哪种分拣产品。查看步骤中的sysout,注意它是在某处显示DFSORT还是SyncSort。编辑您的问题并删除这两个标签中不合适的一个。您仍然没有澄清您使用的是哪种产品。查看步骤中的sysout,注意它是在某处显示DFSORT还是SyncSort。编辑你的问题并删除这两个标签中任何一个不合适的。谢谢比尔,是的,我得到了“不匹配”的减法问题。请阅读更新说明..我们仍然需要知道SyncSort或DFSORT。解决方案是不同的。我使用了简单的排序程序//STEP03 EXEC PGM=SORTYes,但DFSORT和SyncSort都是以这种方式执行的。您必须查看滑阀中作业的输出。如果找不到DFSORT,可以尝试查找SYNCSORT。或者问问同事他们是否知道。嘿,比尔,我查过了,SYNCSORT在系统输出中!如何进行同步排序?谢谢Bill,是的,我遇到了“不匹配”的减法问题。请阅读更新说明..我们仍然需要知道SyncSort或DFSORT。解决方案是不同的。我使用了简单的排序程序//STEP03 EXEC PGM=SORTYes,但DFSORT和SyncSort都是以这种方式执行的。您必须查看滑阀中作业的输出。如果找不到DFSORT,可以尝试查找SYNCSORT。或者问问同事他们是否知道。嘿,比尔,我查过了,SYNCSORT在系统输出中!如何进行同步排序?