Синхронизировать сортировку, непарные записи файла File1 имеют пробелы для записей в файле F2. Можем ли мы заменить пробелы в этих столбцах нулями?
СОРТИРОВАТЬ:
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 BUILD=(1,36,C',',37,10,C',',27,10,SFF,SUB,37,10,SFF,
EDIT=(TTTTTT))
ВЫХОД IS: *2-й ряд 4-го столбца содержит пробелы, как непарные из 2-го файла, автоматически должен быть равен 0 с.
22680372 ,5102, 1, 1,000000
22222222 ,5105, 2, ,000002
Выход должен быть: * 2-й ряд 4-го столбца равен 0 или 0000 с, как непарный из 2-го файла, он должен быть 0 с автоматически.
22680372 ,5102, 1, 1,000000
22222222 ,5105, 2, 0,000002
1 ответ
Вам нужно условие, которое означает 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.