RECFM=VB数据集是否必须包含BDW?DFSORT程序行为咨询
关于RECFM=VB/V数据集有效性及DFSORT处理行为的解答
一、RECFM=VB数据集的有效性规则
- 严格来说,RECFM=VB格式的数据集必须包含块描述符字(BDW),这是变长块数据集的规范定义。BDW用于标识每个块的总长度,缺失BDW的VB数据集不符合标准格式,属于无效的VB数据集。
- RECFM=V是单记录变长格式,和VB(多记录变长块)本质不同:V格式每个块仅存一条记录,只有记录描述符字(RDW);VB格式每个块可存多条记录,块开头有BDW,每条记录前有RDW。所以V不能直接当作VB处理,二者存储结构完全不一样。
二、DFSORT(PGM=ICEMAN)的处理行为
DFSORT对输入数据集的格式匹配要求严格,针对你的场景:
- 如果输入实际是RECFM=V(无BDW),但DD语句指定RECFM=VB:
- DFSORT会尝试读取BDW,实际不存在时会触发格式错误,SYSOUT中会出现类似
ICE143I 0 RECORDS READ FROM SORTIN或ICE005I 0 - RECORD TYPE INCOMPATIBLE的报错,任务直接异常终止。
- DFSORT会尝试读取BDW,实际不存在时会触发格式错误,SYSOUT中会出现类似
- 若输入是合法VB格式(含BDW),你的测试代码逻辑是成立的:
SORT FIELDS=COPY执行数据复制,OUTFIL OUTREC=(5,80),VTOF会跳过RDW的4字节,从第5字节开始取80个字符,将VB格式转换为FB格式。但如果输入是V格式,因为没有BDW,DFSORT无法正确解析块结构,必然处理失败。
三、测试代码调整建议
如果要测试RECFM=V数据集的处理,需修正SORTIN的DD语句格式,同时保持转换逻辑不变(V格式同样有RDW,VTOF可通用):
//TESTSORT JOB ,MSGLEVEL=(2,0) //STEP01 EXEC PGM=ICEMAN //SYSOUT DD SYSOUT=* //SORTIN DD DSN=TEST.DATA.V100(SORTIN), // DISP=SHR,RECFM=V,LRECL=100 //SORTOUT DD DSN=TEST.DATA.FB80(SORTOUT), // DISP=OLD,RECFM=FB,LRECL=80 //SYSIN DD * SORT FIELDS=COPY OUTFIL FNAMES=SORTOUT,OUTREC=(5,80),VTOF END /*
- 关键前提:DD语句指定的RECFM必须和实际数据集格式完全一致,否则DFSORT会直接报错终止。
内容的提问来源于stack exchange,提问作者Osama
相关产品推荐
相关产品推荐

