使用SORT在现有数据末尾附加数据

时间:2013-10-14 19:34:46

标签: sorting mainframe dfsort

我希望下面的代码也适用于输入中的可变长度数据。所以,我可以在最后加上双引号。我不想使用COBOL。有可能吗?

  1. ZZZZ.VVVV.FILE.CORR1包含以下记录: -

    ABCDEFG_AAAAAA_BBB0001.csv  
    ABCDEFG_AAAAAA_BBB0002.csv  
    ABCDEFG_AAAAAA_BBB0003.csv 
    
  2. 通过以下代码输出文件ZZZZ.VVVV.FILE.CORR2中的记录:

    r_file1="ABCDEFG_AAAAAA_BBB0001.csv"  
    r_file2="ABCDEFG_AAAAAA_BBB0002.csv"  
    r_file3="ABCDEFG_AAAAAA_BBB0003.csv" 
    
  3. 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)
    /*
    

2 个答案:

答案 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作为序列号,以便使用前导空格创建它们,这样我们就不会因为ZDSQZ所需的方式修剪前导零而搞砸了。 {1}}使用PREBLANK=C'0'删除前导零只是不起作用 - 它会删除所有零,包括imbeded和trailing)

下一个OUTREC会挤出记录中的空格,留下您要求显示的文件名。

注意:此解决方案假定您的文件名不包含嵌入空格。如果他们这样做,就会有更多的修修补补。