+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 292
    Points : 120
    Points
    120

    Par défaut Include Cond et TAG

    Salut à vous

    J'ai une interrogation sur l'utilisation d'INCLUDE COND dans un SORT.

    Je souhaites filtrer un fichier pour ne conserver que certaines valeurs dans une zone bien précise mais en fonction de la valeur filtrée, je souhaites ajouter un TAG en fin de fichier (OUTREC). Exemple

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    XXX VALA XXX
    XXX VALA XXX
    XXX VALB XXX
    XXX VALA XXX
    XXX VALB XXX
    XXX VALB XXX
    XXX VALC XXX
    XXX VALB XXX
    Je souhaites filtrer uniquement les VALA et VALB et obtenir :

    Code :
    1
    2
    3
    4
    5
    6
    7
    XXX VALA XXX NOMA
    XXX VALA XXX NOMA
    XXX VALB XXX NOMB
    XXX VALA XXX NOMA
    XXX VALB XXX NOMB
    XXX VALB XXX NOMB
    XXX VALB XXX NOMB
    Savez vous comment je peux m'y prendre ?
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Exploitation Mainframe
    Inscrit en
    octobre 2005
    Messages
    1 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Exploitation Mainframe
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 226
    Points : 2 272
    Points
    2 272

    Par défaut

    Je suggère une combinaison avec OUTFIL/IFTHEN et INCLUDE ...

    Soit (exemple testé) :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //SORT EXEC PGM=SORT 
    //* RESTRUCTURATION SELECTIVE ET SELECTION 
    //SYSOUT DD SYSOUT=* 
    //SYSIN DD * 
     OPTION COPY 
     OUTFIL IFTHEN=(WHEN=(5,4,CH,EQ,C'VALA'), 
             BUILD=(1,12,C' NOMA')), 
            IFTHEN=(WHEN=(5,4,CH,EQ,C'VALB'), 
             BUILD=(1,12,C' NOMB')) 
     INCLUDE COND=(5,4,CH,EQ,C'VALA',OR,5,4,CH,EQ,C'VALB') 
    //SORTOUT DD SYSOUT=* 
    //SORTIN DD * 
    XXX VALA XXX 
    XXX VALA XXX 
    XXX VALB XXX 
    XXX VALA XXX 
    XXX VALB XXX 
    XXX VALB XXX 
    XXX VALC XXX 
    XXX VALB XXX

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 292
    Points : 120
    Points
    120

    Par défaut

    Merci beaucoup, je vais réfléchir à cette solution car j'ai beaucoup de VAL* mais c'est un bon départ ...
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 292
    Points : 120
    Points
    120

    Par défaut

    J'ai réalisé une ébauche mais j'ai toujours ce message :

    Code :
    WER001A  COL 1 OR 1-15 NOT BLANK
    Voici ma SYSIN :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    OPTION COPY                                                               
    OUTFIL IFTHEN=(WHEN=(1,8,CH,EQ,C'JOBNAME '),BUILD=(1,137,10X)),           
           IFTHEN=(WHEN=(1,8,CH,EQ,C'AAAAAAAA'),BUILD=(1,137,C' VALA      ')),
           IFTHEN=(WHEN=(1,8,CH,EQ,C'BBBBBBBB'),BUILD=(1,137,C' VALB      ')),
                 *                                                            
           IFTHEN=(WHEN=(1,8,CH,EQ,C'CCCCCCCC'),BUILD=(1,137,C' VALC      ')),
           *                                                                  
           IFTHEN=(WHEN=(1,8,CH,EQ,C'DDDDDDDD'),BUILD=(1,137,C' VALD      '))
    INCLUDE COND=(1,8,CH,EQ,C'JOBNAME ',OR,
                  1,8,CH,EQ,C'AAAAAAAA',OR,
                  1,8,CH,EQ,C'BBBBBBBB',OR,
                  1,8,CH,EQ,C'CCCCCCCC',OR,
                  1,8,CH,EQ,C'DDDDDDDD')
    
    WER001A  COL 1 OR 1-15 NOT BLANK                   
    WER275A  NO KEYWORDS FOUND ON CONTROL STATEMENT    
    WER211B  SYNCSMF  CALLED BY SYNCSORT; RC=0000      
    WER449I  SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE
    Savez vous pourquoi ? Je ne trouve pas de doc claires ...
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur Exploitation Mainframe
    Inscrit en
    octobre 2005
    Messages
    1 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Exploitation Mainframe
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 226
    Points : 2 272
    Points
    2 272

    Par défaut

    Aie ... semble-t-il, c'est SYNCSORT que tu utilises ("l'autre" tri) ... moi je t'ai donné une solution à base de DFSORT (le tri "standard" d'IBM) ... là je ne peux plus t'aider ...

  6. #6
    Membre Expert Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    octobre 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : octobre 2006
    Messages : 754
    Points : 1 438
    Points
    1 438

    Par défaut

    3 choses:
    1. syncsort respecte (et doit) respecter la syntaxe DFSORT
    2. en sysin, la colonne 1 doit être à blanc (sauf cas particulier=
      ce qui n'est pas le cas dans ton exemple
    3. toujours en sysin, ne jamais dépasser la colonne 71, sauf à mettre en 72 un caractère de "continuation à la ligne suivante".
      dans ton exemple, des lignes font 75c.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 292
    Points : 120
    Points
    120

    Par défaut

    OK merci pour vos précisions respectives.

    Ma SYSIN est générée en amont par les STEP précédent mais je suis confronté à un autre problème.

    Pour générer mes OUTFIL, j'utilise un JCL avec OUTREC sur un fichier en entrée contenant mes valeurs mais je ne sais pas comment générer deux lignes pour un même enregistrement en entrée pour avoir ma commande OUTFIL sur deux lignes ... ceci afin de ne pas dépasser la colonne 72 !

    Je fais un premier STEP comme ceci

    Code :
    1
    2
    OPTION COPY                                                         
    OUTREC FIELDS=(C'        IFTHEN=(WHEN=(1,8,CH,EQ,C''',1,8,10,10,28X)
    Puis avec le premier fichier généré, je passe ce second STEP :

    Code :
    1
    2
    OPTION COPY                                                         
    OUTREC FIELDS=(1,42,C'''),BUILD=(1,137,C'' ',43,10,C''')),',5X)
    Est-il possible pour chaque enregistrement de générer deux lignes comme ceci :

    Code :
    1
    2
              IFTHEN=(WHEN=(1,8,CH,EQ,C'DDDDDDDD'),
              BUILD=(1,137,C' VALD      '))
    PS : je n'ai pas reporté sur mon exemple mais la première colonne est bien vide...
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 292
    Points : 120
    Points
    120

    Par défaut

    Trouvé !

    J'ai utilisé ceci :

    Code :
    OUTFIL BUILD=(1,45,35X,/,7X,46,29,43X)
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur Exploitation Mainframe
    Inscrit en
    octobre 2005
    Messages
    1 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Exploitation Mainframe
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 226
    Points : 2 272
    Points
    2 272

    Par défaut

    Du SORT qui génère du SORT ... moi je dis c'est beau ...

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur d'étude Mainframe
    Inscrit en
    septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'étude Mainframe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2012
    Messages : 61
    Points : 114
    Points
    114

    Par défaut

    Citation Envoyé par Luc Orient Voir le message
    Du SORT qui génère du SORT ... moi je dis c'est beau ...
    En effet... C'est comme compter le nombre d'enregs en récursif

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 292
    Points : 120
    Points
    120

    Par défaut

    Oui mais ça marche ... j'ai une SYSIN dynamique en fonction d'une liste de valeur d'un fichier en entrée ...

    A moins que vous ayez une meilleurs solution !
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur Exploitation Mainframe
    Inscrit en
    octobre 2005
    Messages
    1 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Exploitation Mainframe
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 226
    Points : 2 272
    Points
    2 272

    Par défaut

    Citation Envoyé par Antichoc Voir le message
    Oui mais ça marche ... j'ai une SYSIN dynamique en fonction d'une liste de valeur d'un fichier en entrée ...

    A moins que vous ayez une meilleurs solution !
    Pas de meilleure solution ... Mon propos n'est nullement négatif car je trouve la solution plutôt originale voire élégante ... Quand j'étais DBA DB2, il m'arrivait parfois d'écrire du SQL qui générait du SQL et c'était très pratique ...

    Et puis, l'important est que tu as trouvé la solution qui résout ton problème.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •