【问题标题】:Understand the following control cards了解以下控制卡
【发布时间】:2026-01-06 09:20:03
【问题描述】:

我有以下控制卡,我看不懂。有人可以帮我解释一下这部分工作的执行情况吗?

 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) 

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

【问题讨论】:

  • 哇 - 嗯,它正在生成系统使用报告?
  • 好吧,看起来这个 'XSCB ' 是 7 个字符。所以看起来 XSCB 文件,它正在寻找 'XSCB' 存在于位置 67 或 69 的记录?

标签: mainframe dfsort syncsort


【解决方案1】:

那些是 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 可以创建多行(任何 HEADERn 或 TRAILERn 和 BUILD(或 OUTREC,但不要将其用于新的)都可以在 OUTFIL 上创建),每行以“/”分隔。 &DATE、&TIME 和 &PAGE 是特殊的,包含明显的内容。 &DATE 可以有多种格式,MD4/ 是 MM、DD、YYYY,用斜线隔开。

X 是一个空白,单独一行。您同样可以看到 .../,/... 或 n/ 来创建 n 多个空行。

常量应该很明显。

TRAILER1 定义在报告末尾打印的内容。

COUNT为OUTFIL组的记录数,此处使用不带格式,但可以格式化。

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

OUTREC 最好拼写为 BUILD。 OUTREC 存在于其他地方。 BUILD 已经存在了 10 多年,因此无需在新代码中在 OUTFIL 上使用 OUTREC(也许这已经很旧了)。

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

成对的数字是字段的起始位置和长度。如果未定义字段类型,则它们是(视为)字符字段。

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

前面的 X 是空白,用作报表上的分隔符。每个字段的内容在注释中描述。注释是控制卡结束后的任何文本。控制卡在语句完成后的空白处结束,或者在可能的延续之后有空格(逗号或冒号是可能的延续)。

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 相关的活动。

【讨论】:

    最近更新 更多