Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > z/OS
z/OS Forum d'entraide sur z/OS et MVS (Multiple Virtual Storage), les systèmes d'exploitation des ordinateurs « mainframes » IBM : JCL, Tso, Ispf, Vsam, Racf, SMS, Cics, Ims, OPC, Ca-7, Control-M, Dialog Manager ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 16h00   #1
Invité de passage
 
Inscription : juin 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
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 :
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 :
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 ?
macgawel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h29   #2
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 37
Points : 33
Points : 33
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.
ekans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h02   #3
Invité de passage
 
Inscription : juin 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
Mea culpa, je me suis bien trompé

J'ai corrigé mon message...
macgawel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h52   #4
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
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 :
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 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 11h16   #5
Membre du Club
 
Inscription : juin 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 65
Points : 50
Points : 50
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 :
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.
Pico----- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 14h14   #6
Invité de passage
 
Inscription : juin 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
Bingo !

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

Question au passage : ça fonctionne aussi sur un SORT OUTREC ?
macgawel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 15h26   #7
Membre du Club
 
Inscription : juin 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 65
Points : 50
Points : 50
Oui le OUTREC fonctionne avec le SORT.
Pico----- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 16h17   #8
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
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 :
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
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h29.


 
 
 
 
Partenaires

Hébergement Web