JCL – IEBGENER

Les exemples qui suivent illustrent certaines des utilisations d’IEBGENER.
Vous pouvez utiliser le tableau 1 comme guide de référence rapide pour les exemples IEBGENER.
Les nombres dans la colonne Exemple font référence aux exemples qui suivent.

Tableau 1. Répertoire d’exemple IEBGENER

OpérationOrganisation du jeu de données PériphériqueCommentairesExemple
PRINTSéquentielDisque et imprimante
Le jeu de données est répertorié sur une imprimante.Exemple 1 : Impression d’un ensemble de données séquentielles
CONVERTSéquentiel à partitionnéBande et disqueSortie bloquée.
Trois membres doivent être créés.
Exemple 2 : Création d’un ensemble de données partitionnées à partir d’une entrée séquentielle
MERGESéquentiel vers partitionnéDisqueSortie bloquée.
Deux membres doivent être fusionnés dans l’ensemble de données existant.
Exemple 3 : convertir une entrée séquentielle en membres partitionnés
COPYSéquentielInstream et bandeSortie bloquée.Exemple 4 : entrée en flux, ensemble de données séquentielles sur volume de bande
COPY and reblockSéquentielDisque et bandeEffectue une copie de bande bloquée à partir du disque ; demande de tampon explicite.Exemple 5 : Produire une copie bloquée sur bande à partir d’un fichier disque non bloqué
COPY avec éditionSéquentielbandeSortie bloquée.
Ensemble de données édité comme un groupe d’enregistrements.
Exemple 6 : Modifier et copier un ensemble de données d’entrée séquentielle avec des étiquettes
COPY avec éditionSéquentielFichier z/OS UNIX sur disqueSortie bloquée.
Nouvelle longueur d’enregistrement spécifiée pour l’ensemble de données de sortie.
Deux groupes d’enregistrements spécifiés.
Exemple 7 : Modification et copie d’un fichier z/OS UNIX séquentiel dans un ensemble de données séquentiel
COPY avec validation DBCSSéquentielDisqueLes données DBCS sont validées et modifiées avant la copie.Exemple 8 : Éditer les données du jeu de caractères à deux octets

Les exemples qui utilisent un disque ou une bande à la place des numéros de périphérique réels doivent être modifiés avant utilisation.
Les numéros de périphérique réels dépendent de la manière dont votre installation a défini les périphériques sur votre système.

EXEMPLE

Exemple 1 : Impression d’un jeu de données séquentiel

Dans cet exemple, un ensemble de données séquentielles est imprimé.
La sortie imprimée est alignée à gauche, avec un enregistrement de 80 octets apparaissant sur chaque ligne de sortie imprimée.

//PRINT    JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
//SYSUT1   DD  DSNAME=D80.DATA,DISP=SHR
//SYSUT2   DD  SYSOUT=A

Les instructions de contrôle des travaux sont les suivantes :

  • SYSIN DD définit un jeu de données factice.
    Étant donné qu’aucune modification n’est effectuée, aucune instruction de contrôle d’utilitaire n’est requise.
  • SYSUT1 DD définit le jeu de données séquentielles d’entrée.
  • SYSUT2 DD indique que la sortie doit être écrite sur le périphérique de sortie du système (imprimante).
    IEBGENER copie LRECL et RECFM à partir de l’ensemble de données SYSUT1 et le système détermine un BLKSIZE.

Exemple 2 : Création d’un ensemble de données partitionné à partir d’une entrée séquentielle

Dans cet exemple, un ensemble de données partitionné (composé de trois membres) est créé à partir d’une entrée séquentielle.

//TAPEDISK JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=INSET,UNIT=tape,LABEL=(,SL),
//             DISP=(OLD,KEEP),VOLUME=SER=001234
//SYSUT2   DD  DSNAME=NEWSET,UNIT=disk,DISP=(,KEEP),
//             VOLUME=SER=111112,SPACE=(TRK,(10,5,5)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000)
//SYSIN    DD  *
     GENERATE  MAXNAME=3,MAXGPS=2
       MEMBER  NAME=MEMBER1
GROUP1 RECORD  IDENT=(8,'FIRSTMEM',1)
       MEMBER  NAME=MEMBER2
