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

z/OS Discussion :

Contraire du SPLICE ?


Sujet :

z/OS

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 142
    Points
    142
    Par défaut Contraire du SPLICE ?
    Bonjour.

    Est-il possible de faire le contraire d'un SPLICE ?

    Explication :
    J'ai un fichier de paramètrage construit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DEPARTEMENT1CODE1CODE2
    DEPARTEMENT2CODE3
    DEPARTEMENT3CODE4CODE5CODE6
    Evidemment, on peut retrouver plusieurs fois le même code (un par département), et on a maximum 10 codes par département...
    Et je voudrais obtenir ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DEPARTEMENT1CODE1
    DEPARTEMENT1CODE2
    DEPARTEMENT2CODE3
    DEPARTEMENT3CODE4
    DEPARTEMENT3CODE5
    DEPARTEMENT3CODE6
    Là, je sèche lamentablement


    [Edit]Correction suite à la remarque d'ekans.

    Au passage :
    Il y a peut-être moyen de simplifier le problème global...
    L'objectif final est de filtrer un autre fichier sur le couple département+code en fonction de ces paramètres.
    Je sais faire une jointure si j'ai mon fichier de paramètrage construit sous la forme une ligne par couple, d'où ma question.

    Mais je peux aussi envisager le problème sous un autre angle :
    Si j'ai une ligne de 1 à 10 codes (chacun sur 3 caractères), est-il possible de filtrer le fichier principal pour récupérer tous les enregistrements correspondants ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    La ligne 6 de ta sortie est-elle correcte ?
    Ce ne serait pas :
    Si ton exemple est correct, ce que tu demandes ne me semble pas assez clair.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 142
    Points
    142
    Par défaut
    Mea culpa, je me suis bien trompé

    J'ai corrigé mon message...

  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
    Une suggestion avec ICETOOL (c'est du vite fait ... on peut peut être faire mieux ...) :

    Pour faire simple, je traite que le cas de 3 codes département ... A compléter pour les autres ...

    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
    //ICETOOL EXEC PGM=ICETOOL,REGION=1024K
    //TOOLMSG DD SYSOUT=*
    //DFSMSG DD SYSOUT=*
    //TOOLIN DD *
     COPY FROM(INDD) TO(OUTDD) USING(CTL1)
    //CTL1CNTL DD *
     OUTFIL IFTHEN=(WHEN=(18,1,CH,EQ,C' '),
             BUILD=(1,12,13,5)),
            IFTHEN=(WHEN=(23,1,CH,EQ,C' '),
             BUILD=(1,12,13,5,/,
                    1,12,18,5)),
            IFTHEN=(WHEN=(28,1,CH,EQ,C' '),
             BUILD=(1,12,13,5,/,
                    1,12,18,5,/,
                    1,12,23,5))
    //OUTDD DD SYSOUT=*
    //INDD DD *
    DEPARTEMENT1CODE1CODE2
    DEPARTEMENT2CODE3
    DEPARTEMENT3CODE4CODE5CODE6
    A noter que j'ai supposé que si le département n'était pas renseigné dans le fichier, il y avait des caractères ESPACE à la place. Si ton fichier est géré en format variable, je pense qu'il faudra trouver une autre solution ...

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 266
    Points
    266
    Par défaut
    Autre solution avec ICETOOL.

    Comme Luc Lorient, je me suis limité à 3 codes, et j'ai utilisé le space comme valeur "non renseigné"

    Personnellement, je préfère éviter les IFTHEN quitte à décomposer en plusieurs étapes :

    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
    //ICETOOL  EXEC PGM=ICETOOL                                             
    //TOOLMSG  DD SYSOUT=*                                                  
    //DFSMSG   DD SYSOUT=*                                                  
    //SORTIN   DD *                                                         
    DEPARTEMENT1CODE1CODE2                                                  
    DEPARTEMENT2CODE3                                                       
    DEPARTEMENT3CODE4CODE5CODE6                                             
    //TEMP     DD DSN=&&TEMP1,RECFM=FB,LRECL=17,DISP=(MOD,PASS),            
    //            SPACE=(TRK,(1,1),RLSE)                                    
    //SORTOUT  DD SYSOUT=*                                                  
    //*                                                                     
    //TOOLIN   DD *                                                         
     COPY FROM(SORTIN) TO(TEMP) USING(COP1)                                 
     SORT FROM(TEMP) TO(SORTOUT) USING(TRI1)                                
    //*                                                                     
    //COP1CNTL DD *                                                         
     OUTFIL OUTREC=(1,12,13,5,/,                                            
                    1,12,18,5,/,                                            
                    1,12,23,5)                                              
    //*                                                                     
    //TRI1CNTL DD *                                                         
     SORT FIELDS=(1,17,CH,A)                                                
     INCLUDE COND=(13,5,CH,NE,C'     ')                                     
    //*
    De plus, pour cette solution comme pour celle de Luc Lorient, si ton fichier en entrée est de format variable, tu peux rajouter un étape de conversion en premier lieu.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 142
    Points
    142
    Par défaut
    Bingo !

    En fait, ce qui me manquait c'est le / pour passer à la ligne

    Question au passage : ça fonctionne aussi sur un SORT OUTREC ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 266
    Points
    266
    Par défaut
    Oui le OUTREC fonctionne avec le SORT.

  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 macgawel Voir le message
    Question au passage : ça fonctionne aussi sur un SORT OUTREC ?
    Oui ça fonctionne aussi avec un SORT mais OUTFIL pas OUTREC.

    Version avec SORT :

    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
    //SORT EXEC PGM=SORT
    //* ECLATER UNE LIGNE EN PLUSIEURS
    //SYSOUT DD SYSOUT=*
    //SYSIN DD *
     OPTION COPY
     OUTFIL IFTHEN=(WHEN=(18,1,CH,EQ,C' '),
             BUILD=(1,12,13,5)),
            IFTHEN=(WHEN=(23,1,CH,EQ,C' '),
             BUILD=(1,12,13,5,/,
                    1,12,18,5)),
            IFTHEN=(WHEN=(28,1,CH,EQ,C' '),
             BUILD=(1,12,13,5,/,
                    1,12,18,5,/,
                    1,12,23,5))
    //SORTOUT DD SYSOUT=*
    //SORTIN DD *
    DEPARTEMENT1CODE1CODE2
    DEPARTEMENT2CODE3
    DEPARTEMENT3CODE4CODE5CODE6

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

Discussions similaires

  1. Connecter mysql à access en ODBC (et non le contraire)
    Par guidav dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 28/03/2006, 14h51
  2. Contraire de Settimer
    Par K.othmane dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 29/11/2005, 18h50
  3. contraire de \n ???
    Par 123quatre dans le forum C
    Réponses: 18
    Dernier message: 24/11/2005, 23h57
  4. [regexp] contraire a regexp
    Par titiyo dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 21h59
  5. Contraire de NIL
    Par PierDIDI dans le forum Langage
    Réponses: 5
    Dernier message: 16/09/2002, 12h14

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