Précédent   Forum du club des développeurs et IT Pro > Systèmes > Autres systèmes > z/OS > JCL - SORT
JCL - SORT Entraide sur la fabrication de JCL et les technologies de tri
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/08/2012, 09h23   #1
twisty
Invité de passage
 
Inscription : janvier 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 49
Points : 0
Points : 0
Par défaut Suppression de colonne d'un fichier par jcl

Bonjour,

Je souhaite supprimer les deux premières colonnes d'un fichier variable (séparation des colonnes par un ";"), par un jcl, selon des conditions précises, en sachant que ces dernières ont des informations fixes. Qu'elles seraient les instructions à utiliser (si possible par un SORT) ?

Ex :
Homme;adulte;BERTRAND;eric
Femme;enfant;MARTIN;anne
Homme;adulte;DUPOND;andré

Je souhaite obtenir un fichier de sortie en supprimant les deux premières colonnes, à condition que l'article est une femme, soit :

Homme;adulte;BERTRAND;eric
MARTIN;anne
Homme;adulte;DUPOND;andré

Pourriez-vous m'aider ?

Twisty
twisty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2012, 13h42   #2
Pico-----
Membre habitué
 
Inscription : juin 2008
Messages : 105
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 105
Points : 131
Points : 131
Salut,

Je pense que tu peux t'en sortir avec un OUTREC et un PARSE.
Leur description est dans la documentation officielle : http://publib.boulder.ibm.com/infoce...2Fice1ca50.htm
Pico----- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2012, 08h15   #3
bernard59139
Membre émérite
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 614
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 614
Points : 922
Points : 922
bonjour

je confirme la réponse du collègue. dans l'OUTREC tu fais un PARSE (éclatement) des colonnes.et tu recontruis le fichier avec un BUILD.

rapidement écrit, ceci est une bonne base:
Code :
1
2
3
4
5
OPTION COPY
  OUTREC PARSE=(%00=(ENDBEFR=C';',FIXLEN=50),
                         %01=(ENDBEFR=C',',FIXLEN=50),
                         %02=(FIXLEN=50)),
  BUILD=(%02,SQZ=(SHIFT=RIGHT))
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2012, 09h44   #4
bernard59139
Membre émérite
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 614
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 614
Points : 922
Points : 922
j'oubliai, il faut adapter avec des IFTHEN.
a+
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2012, 19h05   #5
Luc Orient
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 166
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 54
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 166
Points : 1 979
Points : 1 979
Citation:
Envoyé par twisty Voir le message
... Je souhaite supprimer les deux premières colonnes d'un fichier variable (séparation des colonnes par un ";"), par un jcl, selon des conditions précises, en sachant que ces dernières ont des informations fixes. Qu'elles seraient les instructions à utiliser (si possible par un SORT) ?
Si les informations sont fixes, on n'est peut-être pas obligé de passer par l'opérateur PARSE. Par rapport à l'exemple donné, voici ce que je suggère avec l'utilisation de l'opérateur FINDREP (exemple testé) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
//SORT EXEC PGM=SORT 
//* SUPPRESSION DE 2 COLONNES DANS UN FICHIER AVEC CONDITION 
//SYSOUT DD SYSOUT=* 
//SYSIN DD * 
 OPTION COPY 
 OUTFIL IFTHEN=(WHEN=(1,5,CH,EQ,C'FEMME'), 
        FINDREP=(INOUT=(C'ENFANT;',C'',C'FEMME;',C''))) 
//SORTIN DD * 
HOMME;ADULTE;BERTRAND;ERIC 
FEMME;ENFANT;MARTIN;ANNE 
HOMME;ADULTE;DUPOND;ANDRé 
//SORTOUT DD SYSOUT=*
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/08/2012, 08h56   #6
bernard59139
Membre émérite
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 614
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 614
Points : 922
Points : 922
Bien vu................
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2012, 14h19   #7
twisty
Invité de passage
 
Inscription : janvier 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 49
Points : 0
Points : 0
Par défaut demande complémentaire

Merci, ça marche très bien. Mais, si je veux supprimer une colonne entière, située entre deux autres colonnes sans condition, les instructions FINDREP et INOUT sont inutilisables.

exemple de fichier:

Monsieur;ami ;BERTRAND;éric
Madame ;cousin ;VALMON ;véronique
Monsieur;neveu ;DUPONT ;andré

Je veux supprimer la colonne où se trouve ami,cousin,neveu .

Qu'elles instructions dois-je utiliser ?

Merci d'avance Twisty
twisty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2012, 18h53   #8
bernard59139
Membre émérite
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 614
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 614
Points : 922
Points : 922
Mon exemple devrait suffire.
A completer par la lecture de la doc.

a+
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2012, 11h29   #9
twisty
Invité de passage
 
Inscription : janvier 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 49
Points : 0
Points : 0
Par défaut Problème de longueur de tronquage de colonne

Bonjour,

J'utilise effectivement les instructions PARSE,ENDBEFR,FIXLEN,et BUILD avec l'exemple suivant :

//SYSIN DD *
OUTREC PARSE=(%01=(ABSPOS=5,ENDBEFR=C';',FIXLEN=6),
%02=(ENDBEFR=C';',FIXLEN=6),
%03=(FIXLEN=8)),
BUILD=(1,4,5:%01,12:03,24:X)

Note : c'est un fichier variable de longueur : 24 (en comptant les 41er caractère)
ex :
MARTIN;éric ;comptable
DUPOND;alain;médecin

En résultat, j'ai ceci :

MARTIN ;comptable
DUPOND ;médecin

En fait, il manque le ";" après les noms. En changeant la longueru FIXLEN=7, c'est pareil. Faut-il rajouter une instruction supplémantaire pour avoir le ";", après les noms ?

Merci d'avance.

Twisty
twisty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2012, 15h54   #10
bernard59139
Membre émérite
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 614
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 614
Points : 922
Points : 922
Code :
1
2
3
4
5
6
7
8
SORT FIELDS=COPY
INREC  PARSE=(%00=(ABSPOS=5,ENDBEFR=C';',FIXLEN=09),
              %01=(ENDBEFR=C';',FIXLEN=09),
              %02=(ENDBEFR=C';',FIXLEN=09)),
       BUILD=(1,4,%00,SQZ=(SHIFT=LEFT,TRAIL=C';'),
            %02,SQZ=(SHIFT=LEFT,TRAIL=C';'))
OUTFIL  VLTRIM=C' ',
        BUILD=(1,4,5,18,SQZ=(SHIFT=LEFT))
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h32.


 
 
 
 
Partenaires

Hébergement Web