Вам нужно условие, которое означает IFTHEN. У вас не может быть IFTHEN и BUILD в одном и том же INREC, но вы можете иметь несколько IFTHEN, и BUILD может быть частью IFTHEN.
IFTHEN=(WHEN=INIT указывает что-то, что должно быть сделано для каждой записи (безусловно).
IFTHEN=(WHEN=(логическое-выражение будет выполнено только в том случае, если условие истинно.
Каждый оператор BUILD создает полную новую промежуточную запись (промежуточную между вводом и выводом). OVERLAY влияет только на данные в указанной позиции (при условии отсутствия расширения записи).
Ваше условие будет заключаться в том, что 46-й байт записи является пробелом. Вы уже использовали SFF (вы пробовали другие предложения, особенно FS?), поэтому нет необходимости обнулять значение перед BUILD.
JOINKEYS FILES=F1,FIELDS=(5,4,A,10,20,A)
JOINKEYS FILES=F2,FIELDS=(1,4,A,6,20,A)
REFORMAT FIELDS=(F1:10,20,9,1,5,4,30,1,31,10,F2:27,10)
JOIN UNPAIRED,F1
INREC IFTHEN=(WHEN=INIT,
BUILD=(1,36,
C',',
37,10,
C',',
27,10,SFF,
SUB,
37,10,SFF,
EDIT=(TTTTTT))),
IFTHEN=(WHEN=(47,1,CH,EQ,C' '),
OVERLAY=(46:C'0'))
Я форматирую такие выражения не просто для развлечения, а для того, чтобы их было легче понять и поддерживать.
Хорошо, это решение было немного неуклюжим. Вы можете заменить INREC на это, которое показывает для этого типа данных альтернативу EDIT:
INREC IFTHEN=(WHEN=INIT,
BUILD=(1,36,
C',',
37,10,FS,TO=FS,LENGTH=10,
C',',
27,10,FS,
SUB,
37,10,FS,
TO=FS,LENGTH=8))
Это гораздо более естественно, так как пробел превращается в ноль с начальными пробелами вообще без условий и с использованием ссылок только на это поле в его позиции в записи REFORMAT.
person
Bill Woodger
schedule
20.11.2013