如何在变量块文件中从位置68到69检查Null(或值'1','2''除外)。记录可能在第27位之前结束

时间:2014-05-02 08:05:41

标签: mainframe jcl syncsort easytrieve

我需要在第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 ')))

我们能以更有效率或其他方式做到吗?

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

中的条件匹配的记录数
  1. Easytrieve - 非常容易看一下手册 - https://www.google.com.au/?gfe_rd=cr&ei=hUBnU-XbCOfC8gep74GIBg#q=easytrieve+manual
  2. 大多数排序实用程序都有一些可以使用的报告功能,对于DFSort,IceTool中有count(http://pic.dhe.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.icea100/ice1ca40124.htm)选项。 即使没有报告功能,也可以在两步流程中使用

    大致如下:

  3.     //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)
    

    您可以改进领域