我想根据测试文件中的5个字符活动代码删除501条记录,记录为38,792条。
由于有501条记录我无法写出省略条件。
我需要使用排序连接卡,但我的prombelem是这个5字符活动代码从第46列开始为某些记录而第47列从其他人开始。
那我该怎么办?
答案 0 :(得分:0)
问题尚不清楚,遗漏了许多细节,但这可能有助于另一位搜索者:
//SYSIN DD *
JOINKEYS F1=INA,FIELDS=(1,5,A),SORTED,NOSEQCK
JOINKEYS F2=INB,FIELDS=(1,5,A)
JOIN UNPAIRED,F1
REFORMAT FIELDS=(F1:1,80,?)
OPTION COPY
INREC IFTHEN=(WHEN=(81,1,CH,EQ,C'B'),
OVERLAY=(82:SEQNUM,9,ZD))
OUTFIL OMIT=(82,9,CH,LE,C'000000501',
AND,
81,1,CH,EQ,C'B')
//JNF2CNTL DD *
INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'0'),
BUILD=(3,5)),
IFTHEN=(WHEN=NONE,
BUILD=(2,5))
//INA DD *
11111 IN
22222 KEEP UNMATCHED
33333 OUT
66666 IN
66667 KEEP UNMATCHED
66668 KEEP UNMATCHED
77777 OUT
88888 SHAKE IT ALL ABOUT
//INB DD *
0X11111
0X66666
0X88888
133333
799999
877777
这是使用两个输入文件,INA和INB。
INA已经按顺序排列(因此在JOINKEYS上为它指定SORTED,NOSEQCHK),并且是固定长度的80字节记录。
INB尚未按顺序排列,因为它是不同文件的混合,都是固定长度的80字节记录。
在JNF2CNTL中,仅提取第二个文件中的密钥,因为该文件不需要其他数据。密钥源自不同的地方,具体取决于记录类型。在JOIN本身之前,文件将自动排序(设置OPTION EQUALS)。
JOIN用于匹配,以及来自F1(INA)的不匹配记录。
?在REFORMAT语句中是"匹配标记"对于来自F1的不匹配记录,它将自动设置为B(两者)进行匹配,并且1(在这种情况下,由于JOIN语句中只有一个是可能的)。
在匹配的那些中,你想忽略前501.所以,设置一个序列号,只对匹配的记录增加。
然后在OUTFIL上,OMIT =用于那些序列小于或等于501计数的匹配记录。
SORTOUT上的输出将是INA文件中的所有记录,但匹配的第一个501除外。