IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JCL - SORT Discussion :

SORT : Enchaîner plusieurs INCLUDE et INREC


Sujet :

JCL - SORT

  1. #1
    Membre à l'essai Avatar de Deldemone
    Femme Profil pro
    Gestionnaire Production Informatique
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gestionnaire Production Informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 14
    Points
    14
    Par défaut SORT : Enchaîner plusieurs INCLUDE et INREC
    Bonjour à tous et toutes

    Débutante en JCL je souhaite extraire des données d'un fichier, j'ai bien avancé mais je bloque à la dernière étape pourriez-vous m'aider s'il vous plaît ?

    Au départ j'ai extrait les enregistrements que je souhaitais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INCLUDE COND=(1,4,CH,EQ,C'toto'),OR, -
    			(14,6,CH,EQ,C'tatata'),OR, - 
    			(17,4,CH,EQ,C'tutut')
    Résultat: nickel

    toto=12345678 patatipatata
    ici il y a 1 tatata=01234567890123456789
    ici il y a bien tutut=azertrtyuiopqsdfghjklm
    toto=987654321 patatipatata
    ici il y a 1 tatata=9876543210987654321
    ici il y a bien tutut=mlkjhgfdsqpoiuytreza
    etc etc

    mais je ne voudrais qu'une partie de ces enregistrements :
    donc j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INCLUDE COND=(1,4,CH,EQ,C'toto')
    INREC FIELDS=(1:7,8)
    
    INCLUDE COND=(14,6,CH,EQ,C'tatata')
    INREC FIELDS=(20:21,10)
    
    INCLUDE COND=(17,4,CH,EQ,C'tutut')
    INREC FIELDS=(40:23,15)
    ces 3 commandes fonctionnent individuellement mais comment les emboîter afin que le résultat soit :
    12345678           0123456789          azertrtyuiopqsdf
    98765432		   9876543210          mlkjhgfdsqpoiuyt
    ou mieux encore mais là ce serait la cerise

    12345678;0123456789;azertrtyuiopqsdf
    98765432;9876543210;mlkjhgfdsqpoiuyt
    Ce vendredi je suis partie du boulot frustrée de ne pas avoir trouvé j'en étais à me faire plusieurs fichiers tmp pour les concaténer après mais je ne trouve pas ça trop clean...

    En espérant avoir été claire

    Merci d'avance

    @bientôt
    DelDemone

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    A mon sens, il y deux éléments dans le problème posé :

    1) un éclatement conditionné par une valeur contenue dans les enregistrements du fichier

    2) un regroupement d'enregistrements lié à l'éclatement précédent

    Soyons clairs, SORT ou ICETOOl (c'est pareil) sait admirablement traiter les éclatements. Le regroupement est, pour moi, toujours un peu difficile à coder. De fait, SORT a besoin d'une clé de regroupement (c'est un tri après tout ...).

    Je choisis donc d'éclater dans un premier temps en trois fichiers, en générant une clé fictive, puis de les regrouper en deux fois.

    Donc, l'éclatement (les noms des fichiers sont volontairement incomplets) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //ICETOOL EXEC PGM=ICETOOL,REGION=1024K
    //* ECLATEMENT D'UN FICHIER EN 3 AUTRES SELON CRITERES
    //TOOLMSG DD SYSOUT=*
    //DFSMSG DD SYSOUT=*
    //TOOLIN DD *
    COPY FROM(INDD) USING(CTL1)
    //CTL1CNTL DD *
    OUTFIL FNAMES=DD1,INCLUDE=(1,4,CH,EQ,C'TOTO'),
            BUILD(1:SEQNUM,5,ZD,7:6,8,C';')
    OUTFIL FNAMES=DD2,INCLUDE=(14,6,CH,EQ,C'TATATA'),
            BUILD(1:SEQNUM,5,ZD,7:21,10,C';')
    OUTFIL FNAMES=DD3,INCLUDE=(17,5,CH,EQ,C'TUTUT'),
            BUILD(1:SEQNUM,5,ZD,7:23,15)
    //INDD DD *
    TOTO=12345678 PATATIPATATA
    ICI IL Y A 1 TATATA=01234567890123456789
    ICI IL Y A BIEN TUTUT=AZERTRTYUIOPQSDFGHJKLM
    TOTO=987654321 PATATIPATATA
    ICI IL Y A 1 TATATA=9876543210987654321
    ICI IL Y A BIEN TUTUT=MLKJHGFDSQPOIUYTREZA
    //DD1 DD DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(100,(10,10)),DSN=..DD1
    //DD2 DD DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(100,(10,10)),DSN=..DD2
    //DD3 DD DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(100,(10,10)),DSN=..DD3
    fichier 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    00001 12345678;
    00002 98765432;
    fichier 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    00001 0123456789;
    00002 9876543210;
    fichier 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    00001 AZERTRTYUIOPQSD
    00002 MLKJHGFDSQPOIUY
    Le 1er regroupement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //SORT EXEC PGM=SORT
    //* JOIN
    //SYSOUT DD SYSOUT=*
    //SYSIN DD *
    JOINKEYS FILES=F1,FIELDS=(1,5,A)
    JOINKEYS FILES=F2,FIELDS=(1,5,A)
    REFORMAT FIELDS=(F1:1,6,F1:7,9,F2:7,11)
    SORT FIELDS=COPY
    //SORTJNF1 DD DISP=SHR,DSN=..DD1
    //SORTJNF2 DD DISP=SHR,DSN=..DD2
    //SORTOUT DD DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(100,(10,10)),DSN=..DDJ1
    fichier de regroupement intermédiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    00001 12345678;0123456789;
    00002 98765432;9876543210;
    Le deuxième et dernier regroupement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //SORT EXEC PGM=SORT
    //* JOIN
    //SYSOUT DD SYSOUT=*
    //SYSIN DD *
    JOINKEYS FILES=F1,FIELDS=(1,5,A)
    JOINKEYS FILES=F2,FIELDS=(1,5,A)
    REFORMAT FIELDS=(F1:7,20,F2:7,15)
    SORT FIELDS=COPY
    //SORTJNF1 DD DISP=SHR,DSN=..DDJ1
    //SORTJNF2 DD DISP=SHR,DSN=..DD3
    //SORTOUT DD DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(100,(10,10)),DSN=..DDJ2
    fichier final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    12345678;0123456789;AZERTRTYUIOPQSD
    98765432;9876543210;MLKJHGFDSQPOIUY
    Deux remarques :

    1) j'ai des différences de détail avec ce que vous affichez car je pense qu'il y a quelques approximations sur vos champs FIELD, ou bien, j'ai pu me tromper également
    mais ça ne change rien à la cinématique générale

    2) tout cela ne fonctionne qu'à la condition de la structure du fichier que vous décrivez soit constante bien sûr (ordre des enregistrements TOTO / TATATA / TUTUT ), sinon tout est faux ...

    Voilà ... En espérant avoir nourri votre réflexion ...

  3. #3
    Membre à l'essai Avatar de Deldemone
    Femme Profil pro
    Gestionnaire Production Informatique
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gestionnaire Production Informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    Merci c'est parfait et parfaitement clair.
    Je teste demain et je vous fais un retour.

    Excellente soirée à vous.

  4. #4
    Membre à l'essai Avatar de Deldemone
    Femme Profil pro
    Gestionnaire Production Informatique
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gestionnaire Production Informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 14
    Points
    14
    Par défaut Point d'avancement
    Bonjour Luc,

    L’éclatement de mon fichier en 6 fichiers s'est très bien passé
    J'ai finalement utilisé SORT car je n'arrivais pas avec ICETOOLS certainement à cause de mon manque d'expérience (cela ne fait que 3 semaines que j'ai découvert le JCL), mais peu importe c'est le résultat qui compte

    Résultats :

    Fichier 1 
        ARBDE.AEDEMOD.TEMP0001.PSWV00                             
    ----+----1----+----2----+----3----+----
    00001 stlca1      ;                        
    00002 stlca2      ;                        
    00003 stlmon4    ;                        
    00004 stlroot     ;                        
    00005 AUTO0001;                        
    00006 AUTO0002;      
    etc    
    Fichier 2
        ARBDE.AEDEMOD.TEMP0002.PSWV00                             
    ----+----1----+----2----+----3----+
    00001 A£TOMP0 ;                    
    00002 CERTAUTH;                    
    00003 CERTAUTH;                    
    00004 CERTAUTH;                    
    00005 CERTAUTH;                    
    00006 CERTAUTH;  
    etc 
    j'ai essayé de les regrouper ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //STEP02   EXEC PGM=SORT                                       
    //SYSOUT   DD SYSOUT=*                                         
    //IN1      DD DSN=ARBDE.AEDEMOD.TEMP0001.PSWV00,DISP=SHR       
    //IN2      DD DSN=ARBDE.AEDEMOD.TEMP0002.PSWV00,DISP=SHR       
    //SORTOUT  DD DSN=ARBDE.AEDEMOD.TEMP0006.PSWV00,               
    //             DISP=(NEW,CATLG,DELETE),                        
    //             SPACE=(CYL,(10,10),RLSE),AVGREC=U,              
    //             RECFM=FB,LRECL=133,DSORG=PS                     
    //SYSIN    DD *                                                
     JOINKEYS FILES=IN1,FIELDS=(1,5,A)                             
     JOINKEYS FILES=IN2,FIELDS=(1,5,A)                             
     REFORMAT FIELDS=(F1:1,6,F1:7,16,F2:7,16)                      
     SORT FIELDS=COPY                                              
    /*
    Mais rien n'y fait mon fichier résultat est toujours vide
    Auriez-vous une piste ?

    Merci d'avance

    Deldemone

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    La fonction JOIN du SORT est assez psycho rigide. En effet, il faut respecter strictement les DDNAMES indiqués, aussi bien lors de l'allocation des fichiers que lors de l'écriture du contenu de la SYSIN définissant les paramètres de la jointure.

    Essayez ceci ( correction en rouge ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //STEP02 EXEC PGM=SORT 
    //SYSOUT DD SYSOUT=* 
    //SORTJNF1 DD DSN=ARBDE.AEDEMOD.TEMP0001.PSWV00,DISP=SHR 
    //SORTJNF2 DD DSN=ARBDE.AEDEMOD.TEMP0002.PSWV00,DISP=SHR 
    //SORTOUT DD DSN=ARBDE.AEDEMOD.TEMP0006.PSWV00, 
    // DISP=(NEW,CATLG,DELETE), 
    // SPACE=(CYL,(10,10),RLSE),AVGREC=U, 
    // RECFM=FB,LRECL=133,DSORG=PS 
    //SYSIN DD * 
    JOINKEYS FILES=F1,FIELDS=(1,5,A) 
    JOINKEYS FILES=F2,FIELDS=(1,5,A) 
    REFORMAT FIELDS=(F1:1,6,F1:7,16,F2:7,16) 
    SORT FIELDS=COPY 
    /*

  6. #6
    Membre à l'essai Avatar de Deldemone
    Femme Profil pro
    Gestionnaire Production Informatique
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gestionnaire Production Informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 14
    Points
    14
    Par défaut Merciiiiiii !!!
    Bonjour Luc,


    Cela fonctionne, merci beaucoup pour ces explications
    J'ai encore d'autre questions mais peut-être faudrait-il que j'ouvre une nouvelle discussion.
    En tout cas merci beaucoup

    Certainement à très bientôt
    Deldemone

  7. #7
    Membre à l'essai Avatar de Deldemone
    Femme Profil pro
    Gestionnaire Production Informatique
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gestionnaire Production Informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Points : 14
    Points
    14
    Par défaut icetool
    Bonjour,

    je me suis à nouveau essayé à utiliser ICETOOL mais rien n'y fait mes fichiers de sortie sont toujours vierges.
    Aurais-je une erreur de syntaxe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //ICETOOL EXEC PGM=ICETOOL,REGION=1024K                       
    //INDD    DD DSN=ARBDE.AEDEMOD.TEMP1000.PSWV00,DISP=SHR       
    //TOOLIN DD *                                                 
    COPY FROM(INDD) USING(CTL1)                                   
    //CTL1CNTL DD *                                               
    OUTFIL FNAMES=DD1,INCLUDE=(1,8,CH,EQ,C'DIGICERT'),            
           BUILD(1:SEQNUM,5,ZD,7:12,8,C';')                       
    OUTFIL FNAMES=DD2,INCLUDE COND=(29,10,CH,EQ,C'ACCESSORID'),   
           BUILD(1:SEQNUM,5,ZD,7:42,8,C';')                       
    OUTFIL FNAMES=DD3,INCLUDE COND=(5,5,CH,EQ,C'AFTER'),          
           BUILD(1:SEQNUM,5,ZD,7:14,10,C';')                      
    //INDD DD *                                                   
    //DD1 DD DSN=ARBDE.AEDEMOD.TEMP0001.PSWV00,                   
    //             DISP=(NEW,CATLG,DELETE),                       
    //             SPACE=(CYL,(10,10),RLSE),AVGREC=M,             
    //             RECFM=FB,LRECL=133,DSORG=PS                    
    //DD2 DD DSN=ARBDE.AEDEMOD.TEMP0002.PSWV00,                   
    //             DISP=(NEW,CATLG,DELETE),                       
    //             SPACE=(CYL,(10,10),RLSE),AVGREC=M,             
    //             RECFM=FB,LRECL=133,DSORG=PS                    
    //DD3 DD DSN=ARBDE.AEDEMOD.TEMP0003.PSWV00,                   
    //             DISP=(NEW,CATLG,DELETE),                       
    //             SPACE=(CYL,(10,10),RLSE),AVGREC=M,

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Deldemone Voir le message
    Bonjour,

    je me suis à nouveau essayé à utiliser ICETOOL mais rien n'y fait mes fichiers de sortie sont toujours vierges.
    Aurais-je une erreur de syntaxe ?
    Non, une erreur de syntaxe serait signalé par l'outil, ou alors vous n'avez pas vu le message ...

    Questions :
    1) vous avez bien un RC à 0 ?
    2) que contient votre fichier d'entrée (quelques lignes devraient suffire ... ) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] plusieurs includes dans la meme page
    Par jeanpaul34 dans le forum Langage
    Réponses: 9
    Dernier message: 21/07/2016, 08h20
  2. Plusieurs include dans une même page qui contient plusieurs submit
    Par Keyboard dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 17/12/2015, 18h16
  3. Property pour plusieurs includes
    Par zekey dans le forum Maven
    Réponses: 2
    Dernier message: 23/08/2012, 11h00
  4. problème sort fichier plusieurs colonnes
    Par l_m_s dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 10/09/2010, 16h49
  5. Sort sur plusieurs colonnes
    Par denice007 dans le forum Linux
    Réponses: 2
    Dernier message: 17/03/2007, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo