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.我已经将所有记录(费用+调整)的总数放在预告片中,现在我还要记录调整记录的总数和总数。请帮我解决实际的代码。
答案 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将提供所有这些信息,并且最好只在一个地方完成,以便清楚并避免维护上的混淆/错误。