使用ICETOOL的DISPLAY格式化分隔线

时间:2015-05-08 14:19:22

标签: mainframe dfsort

我正在使用DFSORT的ICETOOL DISPLAY运算符来生成帐户列表。我在分支机构上使用“BREAK”按分类代码分隔帐户,然后将帐户余额相加。一切正常,但在使用BTOTAL总结余额后,我得到一个额外的条目(帐户)。我在下面添加了我的代码和结果,以便您更好地理解我的问题。

//SUR0007 JOB (5678),'ACCOUNTS'                          
//RUNIT EXEC PGM=ICETOOL                                 
//TOOLMSG DD SYSOUT=*                                    
//DFSMSG DD SYSOUT=*                                     
//TOOLIN DD *                                            
         DISPLAY FROM(INPUT2) LIST(REPORT) -                      
         TITLE('LIST OF BANK ACCOUNTS BY BRANCH')  -          
         HEADER('ACCOUNT') ON(2,8,BI,E'99999999') -               
         HEADER('BALANCE') ON(3,6,BI,E'99999999') -               
         HEADER('OWNER') ON(13,30,CH) -                           
         BTITLE('SORTCODE:') BREAK(1,4,BI,E'999999') -            
         BTOTAL('BRANCH TOTAL:') -                                
         TOTAL('GRAND TOTAL:')                                    
