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 :

Fusion fichier avec entete


Sujet :

JCL - SORT

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Fusion fichier avec entete
    Bonjour,
    j'ai un traitement avec plusieurs fichiers en entrée qui ont tous la même structure (1299 de long):
    2 lignes d'entête toutes identiques dans mes fichiers en entrée
    ensuite les lignes contenant les données (sans doublon)

    Je souhaite fusionner mes fichiers en conservant les 2 lignes d'entete.

    Je suis plus que débutant en JCL


    J'ai essayé de rajouter un champ en fin de fichier pour trier dessus et le supprimer ensuite mais le JCL plante (NO SORT OR MERGE CONTROL STATEMENT )

    Voilà ce que j'ai essayé (je me complique p'têt la vie, y'a sûrment plus simple)

    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
    //STEP01 EXEC PGM=SORT
    //SORTIN DD DSN=FIC.INPUT01,DISP=SHR
    DD DSN=FIC.INPUT02,DISP=SHR
    DD DSN=FIC.INPUT03,DISP=SHR
    //SORTOUT DD DSN=FIC.OUTPUT01,DISP=SHR
    //SYSOUT DD SYSOUT=*
    
    // SYSIN DD *
    INREC IFTHEN=(WHEN=(1,4,CH,EQ,C'DATE'),        --> Ma 1ère ligne d'entete commence par le mot DATE et je veux lui coller la valeur 1 en position 1300
             OVERLAY=(1300:C'1')),
          IFTHEN=(WHEN=(1,2,CH,EQ,C'SI'),          --> Ma 2ère ligne d'entete commence par le mot SI et je veux lui coller la valeur 2 en position 1300
             OVERLAY=(1300:C'2')),
          IFTHEN=(WHEN=NONE,                      --> Mes lignes de données sont recopiées en leur insérant la valeur 3 en position 1300
             OVERLAY=(1300:C'3'))
    SORT FIELDS=(1300,1,CH,A,)                    --> je trie sur la colonne que j'ai rajouté
    SUM FIELDS=NONE                                --> je supprime les entetes en doublon
       OUTFIL REMOVECC,                            --> je supprime la colonne que j'ai rajouté dans le fichier de sortie   
       OMIT=(1300,1,SS,EQ,C'0,9'),
       OUTREC=(1,1300)

  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
    Citation Envoyé par LZJ79 Voir le message
    ... Je souhaite fusionner mes fichiers en conservant les 2 lignes d'entete.
    Fusionner ou concaténer ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Fusionner ou concaténer ?
    Je ne vois pas trop la différence entre les 2 termes. Je dirai concaténer car je voudrais avoir les données du fichier 1 + les données du fichier 2 + les données du fichier 3 dans un seul fichier (avec l'entete au début bien sûr)

  4. #4
    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 LZJ79 Voir le message
    Je ne vois pas trop la différence entre les 2 termes ...
    Pour moi, fusionner, c'est interclasser, c'est à dire que les fichiers sont triés au départ et que le résultat est trié aussi, avec une clé bien sûr, c'est d'ailleurs ce que fait l'ordre MERGE du DFSORT . Concaténer, c'est juste " mettre bout à bout ", et là il n'y a plus de notion d'ordre, et en général une copie simple suffit.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Pour moi, fusionner, c'est interclasser, c'est à dire que les fichiers sont triés au départ et que le résultat est trié aussi, avec une clé bien sûr, c'est d'ailleurs ce que fait l'ordre MERGE du DFSORT . Concaténer, c'est juste " mettre bout à bout ", et là il n'y a plus de notion d'ordre, et en général une copie simple suffit.
    Ha ben fusionner alors du coup, en triant sur les 5 premières colonnes (hors entete).

  6. #6
    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 LZJ79 Voir le message
    Ha ben fusionner alors du coup, en triant sur les 5 premières colonnes (hors entete).
    Ah zut alors ! ... ce n'est pas ce que j'avais compris de ton premier post et j'ai préparé une solution pour résoudre une concaténation ...

    La démarche est la suivante :
    1) on met de coté les enregistrements d'en tête
    2) on copie tous les fichiers en supprimant les enregistrements d'en tête
    3) on regroupe le tout

    Supposons les fichiers de tests suivants :

    Fichier 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATE FICHIER 1 - ENTETE 1
    SI   FICHIER 1 - ENTETE 2
    FICHIER 1 - LIGNE 1
    FICHIER 1 - LIGNE 2
    Fichier 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATE FICHIER 2 - ENTETE 1
    SI   FICHIER 2 - ENTETE 2
    FICHIER 2 - LIGNE 1
    FICHIER 2 - LIGNE 2
    Fichier 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATE FICHIER 3 - ENTETE 1
    SI   FICHIER 3 - ENTETE 2
    FICHIER 3 - LIGNE 1
    FICHIER 3 - LIGNE 2
    Partie 1 (le nom des fichiers est masqué) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //ICETOOL EXEC PGM=ICETOOL,REGION=1024K
    //* DVP - COPIE 2 ENREGISTREMENTS
    //TOOLMSG DD SYSOUT=*
    //DFSMSG DD SYSOUT=*
    //TOOLIN DD *
    COPY FROM(INDD) TO(OUTDD) USING(CTL1)
    //CTL1CNTL DD *
    OUTFIL ENDREC=2
    //INDD DD DISP=SHR,DSN=.I1
    //OUTDD DD DSN=.O1,
    // DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(80,(100,10))
    Fichier de sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DATE FICHIER 1 - ENTETE 1
    SI   FICHIER 1 - ENTETE 2
    Partie 2 :

    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
    //ICETOOL EXEC PGM=ICETOOL,REGION=1024K
    //* * DVP - COPIE 2 ENREGISTREMENTS
    //TOOLMSG DD SYSOUT=*
    //DFSMSG DD SYSOUT=*
    //TOOLIN DD *
    COPY FROM(INDD) TO(OUTDD) USING(CTL1)
    //CTL1CNTL DD *
    OMIT COND=((1,4,CH,EQ,C'DATE'),OR,
                (1,2,CH,EQ,C'SI'))
    //INDD DD DISP=SHR,DSN=.I1
    //     DD DISP=SHR,DSN=.I2
    //     DD DISP=SHR,DSN=.I3
    //OUTDD DD DSN=.O2,
    // DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(80,(100,10))
    Fichier de sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FICHIER 1 - LIGNE 1
    FICHIER 1 - LIGNE 2
    FICHIER 2 - LIGNE 1
    FICHIER 2 - LIGNE 2
    FICHIER 3 - LIGNE 1
    FICHIER 3 - LIGNE 2
    Partie 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //ICETOOL EXEC PGM=ICETOOL,REGION=1024K
    //* * DVP - REGROUPEMENT FICHIER
    //TOOLMSG DD SYSOUT=*
    //DFSMSG DD SYSOUT=*
    //TOOLIN DD *
    COPY FROM(INDD) TO(OUTDD)
    //INDD DD DISP=SHR,DSN=.O1
    //     DD DISP=SHR,DSN=.O2
    //OUTDD DD DSN=.O3,
    // DISP=(NEW,CATLG,DELETE),
    // AVGREC=U,SPACE=(80,(100,10))
    Résultat final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DATE FICHIER 1 - ENTETE 1
    SI   FICHIER 1 - ENTETE 2
    FICHIER 1 - LIGNE 1
    FICHIER 1 - LIGNE 2
    FICHIER 2 - LIGNE 1
    FICHIER 2 - LIGNE 2
    FICHIER 3 - LIGNE 1
    FICHIER 3 - LIGNE 2
    Et voilà ... si tu souhaites une fusion, il suffit de remplacer le JCL de la partie 2 par un JCL d'appel à MERGE.

    Et sinon, pour ta solution, qui devrait marcher, je pense, il faudrait placer la directive SORT en première ligne de la SYSIN.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Ah zut alors ! ... ce n'est pas ce que j'avais compris de ton premier post et j'ai préparé une solution pour résoudre une concaténation ...


    Et voilà ... si tu souhaites une fusion, il suffit de remplacer le JCL de la partie 2 par un JCL d'appel à MERGE.

    Et sinon, pour ta solution, qui devrait marcher, je pense, il faudrait placer la directive SORT en première ligne de la SYSIN.
    Merci pour ton code, j'ai trouvé pour le plantage que j'avais (j'avais mis une ligne de commentaire entre le SYSIN et le INREC, et ben il aime pas ça ). Donc le code suivant marche


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    INREC IFTHEN=(WHEN=(1,4,CH,EQ,C'DATE'),                  
            BUILD=(C'1',1,1300)),                            
      IFTHEN=(WHEN=(1,2,CH,EQ,C'SI'),                        
      BUILD=(C'2',1,1300)),                                  
      IFTHEN=(WHEN=NONE,                                     
            BUILD=(C'3',1,1300))                             
    SORT FIELDS=(1,48,CH,A)                                  
    SUM FIELDS=NONE                                          
    OUTREC FIELDS=(2,1300)                                   
    END

    Je n'ai pas encore eu le temps d'essayer ta proposition, mais je la garde sous le coude car c'est une autre vision des choses qui peut m'être utile prochainement. Merci d'avoir pris la peine de te pencher sur mon sujet. Je clos la discussion

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

Discussions similaires

  1. Imprimer fichier avec entete différente selon la page
    Par alphaStat dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/10/2015, 14h24
  2. Lecture de fichier avec entete
    Par mous8 dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/07/2012, 13h27
  3. generer un fichier avec entete et des details lié
    Par moustaf_26 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 16/03/2012, 10h20
  4. Réponses: 13
    Dernier message: 05/12/2011, 14h09
  5. fusion fichier avec un 'ou binaire'
    Par xduris dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 25/10/2010, 12h41

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