声明:早期文件是从远程服务器位置提取到大型机的。然后 这些文件内容是在顺序文件中获取并保存在大型机中的。但 有时,某些文件名包含空格。由于这项工作失败了 内容。
现在要解决这个问题,我们从服务器获取所有文件并分离好文件 和坏文件。现在我们只获取好的文件内容。
问题:在重命名文件时,我们将前缀Process_和Odate(从Control M获取)添加到文件名。 但早些时候它是通过unix代码在jcl中完成的。
伪代码: print“rename”$ 1“”“Process_”%% DAT“_”$ 1
我们从软件控制-M中获取ODATE。
Jcl代码:
//JOBNAME JOB (DEE),'Job Desc',CLASS=P,MSGCLASS=J,
// MSGLEVEL=(1,1),COND=(0,NE)
//* %%SET %%DAT = %%$ODATE
//STEP01 EXEC PROC1
PROC1代码:
//STEP02 EXEC PGM=SORT
//SORTIN DD DSN=DS.FILE1,
// DISP=SHR
//SORTOUT DD DSN=DS.FILE2,
// UNIT=SYSSF,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// SPACE=(27920,(29,6),RLSE),
// DISP=(NEW,CATLG,DELETE)
//SYSIN DD DSN=DS.PARM(PARM03),DISP=SHR
PARM03包含: 这里我创建unix代码来重命名文件:
SORT FIELDS=COPY
OUTFIL BUILD=(1:C'print "get " r_fi',18:SEQNUM, -
3,ZD,22:C'" //DD:upload"',/,1:C'print "rename " r_fi', -
21:SEQNUM,3,ZD,24:C' ', -
25:C' " " "Process_" %%DAT "_" r_fi',53:SEQNUM,3,ZD,80:X)
/*
我动态创建的unix代码: 这里取决于文件数p_fi01,生成p_fi02,p_fi03 ..... 我将unix代码保存在数据集中,并将其作为instream传递给运行。
问题是,它无法获取DAT变量中的值。
有什么办法,我可以将D的值从jcl传递到proc并将其附加到
在proc。中使用排序卡“处理_”。
示例数据: 获取文件File1.csv内容,然后重命名为Process_20140101_File1.csv
答案 0 :(得分:1)
假设你的其余代码都没问题,那么使用JPn就很简单了,这是一个特殊的DFSORT符号,它允许在控制卡中使用最多10个参数的单独值。
以下是一个例子:
// SET INPARM='ABC'
//*
//STEP0100 EXEC PGM=SORT,PARM='JP0"&INPARM"'
//SYSOUT DD SYSOUT=*
//SYMNOUT DD SYSOUT=*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC BUILD=(JP0)
//SORTIN DD *
IRRELEVANT DATA, JUST AN EXAMPLE
我已经使用SET来创建一个JCL符号,但是你已经使用了CONTROL-M,所以只需用你的CONTROL-M符号替换PARM上的& INPARM。
JPn表示JP0到JP9。三个独立的数据可能如下所示:
//STEP0100 EXEC PGM=SORT,PARM='JP0"&INPARM1",JP1"&INPARM2",JP2"&INPARM3"'
SYMNOUNT DD
是可选的,但非常非常有用,因为它会显示符号的翻译值。
假设您的其余代码是正确的,您可以进行此更改:
25:C' " " "Process_"',JP0,C'"_" r_fi',53:SEQNUM,3,ZD,80:X)
在EXEC卡上加入PARM,PARM='JP0"[yourControl-M-symbol]"'
SyncSort没有JPn,所以你很幸运,你有DFSORT。 SyncSort需要不同的技术。