我有一个带有逗号分隔记录的输入 每个字段都有不同的变量长度 例子 5467,2,567.82 243,10,856
现在我希望输出写成如下,输出中的第一个字段长度应为 10,第二个字段长度应为 15,第三个字段长度应为 15,并带有前导零
订单 0000005467 计数 000000000000002 金额 000000000567.82 订单 0000000243 数量 000000000000010 金额 000000000000856
我在jcl下面尝试过,但金额字段没有填充到右对齐,它填充到左对齐为567820000000.00
//STEP1 EXEC PGM=SYNCSORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=input,DISP=SHR
//SORTOUT DD DSN=output1,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
//SYSIN DD *
OPTION COPY
INREC PARSE=(%00=(ENDBEFR=C',',FIXLEN=10),
%01=(ENDBEFR=C',',FIXLEN=15),
%02=(FIXLEN=15)),
BUILD=(%00,%01,%02)
OUTREC BUILD=(1,10,UFF,M11,LENGTH=10,
11,15,UFF,M11,LENGTH=15,
26,10,ZD,EDIT=(TTTTTTTT.TT))
/*
//STEP2 EXEC PGM=SYNCSORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=output1,DISP=SHR
//SORTOUT DD DSN=outputfinal,
// DISP=(NEW,CATLG,DELETE),
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=TSO.TESTFIS.CDS.CNTRL.RPTS.TT61824,DISP=SH
//SORTOUT DD DSN=TSO.TESTFIS.CDS.CNTRL.RPTS.TT61824.FINALB,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
//SYSIN DD *
OPTION COPY
INREC PARSE=(%00=(FIXLEN=10),
%01=(FIXLEN=15),
%02=(FIXLEN=15)),
BUILD=(C'ORDER # ',
%00,
C' COUNT = ',
%01,
C' AMOUNT = ',
%02)
/*
输出应该是 订单 0000005467 计数 000000000000002 金额 000000000567.82 订单 0000000243 数量 000000000000010 金额 000000000000856
您的输入既有带小数点的数字,也有纯整数。所以你需要以不同的方式处理它们
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
5467,2,567.82
243,10,856
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
* parse the comma separated fields
INREC IFTHEN=(WHEN=INIT,
PARSE=(%01=(ENDBEFR=C',',FIXLEN=10),
%02=(ENDBEFR=C',',FIXLEN=15),
%03=(ENDBEFR=C',',FIXLEN=15)),
BUILD=(%01,UFF,M11,LENGTH=10,
%02,UFF,M11,LENGTH=15,
%03)),
* Check if the amount has decimal dot and parse it as number & decimal
IFTHEN=(WHEN=(26,15,SS,EQ,C'.'),
PARSE=(%04=(ABSPOS=26,ENDBEFR=C'.',FIXLEN=12),
%05=(FIXLEN=02)),
OVERLAY=(26:%04,UFF,M11,LENGTH=12,
C'.',
%05,UFF,EDIT=(TT))),
* There is no decimal dot, so just pad leading zeroes
IFTHEN=(WHEN=NONE,
OVERLAY=(26:26,15,UFF,M11,LENGTH=15))
* Write the final output
OUTREC BUILD=(C'ORDER ',01,10,
C' COUNT ',11,15,
C' AMOUNT ',26,15)
/*
上面的输出是
ORDER 0000005467 COUNT 000000000000002 AMOUNT 000000000567.82
ORDER 0000000243 COUNT 000000000000010 AMOUNT 000000000000856