首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DFSORT将符号值传递到文件

使用DFSORT将符号值传递到文件
EN

Stack Overflow用户
提问于 2014-01-31 21:35:17
回答 1查看 5K关注 0票数 0

语句:以前的文件从远程服务器位置提取到大型机。然后获取这些文件的内容,并以顺序文件的形式保存在主机上。但有时,有些文件名包含空格。由于此作业在获取其内容时失败。

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

问题:在重命名文件时,我们在文件名中添加了前缀Process_和Odate(从控件M获取)。但早些时候,它是通过unix代码在jcl中完成的,如下所示。

伪代码:打印"rename“$1”"Process_“%%DAT "_”$1

我们正在从一个软件控件-M获取ODATE。

Jcl代码:

代码语言:javascript
复制
//JOBNAME JOB (DEE),'Job Desc',CLASS=P,MSGCLASS=J,
//       MSGLEVEL=(1,1),COND=(0,NE)                           
//* %%SET  %%DAT = %%$ODATE
//STEP01 EXEC PROC1

PROC1代码:

代码语言:javascript
复制
//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代码来重命名文件:

代码语言:javascript
复制
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代码保存在一个dataset中,并将其作为instream传递以供运行。

问题是,它无法获取DAT变量中的值。有没有什么办法,我可以把D的值从jcl传递给proc,并附加一个

"Process_“在proc中使用排序卡。

示例数据:获取文件File1.csv内容,然后将其重命名为Process_20140101_File1.csv

EN

回答 1

Stack Overflow用户

发布于 2014-02-01 19:50:55

假设代码的其余部分都是OK的,那么使用JPn的DFSORT就相当简单了。DFSORT是一种特殊的DFSORT符号,允许在控制卡中使用多达10个参数的分割值。

下面是一个示例:

代码语言:javascript
复制
// 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创建了自己的符号,所以只需将PARM上的&INPARM替换为您的CONTROL-M符号即可。

JPn通过JP9表示JP0。三个独立的数据片段可能如下所示:

代码语言:javascript
复制
//STEP0100 EXEC PGM=SORT,PARM='JP0"&INPARM1",JP1"&INPARM2",JP2"&INPARM3"'

SYMNOUNT DD是可选的,但非常非常有用,因为它将显示符号的翻译值。

假设您的其余代码是正确的,您将进行以下更改:

代码语言:javascript
复制
25:C' " " "Process_"',JP0,C'"_" r_fi',53:SEQNUM,3,ZD,80:X) 

并在EXEC卡上包含PARM,PARM='JP0"[yourControl-M-symbol]"'

SyncSort没有JPn,所以你很幸运你有DFSORT。SyncSort需要一种不同的技术。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21481400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档