GROUP2 RECORD  IDENT=(8,'SECNDMEM',1)
       MEMBER  NAME=MEMBER3
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée (INSET).
    L’ensemble de données est le premier ensemble de données sur un volume de bande.
  • SYSUT2 DD définit le jeu de données partitionné en sortie (NEWSET).
    L’ensemble de données doit être placé sur un volume de disque.
    Dix pistes d’espace primaire, cinq pistes d’espace secondaire et cinq blocs (256 octets chacun) d’espace de répertoire sont alloués pour permettre une expansion future de l’ensemble de données.
    Les enregistrements de sortie sont bloqués pour réduire l’espace requis par l’ensemble de données.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    Les instructions de contrôle d’utilitaire sont utilisées pour créer des membres à partir de données d’entrée séquentielles ; les déclarations ne spécifient aucune modification.
  • GENERATE indique que trois noms de membre sont inclus dans les instructions MEMBER suivantes et que le paramètre IDENT apparaît deux fois dans les instructions RECORD suivantes.
  • La première instruction MEMBER affecte un nom de membre (MEMBER1) au premier membre.
  • La première instruction RECORD (GROUP1) identifie le dernier enregistrement à placer dans le premier membre.
    Le nom de cet enregistrement (FIRSTMEM) apparaît dans les huit premières positions de l’enregistrement d’entrée.
  • Les instructions MEMBER et RECORD restantes définissent les deuxième et troisième membres.
    Notez que, comme il n’y a pas d’instruction RECORD associée à la troisième instruction MEMBER, le reste du fichier d’entrée sera chargé en tant que troisième membre.

Exemple 3 : Convertir une entrée séquentielle en membres partitionnés

Dans cet exemple, l’entrée séquentielle est convertie en deux membres partitionnés.
Les membres nouvellement créés sont fusionnés dans un ensemble de données partitionné existant.
Les étiquettes utilisateur sur l’ensemble de données d’entrée sont transmises à la routine d’exit utilisateur.

//DISKTODK JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=INSET,UNIT=disk,DISP=(OLD,KEEP),
//             VOLUME=SER=111112,LABEL=(,SUL)
//SYSUT2   DD  DSNAME=EXISTSET,UNIT=disk,DISP=(MOD,KEEP),
//             VOLUME=SER=111113
     GENERATE  MAXNAME=3,MAXGPS=1
        EXITS  INHDR=ROUT1,INTLR=ROUT2
       MEMBER  NAME=(MEMX,ALIASX)
