预告片中的日期格式

时间:2014-10-21 19:58:11

标签: mainframe dfsort

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格式显示当前日期,并且我已经显示了所有输入记录的计数和总数,我还想显示计数和总数第2栏中A或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.我已经将所有记录(费用+调整)的总数放在预告片中,现在我还要记录调整记录的总数和总数。请帮我解决实际的代码。

1 个答案:

答案 0 :(得分:0)

来自DFSORT应用程序编程指南

  

DATE =(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日,将出现在'2005-03-29'。

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

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

使用

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

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

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

然后使用两个IFTHEN =(WHEN =(逻辑表达式)来测试你的A和L.如果A,使用OVERLAY将C'1'放在位置501并且数量从502开始。如果是L,请使用OVERLAY将C'1'置于515位置并且金额从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将提供所有这些信息,并且最好只在一个地方完成,以便清楚并避免维护上的混淆/错误。