MAINFRAME:在JCL中排序,将数据集转换为CSV格式



希望你没事。我有问题,如果可能的话,我需要你的帮助。

我正在使用Mainframe JCL,我有一个包含记录的数据集;每个记录都有不同的固定列,用"~"分隔(我们使用它是因为在NAME列中,名称用逗号分隔)。我需要将该数据集转换为CSV文件格式,因此它需要:1) 用逗号分隔2) 具有可变长度而不是固定长度3) 我不需要所有的列,只需要其中的4列(与原来的顺序不同)4) 第一列必须不同5) 如果名称有,(例如:姓氏,name)使用">

这是一个输入文件的例子:

ROLENAME~LID     ~NAME                  ~NONCNCL~ACCDATE ~SUSPEND
CARINQ  ~X       ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~AZBLCH  ~*** NOT FOUND ***     ~       ~        ~       
SOTHER  ~BZBWD4  ~SUAREZ, VICTOR        ~N      ~10/01/17~N      
CARONL  ~BZCJHS  ~CHURCH DAVID S        ~N      ~11/10/17~N      
CARONL  ~VZC2G1  ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~BZDKKF  ~PLAARDRTE ALLY        ~N      ~11/13/17~N      
SOTHER  ~HZDFGH  ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~JZFPOI  ~LOPEZ KAREN N         ~N      ~11/10/17~N      
CARONL  ~IZG0WZ  ~FOSHIL, RICHARD       ~N      ~11/13/17~N      
SOTHER  ~OZG3T2  ~CARLINE KECHUA        ~N      ~11/13/17~N      
CARONL  ~PZMMNB  ~BARELTINE, DUANE      ~N      ~11/13/17~N      
CARONL  ~PZNSWX  ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~RZPF5V  ~SLIMMORE JACK         ~N      ~10/12/17~N

这是输出文件的示例:

GMID,Name,Last Login Date,Role/Group 
X,*** NOT FOUND ***,,CARINQ
AZBLCH,*** NOT FOUND ***,,CARONL
BZBWD4,"SUAREZ, VICTOR",10/01/17,SOTHER
BZCJHS,CHURCH DAVID S,11/10/17,CARONL
VZC2G1,*** NOT FOUND ***,,CARONL
BZDKKF,PLAARDRTE ALLY,11/13/17,CARONL
HZDFGH,*** NOT FOUND ***,,SOTHER
JZFPOI,LOPEZ KAREN N,11/10/17,CARONL
IZG0WZ,"FOSHIL, RICHARD",11/13/17,CARONL
OZG3T2,CARLINE KECHUA,11/13/17,SOTHER
PZMMNB,"BARELTINE, DUANE",11/13/17,CARONL
PZNSWX,*** NOT FOUND ***,,CARONL
RZPF5V,SLIMMORE JACK,10/12/17,CARONL

我试图使用程序SORT来使用INREC PARSE和BUILD,但我无法完全获得它,尤其是制作一个字段变量而不是固定长度,并更改列的名称,在任何情况下,如果必要的话,我可以稍后连接,这没什么大不了的(我想避免使用EasyTrive,因为我不太熟悉它)。有人有这样的例子吗?我用SORT查找类似的案例,但没有找到。我可以创建报告,但只有固定列,我找不到可变长度的方法

我很抱歉发了这么长的短信,但我想尽量说清楚。提前非常感谢!祝你白天/晚上愉快!

如果您不担心标头,可以使用:

OPTION COPY                              
INREC IFTHEN=(WHEN=INIT,BUILD=(1,15,31,15,46,15,SQZ=(SHIFT=LEFT))),      
IFTHEN=(WHEN=INIT,FINDREP=(IN=C'~',OUT=C',')) 

我假设LRECL为80,还假设您只需要从第1、31和46列开始的3列,每列15个字节。

最新更新