GROUP1 RECORD  IDENT=(8,'FIRSTMEM',1)
       MEMBER  NAME=MEMY

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée (INSET).
    L’ensemble de données d’entrée, qui réside sur un volume de disque, possède des étiquettes d’utilisateur standard.
  • SYSUT2 DD définit le jeu de données partitionné en sortie (EXISTSET).
    Les membres créés au cours de cette étape de travail sont fusionnés dans l’ensemble de données partitionné.
  • L’instruction SYSIN DD est omise.
    Comme la ligne GENERATE ne commence pas par //, le système suppose qu’elle est précédée d’une ligne //SYSIN DD *.
    SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    Les instructions de contrôle d’utilitaire sont utilisées pour créer des membres à partir de données d’entrée séquentielles ; les déclarations ne spécifient aucune modification.
    Un /* à la fin de tout ensemble de données DD * est inutile car une instruction JCL ou la fin du flot de travaux marque la fin de l’ensemble de données du flux d’entrée.
  • GENERATE indique qu’un maximum de trois noms et alias sont inclus dans les instructions MEMBER suivantes et qu’un paramètre IDENT apparaît dans une instruction RECORD suivante.
  • EXITS définit les routines utilisateur qui doivent traiter les étiquettes utilisateur.
  • La première instruction MEMBER affecte un nom de membre (MEMX) et un alias (ALIASX) au premier membre.
  • L’instruction RECORD identifie le dernier enregistrement à placer dans le premier membre.
    Le nom de cet enregistrement (FIRSTMEM) apparaît dans les huit premières positions de l’enregistrement d’entrée.
  • La seconde instruction MEMBER affecte un nom de membre (MEMY) au second membre.
    Le reste de l’ensemble de données d’entrée est inclus dans ce membre.

Exemple 4 : Entrée In-Stream, données séquentielles définies sur le volume de bande

Dans cet exemple, un ensemble de données séquentielles d’entrée en flux est copié sur un volume de bande.

//CDTOTAPE JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
//SYSUT2   DD  DSNAME=OUTSET,UNIT=tape,LABEL=(,SL),
//             DISP=(,KEEP),VOLUME=SER=001234,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000)
//SYSUT1   DD  *
  (in-stream data)
/*

Les instructions de contrôle des tâches sont les suivantes :

  • SYSIN DD définit un jeu de données factice.
    Aucune modification n’est effectuée ; par conséquent, aucune instruction de contrôle d’utilitaire n’est nécessaire.
  • SYSUT2 DD définit le jeu de données de sortie, OUTSET.
    L’ensemble de données est écrit sur un volume de bande avec des étiquettes standard IBM.
    L’ensemble de données doit résider en tant que premier (ou unique) ensemble de données sur le volume.
  • SYSUT1 DD définit les données en flux qui sont en fait un ensemble de données JES SYSIN.
    L’ensemble de données ne contient aucune déclaration.

Exemple 5 : Produire une copie bloquée sur bande à partir d’un fichier disque non bloqué

Dans cet exemple, une copie bloquée sur bande est réalisée à partir d’un fichier disque séquentiel non bloqué.
Étant donné que l’ensemble de données de disque a une taille de bloc relativement petite, le nombre de tampons explicitement demandés est supérieur à la valeur par défaut de cinq.
Cela améliore les performances en permettant un plus grand chevauchement de la lecture de l’ensemble de données SYSUT1 avec l’écriture de l’ensemble de données SYSUT2.

//COPYJOB  JOB
//STEP1    EXEC PGM=IEBGENER,REGION=318K
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
//SYSUT1   DD  DSNAME=INPUT,UNIT=disk,
//             DISP=OLD,VOL=SER=X13380,
//             DCB=(BUFNO=20,RECFM=F,LRECL=2000,BLKSIZE=2000)
//SYSUT2   DD  DSNAME=OUTPUT,UNIT=tape,DISP=(NEW,KEEP),
//             DCB=(RECFM=FB,LRECL=2000,BLKSIZE=32000)

Les instructions de contrôle de job sont les suivantes :

  • L’instruction EXEC nomme le programme IEBGENER et spécifie la taille de la région de stockage virtuel requise.
    (Le calcul de la taille de la région est décrit dans le tableau 1.)
  • L’instruction SYSIN DD est factice, car aucune modification ne doit être effectuée.
  • L’instruction SYSUT1 DD identifie un fichier disque d’entrée.
    Normalement, les informations DCB RECFM, LRECL et BLKSIZE ne doivent pas être spécifiées dans l’instruction DD pour un fichier de disque existant car les informations existent dans l’étiquette d’ensemble de données dans le VTOC ; il est spécifié dans cet exemple pour illustrer le contraste avec l’ensemble de données de sortie.
    Les informations de série sur l’unité et le volume pourraient être omises si l’ensemble de données était catalogué.
    Les informations DCB spécifient BUFNO = 20 pour permettre la lecture de jusqu’à vingt blocs à chaque rotation du disque, en supposant que la piste du disque contiendra autant de blocs.
  • L’instruction SYSUT2 DD identifie le jeu de données de bande de sortie et spécifie une taille de bloc de 32 000 octets.
    La valeur par défaut de cinq tampons devrait être suffisante pour suivre le rythme de l’entrée.

Exemple 6 : Modification et copie d’un ensemble de données d’entrée séquentiel avec étiquettes

Dans cet exemple, un ensemble de données d’entrée séquentiel est modifié et copié.

//TAPETAPE JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=OLDSET,UNIT=tape,DISP=(OLD,KEEP),
//             VOLUME=SER=001234,LABEL=(3,SUL)
//SYSUT2   DD  DSNAME=NEWSET,UNIT=tape,DISP=(NEW,PASS),
//             DCB=(RECFM=FB,LRECL=80),
//             VOLUME=SER=001235,LABEL=(,SUL)
//SYSIN    DD  *
     GENERATE  MAXFLDS=3,MAXLITS=11
       RECORD  FIELD=(10,'**********',,1),
               FIELD=(5,1,HE,11),FIELD=(1,'=',,16)
        EXITS  INHDR=ROUT1,OUTTLR=ROUT2
       LABELS  DATA=INPUT
       RECORD  LABELS=2
 
  (premier enregistrement de label d'en-tête)
  (second enregistrement de label d'en-tête)
 
       RECORD   LABELS=2
 
  (premier enregistrement de label d'en-queue)
  (second enregistrement de label d'en-queue)

/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée séquentiel (OLDSET).
    L’ensemble de données a été initialement écrit en tant que troisième ensemble de données sur un volume de bande.
  • SYSUT2 DD définit le jeu de données de sortie séquentiel (NEWSET).
    L’ensemble de données est écrit en tant que premier ensemble de données sur un volume de bande.
    Les enregistrements de sortie sont bloqués pour réduire l’espace requis par l’ensemble de données et pour réduire le temps d’accès requis lorsque l’ensemble de données est ensuite consulté.
    Le paramètre BLKSIZE est omis afin que le système calcule une valeur optimale inférieure ou égale à 32,760 octets à moins que le programmeur système ne définisse la valeur par défaut différemment.
    L’ensemble de données est transmis à une étape de tâche suivante. Le LABEL=(,SUL) est obligatoire en raison des libellés utilisateur créés.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • GENERATE indique qu’un maximum de trois paramètres FIELD est inclus dans les instructions RECORD suivantes et qu’un maximum de 11 caractères littéraux sont inclus dans les paramètres FIELD suivants.
  • La première instruction RECORD contrôle l’édition, comme suit : les astérisques sont placés aux positions 1 à 10 ; les positions 1 à 5 de l’enregistrement d’entrée sont converties du mode H-set BCDIC en mode EBCDIC et déplacées vers les positions 11 à 15 ; et un signe égal est placé en position 16.
  • EXITS indique que les routines utilisateur spécifiées nécessitent un contrôle lorsque SYSUT1 est ouvert et lorsque SYSUT2 est fermé.
  • LABELS indique que les étiquettes sont incluses dans le flux d’entrée.
  • La deuxième instruction RECORD indique que les deux enregistrements suivants de SYSIN doivent être écrits en tant qu’étiquettes d’en-tête utilisateur sur SYSUT2.
  • La troisième instruction RECORD indique que les deux enregistrements suivants de SYSIN doivent être écrits en tant qu’étiquettes de fin utilisateur sur SYSUT2.

Exemple 7 : Modification et copie d’un fichier séquentiel z/OS UNIX dans un ensemble de données séquentiel

Dans cet exemple, le fichier az/OS UNIX System Services (z/OS UNIX) est modifié et copié.
La longueur d’enregistrement logique de l’ensemble de données de sortie est inférieure à celle de l’ensemble de données d’entrée.

//DISKDISK JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD PATH='/dist3/stor44/sales.mon',FILEDATA=TEXT,PATHOPTS=ORDONLY,
//          LRECL=100,BLKSIZE=1000,RECFM=FB
//SYSUT2   DD DSNAME=NEWSET,UNIT=disk,DISP=(NEW,KEEP),
//            VOLUME=SER=111113,DCB=(RECFM=FB,LRECL=80,
//            BLKSIZE=640),SPACE=(TRK,(20,10))
//SYSIN    DD *
     GENERATE MAXFLDS=4,MAXGPS=1
        EXITS IOERROR=ERRORRT
GRP1 RECORD IDENT=(8,'FIRSTGRP',1),FIELD=(21,80,,60),FIELD=(59,1,,1)
GRP2 RECORD FIELD=(11,90,,70),FIELD=(69,1,,1)
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le fichier d’entrée.
    Son nom est /dist3/stor44/sales.mon.
    Il contient du texte dans des enregistrements de 100 octets.
    Le délimiteur d’enregistrement n’est pas indiqué ici.
    Le fichier peut se trouver sur un système non System/390 disponible via NFS (Network File System).
  • SYSUT2 DD définit le jeu de données de sortie (NEWSET).
    Vingt pistes d’espace de stockage primaire et dix pistes d’espace de stockage secondaire sont allouées pour l’ensemble de données sur un volume de disque.
    La longueur d’enregistrement logique des enregistrements de sortie est de 80 octets et la sortie est bloquée.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • GENERATE indique qu’un maximum de quatre paramètres FIELD sont inclus dans les instructions RECORD ultérieures et qu’un paramètre IDENT apparaît dans une instruction RECORD ultérieure.
  • EXITS identifie la routine utilisateur qui gère les erreurs d’entrée/sortie.
  • La première instruction RECORD (GRP1) contrôle l’édition du premier groupe d’enregistrements.
    FIRSTGRP, qui apparaît dans les huit premières positions d’un enregistrement d’entrée, est défini comme étant le dernier enregistrement du premier groupe d’enregistrements.
    Les données des positions 80 à 100 de chaque enregistrement d’entrée sont déplacées vers les positions 60 à 80 de chaque enregistrement de sortie correspondant.
    (Cet exemple implique que les données dans les positions 60 à 79 des enregistrements d’entrée dans le premier groupe d’enregistrements ne sont plus nécessaires ; ainsi, la longueur de l’enregistrement logique est raccourcie de 20 octets.)
    Les données dans les positions restantes dans chaque enregistrement d’entrée sont transféré directement vers les enregistrements de sortie, comme spécifié dans le deuxième paramètre FIELD.
  • La deuxième instruction RECORD (GRP2) indique que le reste des enregistrements d’entrée doit être traité comme le deuxième groupe d’enregistrements.
    Les données des positions 90 à 100 de chaque enregistrement d’entrée sont déplacées vers les positions 70 à 80 des enregistrements de sortie.
    (Cet exemple implique que les données des positions 70 à 89 des enregistrements d’entrée du groupe 2 ne sont plus nécessaires ; ainsi, la longueur de l’enregistrement logique est raccourcie de 20 octets.)
    Les données des positions restantes dans chaque enregistrement d’entrée sont transférées directement aux enregistrements de sortie, comme spécifié dans le deuxième paramètre FIELD.

Exemple 8 : Modifier les données d’un jeu de caractères à deux octets

Dans cet exemple, un jeu de données modifié contenant des données de jeu de caractères à deux octets est créé.
Les caractères Shift-out/shift-in (< et >) sont insérés pour entourer les chaînes DBCS.

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit l’ensemble de données d’entrée, INPUT, qui réside sur un volume de disque.
  • SYSUT2 DD définit l’ensemble de données de sortie, OUTPUT, qui résidera sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • GENERATE indique qu’un maximum de quatre paramètres FIELD et de neuf caractères littéraux apparaîtront dans les instructions RECORD suivantes et que l’ensemble de données d’entrée contient des données DBCS.
  • RECORD spécifie comment les enregistrements d’entrée seront modifiés avant d’être placés dans l’ensemble de données de sortie.
    Le premier paramètre FIELD indique que les 20 premières positions (octets) des enregistrements d’entrée doivent être placées dans les 20 premières positions des enregistrements de sortie.
  • Le deuxième paramètre FIELD indique que les données des positions 33 à 48 doivent être vérifiées pour s’assurer qu’elles sont des données DBCS valides et que les caractères de décalage sortant/d’entrée
    doivent être insérés autour de ce champ.
    Pour que les données DBCS soient valides, chaque octet des caractères à 2 octets doit avoir une valeur hexadécimale comprise entre X’41’ et X’FE’, ou le caractère à 2 octets doit être un espace DBCS (X’4040′).
    Une fois la vérification et l’insertion terminées, ce champ doit être copié dans les enregistrements de sortie à partir de la position 21.
  • Le troisième paramètre FIELD agit sur le champ de 30 octets commençant à la position 50 dans les enregistrements d’entrée.
    Ce champ est vérifié pour les données DBCS valides, et les caractères de décalage sortant/décalage sont insérés autour du champ.
    Le champ résultant est copié dans les enregistrements de sortie à partir de la position 39.

Notez qu’en spécifiant les emplacements de sortie dans le paramètre FIELD, vous devez tenir compte des positions supplémentaires que les caractères SO/SI utiliseront.
Par exemple, la chaîne DBCS de huit caractères (16 octets) commençant à la position 21 ne se termine pas à la position 36, mais à la 38.
Les caractères SO/SI sont des caractères à un octet, de sorte que la paire occupera deux positions.

Le paramètre FIELD final efface les positions finales des enregistrements de sortie avec des astérisques.