/*                                                       
//INPUT2 DD DSN=USER.CICS.Z022.BANK.ACCOUNTS,DISP=SHR
//REPORT DD SYSOUT=*  

结果

  SORTCODE:000012

  ACCOUNT    BALANCE  
 --------   --------  
 91317760   97999587  

 BRANCH TOTAL :        
 91317760   97999587  

预期结果

 SORTCODE:000012

 ACCOUNT    BALANCE  
 --------   --------  
 91317760   97999587  

 BRANCH TOTAL : 97999587   

1 个答案:

答案 0 :(得分:0)

DFSORT的ICETOOL DISPLAY运算符有很多选项,这意味着它有大量的文档。

您应该参阅 DFSORT入门手册以获得介绍级别的使用,并参阅 DFSORT应用程序编程指南以获得更多高级别的使用。

在BCOUNT内,所有数字字段都会显示总计。您的帐户是数字(二进制​​),但如果您不能将其设为非数字,则可以使用NOST(您可以假装这意味着没有子总计)作为您不使用的任何字段格式的一部分想要自动求和。

要使您的BTOTAL文字与总计显示在同一行,请在报告说明中使用STATLEFT

以下是应用程序编程指南中使用这两者的示例:

 DISPLAY FROM(ACCTS) LIST(FANCY) -
        TITLE('Accounts Report for First Quarter') -
        DATE(MD4/) BLANK -
        HEADER('Amount') ON(12,6,ZD,C1,N08) -
        HEADER(Id') ON(NUM,N02) -
        HEADER('Acct#') ON(31,3,PD,NOST,LZ) -
        HEADER('Date') ON(1,4,ZD,E'99/99',NOST) -
        INDENT(2) BETWEEN(5) -
        STATLEFT -
        TOTAL('Total for Q1') -
        AVERAGE('Average for Q1')

有相同报告的简单版本的编码:

DISPLAY FROM(ACCTS) LIST(PLAIN) -
    TITLE('Accounts Report for First Quarter') -
    DATE(MD4/) BLANK -
    HEADER('Amount') ON(12,6,ZD) -
    HEADER(Id') ON(NUM) -
    HEADER('Acct#') ON(31,3,PD) -
    HEADER('Date') ON(1,4,ZD) -
    TOTAL('Total for Q1') -
    AVERAGE('Average for Q1')

输出,以及示例的解释,是:

  

此示例显示了一些可用于改善外观的选项   一个DISPLAY报告。第一个DISPLAY运算符产生“普通”   报告,第二个DISPLAY运算符使用粗体显示的选项   制作一份“花哨”的报告。

The PLAIN output starts on a new page and looks as follows:

Accounts Report for First Quarter               05/04/2001

         Amount                 Id                  Acct#                    Date
---------------    ---------------    -------------------    --------------------
          93271                  1                  15932                     106
         137622                  2                    187                     128
          83147                  3                  15932                     212
         183261                  4                   2158                     217
          76389                  5                    187                     305
         920013                  6                  15932                     319

Total for Q1
        1493703                                     50328                    1287

Average for Q1
         248950                                      8388                     214



The FANCY output starts on a new page and looks as follows:

Accounts Report for First Quarter             05/04/2001

                       Amount         Id        Acct#      Date
                     --------        ---       ------     -----
                       932.71          1        15932     01/06
                     1,376.22          2        00187     01/28
                       831.47          3        15932     02/12
                     1,832.61          4        02158     02/17
                       763.89          5        00187     03/05
                     9,200.13          6        15932     03/19

Total for Q1        14,937.03

Average for Q1       2,489.50
  

以下是对“花式”使用的额外选项的解释   报告:

First ON field: In the PLAIN report, BLANK causes ICETOOL to print 
     

6字节的ZD值为未编辑的数字,前导零被抑制。   但是对于这个例子,我们知道数字真的代表美元和   美分。所以在FANCY报告中,我们使用C1格式项(其中一个)   三十三个可用的掩码)用逗号(,)作为打印值   千位分隔符和句点(。)作为小数点。

In the PLAIN report, TOTAL causes ICETOOL to allow 15 digits for the 
     

值因为它不知道需要多少位数。但   对于这个例子,我们知道总金额不会超过8位数。   所以在FANCY报告中,我们使用N08格式项来设置   到8的数字位数。这会减少字段的列宽。

Second ON field: In the PLAIN report, NUM causes ICETOOL to allow 15 
     

记录编号的数字,因为它不知道有多少   需要数字。但是对于这个例子,我们知道记录的数量   不会超过99.所以在FANCY报告中,我们使用N02格式   将数字设置为2的项目。这会减小列宽   记录号码。

Third ON field: In the PLAIN report, TOTAL and AVERAGE cause ICETOOL to 
     

打印此3字节PD字段的总和和平均值。但   对于这个例子,我们知道我们不想要该字段的统计数据   因为它是一个帐号。所以在FANCY报告中,我们使用了   NOST格式化项目以取消此字段的统计信息。

In the PLAIN report, the default mask of A0 causes ICETOOL to suppress 
     

这个3字节PD字段的前导零。但是对于这个例子,   我们知道我们想要为该字段显示前导零,因为它是   一个帐号。所以在FANCY报告中,我们使用LZ格式   要打印此字段的前导零的项目。

Fourth ON field: In the PLAIN report, BLANK causes ICETOOL to print the 
     

4字节ZD值作为带有前导零的未编辑数字   抑制。但是对于这个例子,我们知道数字代表一个日期   (月和日)。所以在FANCY报告中,我们使用E'99 / 99'   格式化项目以使用前导零和斜杠(/)打印值   在月和日之间。

In the PLAIN report, TOTAL and AVERAGE cause ICETOOL to print the total 
     

和此4字节ZD字段的平均值。但是对于这个例子,我们   知道我们不想要这个领域的总数或平均数,因为它是   一个约会。所以在FANCY报告中,我们使用NOST格式项   取消此字段的统计信息。

Note: In some applications, we might want the minimum and maximum for a 
     

与E'pattern'一起显示的日期,因此我们不会指定NOST   日期字段。

INDENT: In the PLAIN report, ICETOOL starts the report in column 2 
     

(在控制字符之后),默认情况下。但是对于这个例子,我们   想稍微缩进报告。所以在FANCY报告中,我们使用了   INDENT(2)操作数将报告缩进2个空格,以便从中开始   第4栏。

BETWEEN: In the PLAIN report, ICETOOL uses 3 blanks between the columns 
     

数据,默认情况下。但是对于这个例子,我们想要更多的空间   列之间。所以在FANCY报告中,我们使用BETWEEN(5)   操作数在列之间插入5个空格。

STATLEFT: In the PLAIN report, ICETOOL prints the strings for TOTAL
     默认情况下,

和AVERAGE在第一列数据下使用   每个统计信息有两行,以避免字符串覆盖   值。但是对于这个例子,我们希望有TOTAL和   AVERAGE字符串在报告中脱颖而出,并且每个字符串都打开   与其值相同的行。所以在FANCY报告中,我们使用了   STATLEFT操作数打印左侧的TOTAL和AVERAGE字符串   第一列数据。

这是链接,其中还包含报告的“普通”版本,与花哨的版本形成鲜明对比:http://www-01.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.icea100/ice2ca_Example_1110.htm

我通过icetool display statleft nost的搜索引擎找到了该链接。