Вычтите значение в столбце A файла A из столбца B файла B, используя JCL sorting/syncsort. ОТОБРАЗИТЬ РЕЗУЛЬТАТ В ФАЙЛЕ3 (новый файл)

Есть входной файл1:

 C1   C2        C3
 5102;22680372 =0000000001
 5111;21840112 =0000000002
 5363;21980235 =0000000002
 5363;22700216 =0000000001

Входной файл 2:

 5111;21840112 =0000000002
 5363;21980235 =0000000001
 5363;22700216 =0000000001  

Ожидаемый результат: должен быть отсортирован по нижнему пути,

   JOINKEYS FILES=F1,FIELDS=(1,04,A,6,8,A,16,10,a) 
   JOINKEYS FILES=F2,FIELDS=(1,04,A,6,8,A,16,10,a) 
   REFORMAT FIELDS=(F1:1,.. and... ) 

Мне нужен выходной файл с этим swquence

   File1 C1  File1 C2    file1C3     [file1C3 - file2 C3] value
   5102;     22680372   =0000000001  =00000             *(no records in second file for it)
   5111;     21840112   =0000000002  =00000             *(1-1 =0)
   5363;     21980235   =0000000002  =00001             *(2-1= 1)
   5363;      22700216  =0000000001  =00000             *(1-1 =0) 
  • просто чтобы объяснить, что вы пытаетесь это прямо сейчас

    ВАРИАНТ КОПИЯ
    СОВМЕСТНЫЕ КЛЮЧИ F1 = INA, FIELDS = (1,4, A, 6,8, A)
    JOINKEYS F2 = INB, FIELDS = (1,4, A, 6,8, A)
    ПОЛЕ РЕФОРМА = (F1: 1,25, F2: 16,10)
    INREC BUILD = (1,25,26,10, SFF, SUB, 36,10, SFF, EDIT = (STTTTTT))

Результат:

   5060;22222222 =0000000001 (blank)  i just need 0001 - nothin(0) = 1 simply 1 here         
   5102;22680372 =0000000001;000000000
   5105;22222222 =0000000002 (blank)   need 2 here same 2-0 or nothing(unmatched) = 2         

1 ответ

Решение

Вы близки. Однако SFF не нужен. Это подписанный свободный формат, и у вас есть неподписанный номер фиксированного формата. Используйте ZD. Ваш EDIT недостаточно велик для 10 цифр. Это не проблема, если ваш результат никогда не может, и я имею в виду, никогда не превышать шесть цифр. С "=", который у вас нет кода для создания, неясно, где вы ожидаете, что знак будет идти (он лидирует в поле в данный момент).

Имея то, что у вас есть, вы получите только те записи, которые совпадают между двумя файлами. Тебе понадобится:

 JOIN UNPAIRED,F1

После второго JOINKEYS, если вы хотите, чтобы несравненные записи из F1 в вашем выводе.

Если у вас нет совпадения, вычитание будет проблематичным, поэтому вам понадобится некоторый код для этого. Как вы код, который зависит от того, есть ли у вас DFSORT или же SyncSort,

Если один или оба входных файла, вы должны указать SORTED в соответствующей инструкции JOINKEYS. С DFSORT, но нет SyncSortВы также можете указать NOSEQCHK.

С дальнейшей информацией мы прогрессируем:

  OPTION COPY 
  JOINKEYS F1=INA,FIELDS=(1,4,A,6,8,A) 
  JOINKEYS F2=INB,FIELDS=(1,4,A,6,8,A) 

  JOIN UNPAIRED,F1 

  REFORMAT FIELDS=(F1:1,25,F2:16,10),FILL=X'FF' 

  INREC IFTHEN=(WHEN=(35,1,CH,EQ,X'FF'), 
                 OVERLAY=(26:C'+',10C'0')), 
        IFTHEN=(WHEN=NONE, 
                     OVERLAY=(26:16,10,ZD,SUB,26,10,ZD, 
                              EDIT=(STTTTTTTTTT),SIGNS=(+,-))) 

UNPAIRED,F1 означает, что вместе с парными записями (совпадениями) непарные записи из F1 представляются главной задаче.

REFORMAT оператор определяет запись данных, которую будет использовать основная задача. В этом примере включена вся запись F1 (F1:1,25) и только 10-значное число из F2 (F2:16,10).

FILL= говорит SORT, что устанавливать значения для любой отсутствующей записи в случае непарной записи. В этом случае 26,10 из REFORMAT запись будет установлена ​​на все X'FF'.

IFTHEN=(WHEN=(logical-expression затем используется для идентификации X'FF 'в позиции один из числа из данных F2. Если присутствует X'FF ', то совпадения нет. В этом случае байты, полученные из F2, устанавливаются на любое значение по умолчанию, которое вы действительно хотите.

IFTHEN=(WHEN=NONE активен для любых записей, которые не удовлетворяют IFTHEN=(WHEN=(logical-expression, Расчет сделан, и результат расчета отформатирован.

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

Если вы хотите, чтобы выходные данные из главной задачи были в другом порядке, вы просто кодируете оператор SORT и удаляете OPTION COPY.

Точный формат вывода, который вы хотите, неясен, но вы должны быть в состоянии исправить это для того, что вы хотите.

Вам нужно получить руководство по SyncSort. Они свободно доступны в формате PDF для сайтов с лицензией SyncSort. Если никто не знает, как его дать, выясните, кто является контактным лицом в SyncSort, и попросите их обратиться за помощью в службу поддержки SyncSort. Укажите только пару деталей, и вы получите копию, вероятно, по электронной почте.

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