MAINFRAME:JCL中的SORT将数据集转换为CSV格式

时间:2017-11-15 14:36:50

标签: csv sorting mainframe jcl

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

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

这是输入文件的示例:

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但是我无法完全得到它,特别是要创建一个字段变量而不是修复长度并更改列的名称,这在任何情况下我都是如果有必要可以在以后连接,并不是什么大不了(我想避免使用EasyTrieve,因为我并不熟悉它)。 有没有人有这方面的例子?我使用SORT查找了类似的案例,我无法找到任何案例。我可以创建报告,但只有固定列,我找不到这样做的方法变量lenght

对不起,我很抱歉,但我希望尽可能清楚。 非常感谢你提前! 祝你有一个美好的一天/晚上!

1 个答案:

答案 0 :(得分:0)

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

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个字节。