0
OPTION COPY                                                 
  OUTFIL  REMOVECC,                                          
      TRAILER1=('FT',DATE,55X,COUNT=(EDIT=(IIITT)),   
     299X,TOTAL=(370,13,SFF,EDIT=(STTTTTTTTT.TT),       
                        SIGNS=(+,-),                    
                        LENGTH=13))                     

我有一个带有上述选项的预告片记录。在这种情况下,日期以格式显示,但我希望日期仅以 2014-10-21 格式显示。我的预告片记录如下所示。

FT10/21/14       04    +000000192.21

它应该如下所示。FT2014-10-21 04 +000000192.21

另外,在这一个中,我找到了所有记录的计数和所有记录的总数。我的输入文件在第 2 列中有 A 或 L,在第 370 列中有相应的金额。我还想找到第 2 列中有 A 或 L 的记录的计数以及这些记录的总数。我也必须在预告片记录中显示这个计数和总和。

注意:在我的预告片中,我需要以 yyyy-mm-dd 格式显示当前日期,并且我已经显示了所有输入记录的计数和总数,我还想用 A 显示记录的计数和总数或第 2 栏中的 L 以及第 370 栏中的相应金额的总和。

根据比尔提供的答案,这就是我所拥有的。

//SORTA    EXEC PGM=SORT                                                
//SORTIN   DD  DSN=TESTIBN.MYFILE.CHGHIS.SAMP,                    
//             DISP=SHR                                                 
//SORTOUT  DD  DSN=TESTIBN.MYFILE.CHGHIS.NEW,                     
//             DISP=(NEW,CATLG,DELETE),                                 
//             UNIT=SYSDA,                                              
//             RECFM=FB                                                 
//SORTWK01 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK02 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK03 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK04 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK05 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SYSPRINT DD  SYSOUT=*                                                 
//SYSOUT   DD  SYSOUT=*                                                 
//SYSIN    DD  *                                                        
  OPTION COPY                                                           
   OUTFIL  REMOVECC,                                                    
            TRAILER1=('FT',DATE=(4MD-),55X,COUNT=(EDIT=(IIITT)),        
           299X,TOTAL=(370,13,SFF,EDIT=(STTTTTTTTT.TT),                 
                              SIGNS=(+,-),                              
                              LENGTH=13)) 

是的,记录长度是 500。输入文件的位置 2 有 A 或 L 仅用于少数记录。这些是调整记录。他们可能在位置 2 中有 C 用于收费记录。我已经把所有记录的总数(费用+调整)放在了预告片中,现在我必须把调整记录的计数和总数也放进去。

4

1 回答 1

0

来自 DFSORT 应用程序编程指南

日期=(abcd)

指定当前日期以“adbdc”的形式出现在报表记录中,其中a、b、c表示月、日、年的出现顺序以及年是否显示为两个或四位数字,d 是用于分隔月、日和年的字符。对于a、b、c,用M代表月份(01-12),D代表天(01-31),Y代表年份的后两位(例如05),或者4表示年份的四位数字(例如,2005)。M、D 和 Y 或 4 只能指定一次。示例:DATE=(DMY.) 将生成格式为“dd.mm.yy”的日期,该日期在 2005 年 3 月 29 日将显示为“29.03.05”。DATE=(4MD−) 将生成格式为 'yyyy-mm-dd' 的日期,它在 2005 年 3 月 29 日将显示为 '

描述的最后一行给出了您想要的内容,即将您的简单 DATE 替换为 DATE=(4MD-)。

要获取 A 和 L 记录的计数和总量:

利用

 INREC IFTHEN=(WHEN=INIT,OVERLAY=(position-after-end-of-record:Z,13Z,Z,13Z),

假设您的记录是 500 字节并且长度固定为 (501:Z,13Z,Z,13Z),

这将暂时(因为我们稍后会将它们砍掉)扩展记录。

然后使用两个 IFTHEN=(WHEN=(logical-expression) 来测试您的 A 和 L。如果 A,使用 OVERLAY 将 C'1' 放在位置 501 和从 502 开始的数量。如果 L,使用 OVERLAY 放置位置 515 中的 C'1' 和从 516 开始的金额。

修改您的 TRAILER1 以对所有这四个字段进行 TOT/TOTAL。这将为您提供 As 的计数和 As 的总量、Ls 的计数和 Ls 的总量。将 BUILD=(1,500) 添加到您的 OUTFIL 以将您的记录恢复为原始大小。

注意,我以 500 为例。使用记录的实际 LRECL。

如果您有可变长度记录,则需要稍作更改。

 OPTION COPY

 INREC IFTHEN=(WHEN=INIT,
                OVERLAY=(501:Z,13Z,Z,13Z)),
       IFTHEN=(WHEN=(2,1,CH,EQ,C'A'),
                OVERLAY=(501:C'1',370,13)),
       IFTHEN=(WHEN=(2,1,CH,EQ,C'A'),
                OVERLAY=(515:C'1',370,13))

 OUTFIL  REMOVECC,                                          
         TRAILER1=('FT',DATE,55X,COUNT=(EDIT=(IIITT)),
                   TOTAL=(501,1,ZD,EDIT=(IIITT)),   
                   TOTAL=(502,13,ZD,EDIT=(STTTTTTTTT.TT),       
                                               SIGNS=(+,-),
                   TOTAL=(515,1,ZD,EDIT=(IIITT)),   
                   TOTAL=(516,13,ZD,EDIT=(STTTTTTTTT.TT),       
                                               SIGNS=(+,-),
                   263X,TOTAL=(370,13,SFF,EDIT=(STTTTTTTTT.TT),       
                                               SIGNS=(+,-),                    
                                               LENGTH=13))  

我什至没有把它扔进机器里,但它应该很接近。

我不知道你想要新的数字在哪里,所以我只是把它们放到了 299 个空白的第一个可用区域。

您正在使用 OPTION COPY,根本不需要 SORTWK 文件。您将获得 1,500 多个您不需要的空间,但会坚持到步骤结束。

我建议您的网站使用工作空间的动态分配进行调查。根据您展示的 JCL 判断,它将大大减少空间争用。

您也不应该为输出文件 (SORTOUT) 指定任何 DCB 信息,因为 DFSORT 将提供所有这些信息,并且最好在一个地方完成,只是为了清楚起见并避免在维护时出现混淆/错误。

于 2014-10-21T22:46:25.247 回答