icetool 读取带有日期的输入文件并覆盖到另一个文件中
icetool read an input file with a date and overlay into another file
我有一个输入文件(80 个字符),日期在位置 1 到 10,格式为 YYYY-MM-DD。我想隔离该日期,然后将其写入另一个现有文件(可能使用覆盖 ??)。在此现有文件中,我希望日期替换 YYYY-MM-DD。这个 yyyy-mm-dd 位于输出文件中的位置 59。
我不确定我们是否可以一步完成,还是需要两步。
输入文件(80 个字符):
2018-06-28,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
我想覆盖输出文件参数 YYYY-MM-DD。
输出文件(80 个字符):
文件=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
预期输出文件结果:
文件=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.2018-06-28.QS
使用ICETOOL一步到位是可以达到预期效果的。
我做了以下假设:
- 两个输入数据集都是 LRECL 80。
- 两个输入数据集中的记录数相同。
输入文件1中的记录:
FILE=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST02_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST03_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST04_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST05_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST06_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
输入文件2中的记录:
2018-06-28,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-06-29,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-06-30,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-07-01,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-07-02,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-07-03,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
工作:
//Z31084A JOB 1,NOTIFY=&SYSUID
//SRTJK EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//INA DD DSN=Z31084.DATASET.A,DISP=SHR
//INB DD DSN=Z31084.DATASET.B,DISP=SHR
//JNA DD DSN=&&JNA,DISP=(,DELETE),
// SPACE=(CYL,(1,0),RLSE),
// DCB=(LRECL=84,RECFM=FB,BLKSIZE=0)
//JNB DD DSN=&&JNB,DISP=(,DELETE),
// SPACE=(CYL,(1,0),RLSE),
// DCB=(LRECL=84,RECFM=FB,BLKSIZE=0)
//OUT DD SYSOUT=*
//TOOLIN DD *
SORT FROM(INA) TO(JNA) USING(CTL1)
SORT FROM(INB) TO(JNB) USING(CTL1)
SORT JKFROM TO(OUT) USING(CTL3)
/*
//CTL1CNTL DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1:1,80,81:SEQNUM,4,ZD)
/*
//CTL3CNTL DD *
JOINKEYS F1=JNA,FIELDS=(81,4,A)
JOINKEYS F2=JNB,FIELDS=(81,4,A)
REFORMAT FIELDS=(F1:1,58,F2:1,10,F1:69,12)
SORT FIELDS=COPY
/*
输出:
FILE=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.2018-06-28.QS
FILE=/DATA/EXT/RECEPTION/TEST02_DTE/PASSING_DTE_PARAM_CTL.2018-06-29.QS
FILE=/DATA/EXT/RECEPTION/TEST03_DTE/PASSING_DTE_PARAM_CTL.2018-06-30.QS
FILE=/DATA/EXT/RECEPTION/TEST04_DTE/PASSING_DTE_PARAM_CTL.2018-07-01.QS
FILE=/DATA/EXT/RECEPTION/TEST05_DTE/PASSING_DTE_PARAM_CTL.2018-07-02.QS
FILE=/DATA/EXT/RECEPTION/TEST06_DTE/PASSING_DTE_PARAM_CTL.2018-07-03.QS
按照我的方法,我在两个输入文件的记录末尾填充序列号,并且我使用序列号作为 JOINKEYS 应用程序中的键。
希望对您有所帮助!
这是我解决问题的方法:
//EXTRCT EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD
DSN=INPUT.DATE.CTL.FILE,DISP=SHR
//SORTOUT DD
DSN=OUTPUT.FILE.TEST,
// DISP=(,CATLG),UNIT=SYSDA,SPACE=(TRK,(10,10),RLSE)
//SYSIN DD *
OPTION COPY
OUTFIL REMOVECC,
OUTREC FIELDS=
(C'FILE=/DATA/EXT/TEST01_DTE/PASSING_DTE_PARAM_CTL.',59:1,10,
C'.QS ')
/*
//
输出文件结果将是:
FILE=/DATA/EXT/TEST01_DTE/PASSING_DTE_PARAM_CTL.2019-02-20.QS
我不想使用连接密钥。
谢谢
我有一个输入文件(80 个字符),日期在位置 1 到 10,格式为 YYYY-MM-DD。我想隔离该日期,然后将其写入另一个现有文件(可能使用覆盖 ??)。在此现有文件中,我希望日期替换 YYYY-MM-DD。这个 yyyy-mm-dd 位于输出文件中的位置 59。
我不确定我们是否可以一步完成,还是需要两步。
输入文件(80 个字符): 2018-06-28,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
我想覆盖输出文件参数 YYYY-MM-DD。 输出文件(80 个字符): 文件=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
预期输出文件结果: 文件=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.2018-06-28.QS
使用ICETOOL一步到位是可以达到预期效果的。
我做了以下假设:
- 两个输入数据集都是 LRECL 80。
- 两个输入数据集中的记录数相同。
输入文件1中的记录:
FILE=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST02_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST03_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST04_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST05_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
FILE=/DATA/EXT/RECEPTION/TEST06_DTE/PASSING_DTE_PARAM_CTL.YYYY-MM-DD.QS
输入文件2中的记录:
2018-06-28,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-06-29,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-06-30,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-07-01,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-07-02,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2018-07-03,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
工作:
//Z31084A JOB 1,NOTIFY=&SYSUID
//SRTJK EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//INA DD DSN=Z31084.DATASET.A,DISP=SHR
//INB DD DSN=Z31084.DATASET.B,DISP=SHR
//JNA DD DSN=&&JNA,DISP=(,DELETE),
// SPACE=(CYL,(1,0),RLSE),
// DCB=(LRECL=84,RECFM=FB,BLKSIZE=0)
//JNB DD DSN=&&JNB,DISP=(,DELETE),
// SPACE=(CYL,(1,0),RLSE),
// DCB=(LRECL=84,RECFM=FB,BLKSIZE=0)
//OUT DD SYSOUT=*
//TOOLIN DD *
SORT FROM(INA) TO(JNA) USING(CTL1)
SORT FROM(INB) TO(JNB) USING(CTL1)
SORT JKFROM TO(OUT) USING(CTL3)
/*
//CTL1CNTL DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1:1,80,81:SEQNUM,4,ZD)
/*
//CTL3CNTL DD *
JOINKEYS F1=JNA,FIELDS=(81,4,A)
JOINKEYS F2=JNB,FIELDS=(81,4,A)
REFORMAT FIELDS=(F1:1,58,F2:1,10,F1:69,12)
SORT FIELDS=COPY
/*
输出:
FILE=/DATA/EXT/RECEPTION/TEST01_DTE/PASSING_DTE_PARAM_CTL.2018-06-28.QS
FILE=/DATA/EXT/RECEPTION/TEST02_DTE/PASSING_DTE_PARAM_CTL.2018-06-29.QS
FILE=/DATA/EXT/RECEPTION/TEST03_DTE/PASSING_DTE_PARAM_CTL.2018-06-30.QS
FILE=/DATA/EXT/RECEPTION/TEST04_DTE/PASSING_DTE_PARAM_CTL.2018-07-01.QS
FILE=/DATA/EXT/RECEPTION/TEST05_DTE/PASSING_DTE_PARAM_CTL.2018-07-02.QS
FILE=/DATA/EXT/RECEPTION/TEST06_DTE/PASSING_DTE_PARAM_CTL.2018-07-03.QS
按照我的方法,我在两个输入文件的记录末尾填充序列号,并且我使用序列号作为 JOINKEYS 应用程序中的键。
希望对您有所帮助!
这是我解决问题的方法:
//EXTRCT EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD
DSN=INPUT.DATE.CTL.FILE,DISP=SHR
//SORTOUT DD
DSN=OUTPUT.FILE.TEST,
// DISP=(,CATLG),UNIT=SYSDA,SPACE=(TRK,(10,10),RLSE)
//SYSIN DD *
OPTION COPY
OUTFIL REMOVECC,
OUTREC FIELDS=
(C'FILE=/DATA/EXT/TEST01_DTE/PASSING_DTE_PARAM_CTL.',59:1,10,
C'.QS ')
/*
//
输出文件结果将是:
FILE=/DATA/EXT/TEST01_DTE/PASSING_DTE_PARAM_CTL.2019-02-20.QS
我不想使用连接密钥。
谢谢