我想从包含 38,792 条记录的测试文件中删除基于 5 个字符活动代码的 501 条记录。
由于有 501 条记录,我不能写省略条件。
我需要使用排序连接卡,但我的问题是这 5 个字符的活动代码从某些记录的第 46 列和其他记录的第 47 列开始。
那么我能做什么呢?
这个问题不清楚,缺少许多细节,但这里有一些可能对其他搜索者有帮助的东西:
//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 语句中的 ONLY ,只有一个可能) .
在匹配的那些中,您想忽略第一个 501。因此,设置一个仅针对匹配记录递增的序列号。
然后在 OUTFIL 上,OMIT= 对于那些序列小于或等于 501 计数的匹配记录。
SORTOUT 上的输出将是 INA 文件中的所有记录,但匹配的第一个 501 除外。