由于您打算摆脱尾随空白并且只处理最大数据长度 246,因此您应该在 SORT 中完成所有操作。
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=<Input DSN>,DISP=SHR
//SORTOUT DD DSN=<output DSN>,DISP=(,CATLG,DELETE),
// UNIT=DISK,SPACE=(CYL,(1200,120),RLSE)
//SYSIN DD *
INREC BUILD=(1,4,5,246)
SORT FIELDS=(5,246,CH,A)
SUM FIELDS=NONE
OUTFIL VLTRIM=C' '
//SYSOUT DD SYSOUT=*
请注意,我已从 SORTOUT 中删除了 DCB 信息。SORT 会解决这个问题,您可以通过在 SORT 步骤中将其包含在 SORTOUT(或来自 OUTFIL 的任何 DD)中来混淆和增加维护。
在 INREC 中,从输入中创建一条新记录,该记录长 250 字节(四个字节的 RDW 和 246 字节的数据)。RDW 和数据是分开提到的,这样下一个人就很清楚你知道你在做什么(也许你真的想要 250 字节的数据?)。
这样,您不想要的所有数据都不会进入 SORT 本身,从而大大减少了您的工作空间需求,减少了 CPU 时间和运行时间。
除非您的数据有一个实际的键(在位置 5,长度为 11),否则您可能会将非重复数据视为重复数据。如果您没有密钥,SORT 现在会对数据进行排序。甚至不再需要对 RDW 进行远程排序,因为由于 INREC 上的 BUILD,所有 RDW 将在前两个字节中包含 250(二进制)的记录长度。
现在SUM FIELDS=NONE
将对 246 字节的数据进行重复数据删除。
In OUTFIL
,VLTRIM=C' '
用于删除碰巧留下的任何尾随空格。
担心你不确定你的实际记录长度,我会运行这样的东西:
INREC BUILD=(1,4,1,2)
SORT FIELDS=(5,2,BI,A)
OUTREC OVERLAY=(5:5,2,BI,EDIT=(IIIIT),10:18X)
OUTFIL NODETAIL,
REMOVECC,
HEADER2=('RECLENS PRESENT ON FILE'),
SECTIONS=(5,5,
TRAILER3=(5,5)),
TRAILER1=('MIN/MAX ',
MIN=(5,5,ZD,EDIT=(IIIIT)),
' ',
MAX=(5,5,ZD,EDIT=(IIIIT)))
这将生成一个简单的文件,显示所有记录长度,并在最后一页显示最小值/最大值。
INREC 用于制作仅包含(二进制)记录长度的记录。然后对这些进行排序。OUTREC 将二进制记录长度扩展为五个可打印数字,并抑制前导零。使用了 OUTFIL 报告功能:抑制明细行,不包含打印控制代码,在每个“页面”的顶部打印标题,在格式化的记录长度上建立控制中断,记录长度为中断发生时打印。最后,打印最小值和最大值。
如果您使用包含以下内容的 SORT 步骤为此创建输入:
选项复制OUTFIL VLTRIM=C''
然后,一旦忽略尾随空格,您将获得文件记录长度的报告,并且可以确信(对于该数据示例)您所知道的规范与数据匹配。