输入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
答案 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支持请求手册。提供一些细节,你可以通过回复电子邮件获得一份副本。