使用DFSORT将符号值传递给文件

时间:2014-01-31 13:35:17

标签: jcl dfsort

声明:早期文件是从远程服务器位置提取到大型机的。然后 这些文件内容是在顺序文件中获取并保存在大型机中的。但 有时,某些文件名包含空格。由于这项工作失败了 内容。

现在要解决这个问题,我们从服务器获取所有文件并分离好文件 和坏文件。现在我们只获取好的文件内容。

问题:在重命名文件时,我们将前缀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

1 个答案:

答案 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需要不同的技术。