了解以下控制卡

时间:2017-03-09 17:22:25

标签: mainframe dfsort syncsort

我有以下控制卡,我无法理解如何阅读。有人可以帮我描述一下JOB这部分的表现吗?

 OUTFIL  FNAMES=(XSCB),BLKCCT1,INCLUDE=(67,7,CH,EQ,                            
                C'XSCB   ',OR,69,7,CH,EQ,                                       
                C'XSCB   '),                                                    
   HEADER2=(22:C'XSCB    MVS USERID SYSTEM USAGE REPORT',/,                     
            01:C'GENERATED ON ',&DATE=(MD4/),70:C'PAGE',&PAGE,/,                
            01:C'          AT ',&TIME,/,X,/,                                    
            01:C'JULIAN',/,                                                     
            01:C'DATE     TIME     SYSTEM JOB      MESSAGE',/,                  
            01:C'-------- -------- ------ -------- ---------------->'),         
   TRAILER1=(X,/,01:C'RECORDS FOUND =',COUNT,/,34:C'END OF REPORT'),            
     OUTREC=(20,07,ZD,EDIT=(TTTT.TTT),X,                * JULIAN DATE           
             28,08,X,                                   * TIME                  
             11,06,X,                                   * SYSTEM                
             40,08,X,                                   * JOB OR REF            
             59,07,CHANGE=(50,C'IEF125I',C'LOGGED ON ', * MESSAGE               
                              C'IEF126I',C'LOGGED OFF'),                        
                  NOMATCH=(79,50),                                              
             132:X) 

我知道它会搜索ID' XSCB'在67或69位置。但一旦找到它,我就无法解释它接下来会做什么。

1 个答案:

答案 0 :(得分:4)

这些是SORT控制卡。如果您查看步骤的SYSOUT并注意消息,您将能够判断它是DFSORT(以ICE为前缀的消息)还是SyncSORT(以WER为前缀的消息)。

您的步骤可能是EXEC PGM = SORT或ICEMAN或其他,取决于您的网站。

控制卡正在生成报告。您的控制卡中至少缺少一行(OPTION COPY,或SORT FIELDS = COPY或不同的SORT或MERGE语句)。可能有任意数量的丢失卡,您可能还有步骤的另一个输出。否则,OUTFIL INCLUDE =可能是一个简单的INCLUDE COND =。

你所展示的实际上做了什么?

OUTFIL定义特定输出数据集的最终处理。没有名称,它将是您的JCL中的SORTOUT DD。

使用FNAMES =(XSCB),它适用于JCL中名为XSCB的DD。对于在FNAMES中指定的单个名称,括号是多余的。

BLKCTT1说"在第一列中留空,以便不从TRAILER1输出中获取页面弹出"。

INCLUDE =正如您所怀疑的那样。测试两个不同的起始位置以获得相同的值。如果任一测试为真,则当前记录将包含在OUTFIL组中。

HEADER2定义每页顶部显示的内容。

01:是一个列号,并且是多余的,因为默认情况下每行都是第一列。

HEADER2可以创建多行(在OUTFIL上可以创建任何HEADERn或TRAILERn和BUILD(或OUTREC,但不要将它用于新)),每个行用" /"分隔。 & DATE,& TIME和& PAGE是特别的,含有明显的。 & DATE可以用各种方式格式化,MD4 /是MM,DD,YYYY用斜杠分隔。

X是一个空白,在它自己的一行上。您同样可以看到... /,/ ...或n /创建多个空白行。

常数应该是显而易见的。

TRAILER1定义报告末尾的内容。

COUNT是OUTFIL组中的记录数,此处没有格式化,但可以格式化。

34:列号表示后面的项目将从第34列开始。

OUTREC更好地拼写为BUILD。 OUTREC存在于其他地方。 BUILD已存在超过10年,因此无需在新代码中使用OUTTRIL上的OUTREC(也许这是旧的)。

BUILD将做的是将当前输入记录格式化为报告中输出行所需的内容。

成对的数字是起始位置和字段长度。在没有定义字段类型的情况下,它们被(视为)字符字段。

您有一个字段类型ZD,它是分区十进制的。它的长度为7,使用EDIT掩码,四位数,全停(小数点),然后是三位数。

以前的Xs是空白,在报告中用作分隔符。每个字段的内容在评论中描述。注释是控制卡结束后的任何文本。声明完成后,控制卡在空白处结束,或者在可能的继续之后有空格(逗号或冒号可能继续)。

132:X在第132列中放置一个空白,并填充最后一个字段中的任何中间列或使用空格填充常量。

离开CHANGE =。

CHANGE =是一个非常有用的测试和替换。

79,50,CHANGE=(50,C'IEF125I',C'LOGGED ON ', * MESSAGE               
           C'IEF126I',C'LOGGED OFF'),                        
              NOMATCH=(79,50)

这表示"在正在创建的记录的当前列中,考虑从位置79输入的内容长度为50.输出长度将为50.如果是IEF125I,则使用常量LOGGED ON ,如果IEF126I使用LOGGED OFF,否则(NOMATCH)使用位置79处的任何内容,输入的长度为50.

基本上,报告使用系统日志或其摘录来报告与Userid / Logon XSCB相关的活动。