Добавить данные в конце существующих данных с помощью SORT

Я хочу, чтобы приведенный ниже код работал для данных переменной длины также при вводе. Так что я могу добавить двойную кавычку в конце. Я не хочу использовать КОБОЛ. Является ли это возможным?

  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" 
    

Код 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 ответа

 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 (сжатие), так как у вас нет встроенных пробелов в ваших данных.

Попробуйте следующее:

//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 с PREBLANK=C'0' избавиться от ведущих нулей просто не работает - он избавляется от всех нулей, включая пропущенные и конечные)

следующий OUTREC сжимает пробелы из записи, оставляя имя файла так, как вам требуется.

Примечание. Это решение предполагает, что имена ваших файлов не содержат встроенных пробелов. Если они это сделают, еще многое предстоит сделать.

Другие вопросы по тегам