我希望下面的代码也适用于输入中的可变长度数据。所以,我可以在最后加上双引号。我不想使用COBOL。有可能吗?
ZZZZ.VVVV.FILE.CORR1包含以下记录: -
ABCDEFG_AAAAAA_BBB0001.csv
ABCDEFG_AAAAAA_BBB0002.csv
ABCDEFG_AAAAAA_BBB0003.csv
通过以下代码输出文件ZZZZ.VVVV.FILE.CORR2中的记录:
r_file1="ABCDEFG_AAAAAA_BBB0001.csv"
r_file2="ABCDEFG_AAAAAA_BBB0002.csv"
r_file3="ABCDEFG_AAAAAA_BBB0003.csv"
JCL代码是:
//STEPSRT5 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=ZZZZ.VVVV.FILE.CORR1, <ID>
// DISP=SHR
//SORTOUT DD DSN=ZZZZ.VVVV.FILE.CORR2, <OD>
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// SPACE=(27920,(29,6),RLSE),
// DISP=(NEW,CATLG,DELETE)
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1:C'r_file',7:SEQNUM,1,ZD,8:C'="',10:1,26,36:C'"',44X)
/*
答案 0 :(得分:2)
SORT FIELDS=COPY
INREC BUILD=(C'r_file',SEQNUM,1,ZD,C'="',5,44,80:X)
OUTREC FINDREP=(STARTPOS=14,IN=C' ',OUT=C'"',DO=1)
顺便说一句,这不是JCL,它们是SORT控制卡。您可以在手册中找到您网站SORT产品的所有详细信息。
INREC / OUTREC / OUTFIL只能包含BUILD,OVERLAY,IFTHEN或一个或多个IFTHEN。有两种方法可以实现,因为你想要无条件地使用两个函数就像上面那样,或者使用两个IFTHEN =(WHEN = NONE和IFTHEN的函数使用部分。
您的记录不可变。它们是固定长度的(或者您的现有代码不起作用)可能是80字节(如果不是80,则适当地更改80:X)。
请记住,您将获得具有10个以上输入记录的重复序列号(并且第十个将为您提供r_file0)。
您还可以查看SQZ(挤压),因为您的数据中没有嵌入的空白。
答案 1 :(得分:1)
尝试以下方法:
//STEP01 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
INREC BUILD=(C'r_file',SEQNUM,3,CSF,C'="',1,68,C'"')
OUTREC BUILD=(1,80,SQZ=(SHIFT=LEFT))
/*
//SORTIN DD *
ABCDEFG_AAAAAA_BBB0001.csv
ABCDEFG_AAAAAA_BBB0002.csv
ABCDEFG_AAAAAA_BBB0003.csv
ABCDEFG_AAAAAA_0702.csv
ABCDEFG_AAAAAA_AAAYZ0702.csv
ABCDEFG_AAAAAA_BBB.csv
ABCDEFG_AAAAAA_XXXXXXXAMY0702.csv
ABCDEFG_AAAAAA_YZ0702.csv
ABCDEFG_AAAAAA_C0702.csv
ABCDEFG_AAAAAA_0702.csv
ABCDEFG_AAAAAA_702.csv
ABCDEFG_AAAAAA_02.csv
ABCDEFG_AAAAAA_2.csv
/*
//SORTMSG DD SYSOUT=*
//
SORTOUT将包含:
r_file1="ABCDEFG_AAAAAA_BBB0001.csv"
r_file2="ABCDEFG_AAAAAA_BBB0002.csv"
r_file3="ABCDEFG_AAAAAA_BBB0003.csv"
r_file4="ABCDEFG_AAAAAA_0702.csv"
r_file5="ABCDEFG_AAAAAA_AAAYZ0702.csv"
r_file6="ABCDEFG_AAAAAA_BBB.csv"
r_file7="ABCDEFG_AAAAAA_XXXXXXXAMY0702.csv"
r_file8="ABCDEFG_AAAAAA_YZ0702.csv"
r_file9="ABCDEFG_AAAAAA_C0702.csv"
r_file10="ABCDEFG_AAAAAA_0702.csv"
r_file11="ABCDEFG_AAAAAA_702.csv"
r_file12="ABCDEFG_AAAAAA_02.csv"
r_file13="ABCDEFG_AAAAAA_2.csv"
INREC
建立了类似的记录:
r_file 10="ABCDEFG_AAAAAA_0702.csv "
诀窍是使用CFS
作为序列号,以便使用前导空格创建它们,这样我们就不会因为ZD
(SQZ
所需的方式修剪前导零而搞砸了。 {1}}使用PREBLANK=C'0'
删除前导零只是不起作用 - 它会删除所有零,包括imbeded和trailing)
下一个OUTREC
会挤出记录中的空格,留下您要求显示的文件名。
注意:此解决方案假定您的文件名不包含嵌入空格。如果他们这样做,就会有更多的修修补补。