Замаскировать среднее число, используя JCL

У меня есть рекрутинг, как это. не могли бы вы помочь кому-нибудь помочь мне?

У меня есть 16-значный длина файла в моем входном файле. если длина больше 13 цифр, то первые 4 цифры как есть и последние 4 цифры как есть и маскируют оставшееся число, если меньше 13, то оставьте номер как есть.

example
IP file

0000359681243354 
0000359681243354 
810176733 

OP

00003̶5̶9̶6̶8̶1̶2̶4̶3354 
00003̶5̶9̶6̶8̶1̶2̶4̶3354 
810176733

1 ответ

Изменить 1: В соответствии с предложениями @NicC в разделе "Комментарии" этого ответа, вы можете попробовать следующий код:

  INREC IFTHEN=(WHEN=INIT,BUILD=(1,16)), 
        IFTHEN=(WHEN=(13,1,CH,NE,X'40',AND,13,1,CH,NE,X'00'),OVERLAY=(5:8C'-'))
  SORT FIELDS=COPY

Кроме того, вы также можете попробовать следующий код.

Во-первых, мы используем OUTFIL с FTOV,VLTRIM=C' ' преобразовать входные записи в VB с RDW. Это полезно, потому что мы можем получить доступ к RDW, чтобы получить длину данных до первого непустого символа. Но как получить доступ к RDW? Смотрите следующий шаг.

Во-вторых, мы создаем запись в файле T2 с фактическими данными, за которыми следует длина данных (RDW находится в 1,2,BI, Вычтите 4 из 1,2,BI чтобы получить длину данных).

Наконец, используйте INREC IFTHEN проверить, является ли длина данных GE 13 или нет. Отформатируйте данные как требуется.

Примечание. Следующий код необходимо изменить для имен DD, положения поля длиной 16 цифр и других полей ввода в записи.

//STEP1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG  DD SYSOUT=*
//IN DD DSN=...  input file (FB)
//TEMP1 DD DSN=&&TEMP1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//TEMP2 DD DSN=&&TEMP2,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//OUT DD DSN=...  output file (FB)
//TOOLIN DD *
COPY FROM(IN) USING(CTL1)
COPY FROM(TEMP1) TO(TEMP2) USING(CTL2)
COPY FROM(TEMP2) TO(OUT) USING(CTL3)
/*
//CTL1CNTL DD *
  OUTFIL FNAMES=TEMP1,FTOV,VLTRIM=C' '
/*
//CTL2CNTL DD *
  OUTFIL FNAMES=TEMP2,VTOF,
    BUILD=(5,16,X,1,2,BI,SUB,+4,TO=ZD,LENGTH=2)
/*
//CTL3CNTL DD *
  INREC IFTHEN=(WHEN=(18,2,ZD,GE,13),BUILD=(1:1,4,5:8C'-',13:13,4),
        IFTHEN=(WHEN=(18,2,ZD,LT,13),BUILD=(1:1,6))
  SORT FIELDS=COPY
Другие вопросы по тегам