IEBGENER с несколькими входными файлами - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в мэйнфреймах.У меня есть работа, и этот шаг в JCL кажется немного запутанным.

//*----------------------------------------------------------
//*       IEBGENER
//*----------------------------------------------------------
//GENER02  EXEC PGM=IEBGENER,COND=(8,LT)                     
//SYSPRINT DD   SYSOUT=I                                     
//SYSUT1   DD   DSN=&&FILE1,DISP=(OLD,DELETE)                
//         DD   DSN=&&FILE2,DISP=(OLD,DELETE)                
//         DD   DSN=&&FILE3,DISP=(OLD,DELETE)                
//SYSUT2   DD   DSN=&&OUT1,DISP=(NEW,PASS),              
//         SPACE=(TRK,(100,100),RLSE),UNIT=WORK,             
//         DCB=(LRECL=90,BLKSIZE=22950,RECFM=FB)             
//SYSIN    DD   *                                            
  GENERATE MAXLITS=100                                       
  RECORD FIELD=(20,'                    ',,1),               
         FIELD=(28,'                            ',,21),      
         FIELD=(16,'AB110000AB012561',,49),                  
         FIELD=(26,'                          ',,65)         
/*      

Я знаю, IEBGENER - это утилита копирования, но с 3 входными файлами и этим параметром, каким именно будет выходной файл?Это объединяет 3 файла?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Чтобы ответить на ваш второй вопрос о том, как будет выглядеть вывод.То, как это закодировано, похоже, что оно удаляет поля из вывода и помещает пробелы на их место.В основном это будет что-то вроде этого:

Входная запись

         1         2         3         4         5         6         7         8         9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
This is my input data to IEBGENER so I can see what the output records will look like ....

Выходная запись
Примечание: _ представляетпробелы вставляются на основе ваших служебных операторов FIELD.

         1         2         3         4         5         6         7         8         9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
________________________________________________AB110000AB012561__________________________

По сути, задание IEBGENER не копирует какие-либо данные, но помещает один литерал в выходной набор данных.

Похоже, вам также нуженMAXFLDS = 4 или вы получите сообщение:

IEB342I INVALID SPACE ALLOCATION

0 голосов
/ 09 ноября 2018

Если вы хотите попрактиковаться с реальной системой мэйнфреймов, я предлагаю систему MVS 3.8 Турция 4.Он начинается с Free MVS 3.8 с 1980 года с исправлениями системы до мая 1985 года, работает на эмуляторе с программами, разработанными пользователем, чтобы заменить некоторые защищенные авторским правом программы, другие отсутствуют.99,99% того, что вы можете делать в z / OS 2.3, некоторые функции были обновлены, а другие были добавлены.Некоторые проекты, использующие новые функции, не будут работать.

0 голосов
/ 23 октября 2018

Краткий ответ - да.z / OS объединяет все карты DD в операторе DD в один логический пакет, а затем обрабатывает их вместе.См. https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.ieab600/iea3b6_Syntax4.htm

Более длинный ответ: вы смотрите на вещи с точки зрения файла (набор данных в терминологии z / OS);Большая часть z / OS не структурирована таким образом.Утилиты z / OS склонны смотреть на вещи с некоторой точки зрения, ориентированной на данные, обычно называемые записями или блоками записей;в приведенном выше примере IEBGENER собирается просмотреть каждую запись, переданную через SYSUT1, выполнить некоторую обработку (задокументировано здесь: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.idau100/u1132.htm),, а затем записать вывод в SYSUT2. IEBGENER даже не знает, что естьнесколько наборов входных данных: он просто запрашивает у операционной системы следующую запись из SYSUT1, и z / OS ответит, а затем IEBGENER говорит z / OS записать выходную запись в SYSUT2.

...