Я большой поклонник символов SORT/SYMNAMES, так приятно видеть, что вы используете это и довольно продвинутым способом. Вы указываете только одну начальную позицию для своей записи и относите все остальное в предыдущее поле, что является наиболее гибким способом сделать это.
Я не понимал, что можно использовать полуколону, поэтому я заменил ее на запятую. У вас не может быть пустой строки (вы можете оставить комментарий, * в первой колонке и оставить остальную часть строки пустой.
Я не знаю, почему у вас есть первый шаг, поэтому я упал это лучший способ использовать SYMNAMES DD с DSN =, а затем PDS/PDSE с именем участника, а затем ваши карты внутри члена. Для пояснения я использую DD *.
В вашем USING-файле у вас есть контрольные карты SORT, что верно, но они должны иметь пробел в колонке.
OUTREC on OUTFIL датирован, доступен для обратной совместимости, поэтому я изменил его на BUILD (который является синонимом OUTREC на OUTFIL и FIELDS на INREC и OUTREC - см. насколько менее запутанным является придерживаться просто BUILD?).
По умолчанию оператор SELECT ICETOOL сортирует данные в каждом поле ON, указанном в указанном порядке. Если ваши данные уже находятся в правильной последовательности, вы используете ИСПОЛЬЗОВАНИЕ (которое у вас уже есть) и укажите SORT FIELDS=COPY
или OPTION COPY
. Затем ваши данные не будут отсортированы.
//S01 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SYMNAMES DD *
LINK_REC,1,45
LINK_REFDATE,=,8,CH
LINK,*,16,CH
LINK_COLL,*,16,CH
LINK_TYPE,*,3,CH
LINK_LABEL,*,02,CH
LINK_P_LABEL,=,1,CH
LINK_S_LABEL,*,1,CH
//SYMNOUT DD SYSOUT=*
//IN2 DD *
1111111111111111111
1111111111111111111
2222222222222222222
//OU2 DD SYSOUT=*
//TOOLIN DD *
SELECT FROM(IN2) TO(OU2) ON(LINK) FIRST USING(CTL2)
//CTL2CNTL DD *
SORT FIELDS=COPY
OUTFIL FNAMES=OU2,
BUILD=(LINK_REFDATE,
16X,
LINK,
500X,
LINK_TYPE,
C'22')
Выше, с моими простыми тестовыми данными, производит то, что вы хотите. Было несколько других опечаток (например, OU2 DD), которые я исправил, чтобы запустить его.
Вам нужно взять кейс при вставке с вашего эмулятора. У вас нет DDD-кода NAMESOUT или OU2. Ваш OUTFIL и OUTREC начинаются в столбце 1. Чтобы ответить на ваш вопрос, посмотрите на sysout с шага. Вы увидите требуемый оператор SORT. Ваши данные уже упорядочены в этом отдельном поле? –
Исправлена опечатка. Кстати, мои данные уже отсортированы (по всему полю), когда они идут в IN2. – Jacopo