我需要在第688位获得除“1”或“2”以外的任何值的计数。
是否可以通过JCL中的Easytrieve或SORT进行操作? 我这样做了
- [653位置上的字符不应为空格AND(CHeck 688 NE 1 .'AND'688 NE'2']
INCLUDE COND=
((653,5,CH,NE,C' ',AND,((688,2,CH,NE,C '1 ',AND,688,2,CH,NE,C '2 ')))
我们能以更有效率或其他方式做到吗?
答案 0 :(得分:2)
您可以使用OMIT而不是INCLUDE来简化人类理解,以消除您的负面情况。
OPTION COPY,VLSCMP
OMIT COND=(653,5,CH,EQ,C' ',
OR,
688,2,CH,EQ,C '1 ',
OR,
688,2,CH,EQ,C '2 ')
可以使用字段类型SS来收缩位置688上的测试,但如果您的数据是可疑的,我会警惕(只有当您确定可能存在哪些值时才使用SS) )。
在我看来,可以通过使用SORT符号来避免重复,以及可以使用的错误。
由于您的短记录可能会妨碍(导致步骤失败)我已经包含了OPTION VLSCMP。这将填充INCLUDE / OMIT上的所有字段,这些字段不包含在记录中(因为记录很短),带有二进制零。因此,所有空间为653,5的记录都将被删除,所有记录都不是C' 1'或C' 2'在688,2将被删除。将包括所有短记录,因为不符合删除标准(字段将是二进制零,用于INCLUDE / OMIT上的比较)。将省略包含653,5空间的简短记录。如果这不是您想要的,可以通过扩展条件来解决。
如果您需要一个可以轻松完成的格式化计数,但如果您只是在调查,那么很容易就会出现sysout中的默认计数为您提供所需的计数。
答案 1 :(得分:2)
是的,可以计算与sort或easytrieve
中的条件匹配的记录数大多数排序实用程序都有一些可以使用的报告功能,对于DFSort,IceTool中有count(http://pic.dhe.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.icea100/ice1ca40124.htm)选项。 即使没有报告功能,也可以在两步流程中使用
大致如下:
//STEP1 EXEC PGM=SORT //SYSOUT DD SYSOUT=H //SORTIN DD DSN=INP1,DISP=SHR,UNIT=3380,VOL=SER=SCR001 //SORTOUT DD DSN=&&OUTPUT,DISP=(,PASS),UNIT=3390, // SPACE=(CYL,(5,1)),DCB=(LRECL=22) //SYSIN DD * OPTION COPY OMIT COND=(653,5,CH,EQ,C' ', OR, 688,2,CH,EQ,C '1 ', OR, 688,2,CH,EQ,C '2 ') OUTREC BUILD=(1,4,X'0000000001') //* //STEP1 EXEC PGM=SORT //SYSOUT DD SYSOUT=H //SORTIN DD DSN=&&OUTPUT,DISP=SHR,UNIT=3380,VOL=SER=SCR001 //SORTOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=(5,1,BI) SUM FIELDS=(6,4,BI) OUTREC BUILD=(6,4,BI,TO=ZD,LENGTH=9)
您可以改进领域