Синхронизировать сортировку, непарные записи файла 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.

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