MAINFRAME: SORT в JCL для преобразования набора данных в формат CSV.

надеюсь, что вы все в порядке. У меня проблема, и если возможно, мне нужна ваша помощь.

Я работаю с Mainframe JCL, и у меня есть набор данных с записями; каждая запись имеет разные фиксированные столбцы, разделенные знаком «~» (мы используем это, поскольку в столбце NAME имена разделяются запятыми). Мне нужно преобразовать этот набор данных в формат файла CSV, поэтому он должен быть: 1) разделен запятой 2) с переменной длиной вместо фиксированной длины 3) Мне не нужны все столбцы, только 4 из них (и в порядке, отличном от исходного) 4) первый столбец должен быть другим 5) Если в имени есть (например: ПОСЛЕДНЕЕ ИМЯ, ИМЯ), используйте ""

Это пример входного файла:

ROLENAME~LID     ~NAME                  ~NONCNCL~ACCDATE ~SUSPEND
CARINQ  ~X       ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~AZBLCH  ~*** NOT FOUND ***     ~       ~        ~       
SOTHER  ~BZBWD4  ~SUAREZ, VICTOR        ~N      ~10/01/17~N      
CARONL  ~BZCJHS  ~CHURCH DAVID S        ~N      ~11/10/17~N      
CARONL  ~VZC2G1  ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~BZDKKF  ~PLAARDRTE ALLY        ~N      ~11/13/17~N      
SOTHER  ~HZDFGH  ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~JZFPOI  ~LOPEZ KAREN N         ~N      ~11/10/17~N      
CARONL  ~IZG0WZ  ~FOSHIL, RICHARD       ~N      ~11/13/17~N      
SOTHER  ~OZG3T2  ~CARLINE KECHUA        ~N      ~11/13/17~N      
CARONL  ~PZMMNB  ~BARELTINE, DUANE      ~N      ~11/13/17~N      
CARONL  ~PZNSWX  ~*** NOT FOUND ***     ~       ~        ~       
CARONL  ~RZPF5V  ~SLIMMORE JACK         ~N      ~10/12/17~N

Это пример выходного файла:

GMID,Name,Last Login Date,Role/Group 
X,*** NOT FOUND ***,,CARINQ
AZBLCH,*** NOT FOUND ***,,CARONL
BZBWD4,"SUAREZ, VICTOR",10/01/17,SOTHER
BZCJHS,CHURCH DAVID S,11/10/17,CARONL
VZC2G1,*** NOT FOUND ***,,CARONL
BZDKKF,PLAARDRTE ALLY,11/13/17,CARONL
HZDFGH,*** NOT FOUND ***,,SOTHER
JZFPOI,LOPEZ KAREN N,11/10/17,CARONL
IZG0WZ,"FOSHIL, RICHARD",11/13/17,CARONL
OZG3T2,CARLINE KECHUA,11/13/17,SOTHER
PZMMNB,"BARELTINE, DUANE",11/13/17,CARONL
PZNSWX,*** NOT FOUND ***,,CARONL
RZPF5V,SLIMMORE JACK,10/12/17,CARONL

Я пытаюсь использовать программу SORT для использования INREC PARSE и BUILD, но я не могу получить ее полностью, особенно для создания переменной поля вместо фиксированной длины и для изменения имени столбцов, которые в любом случае я мог бы объединить позже, если необходимо , не имеет большого значения (я бы не стал использовать EasyTrieve, так как я не очень хорошо с ним знаком). Есть ли у кого-нибудь пример этого? Я искал похожие случаи с помощью SORT, но не нашел. Я могу создать отчет, но только с фиксированными столбцами, я не могу найти способ сделать это переменная длина

Прошу прощения за длинный текст, но я хотел быть максимально ясным. Заранее большое спасибо! Хорошего дня / ночи!


person Jorge Spina    schedule 15.11.2017    source источник


Ответы (1)


Если вас не беспокоит заголовок, вы можете использовать:

OPTION COPY                              
INREC IFTHEN=(WHEN=INIT,BUILD=(1,15,31,15,46,15,SQZ=(SHIFT=LEFT))),      
      IFTHEN=(WHEN=INIT,FINDREP=(IN=C'~',OUT=C',')) 

Я предположил, что LRECL равен 80, а также предположил, что вам нужно всего 3 столбца, начиная с столбцов 1, 31 и 46, по 15 байтов каждый.

.

person user6542823    schedule 16.11.2017
comment
Спасибо! Это не сработало так, как есть, но дало мне несколько идей по исправлению некоторых ошибок. - person Jorge Spina; 16.11.2017
comment
@ Хорхе, если ответ полезен, рассмотрите возможность голосования за него. - person Bruce Martin; 17.11.2017
comment
Да ... но там написано, что у меня недостаточно репутации, чтобы это показать :( - person Jorge Spina; 18.11.2017