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 20/08/2009, 11h17   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 31
Points : 12
Points : 12
Par défaut [JCL] [résolu] Tri particulier

Bonjour à tous,

j'ai besoin de faire un tri particulier dans un fichier, c'est-à-dire que j'ai une zone et je veux mettre en premier celles qui ont la valeur V1, puis celles qui ont las valeur V2 etc...., sachant qu'il n'y a pas forcement d'ordre dans les Vn.

Est-ce possible par JCL? Si oui comment?

Je vous remercie par avance.

Dernière modification par Agent_Nivek ; 01/09/2009 à 12h29.
Agent_Nivek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2009, 14h01   #2
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 071
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 071
Points : 1 659
Points : 1 659
L'instruction de contrôle ALTSEQ du SORT permet de modifier l'ordre des caractères dans la réprésentation EBCDIC.

Par contre, elle ne s'applique qu'à un seul caractère, si votre zone en comporte plusieurs ça peut être plus compliqué ...

Donnez-nous un exemple de ce que vous voulez.

....

Dernière modification par Hédhili Jaïdane ; 20/08/2009 à 15h00. Motif: Déplacement de discussion demandé
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2009, 08h28   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 31
Points : 12
Points : 12
Bonjour,

Alors en fait c'est simple, ce sont des listes de compte et on me demande de les trier suivant une catégorie (compte de dépôt, épargne liquide, etc...). Le problème étant que cette catégorie se définie suivant le code produit qui est un X(4) et par exemple un compte de dépôt à un code 0004 alors que le premier des épargne liquide a un code 0000.

En fait j'ai deux solutions : soit je peux trier par JCL et dans ce cas je n'ai pas beaucoup de modif. Soit je dois ajouter dans mes programmes un code de tri secondaire qui va me permettre d'ordonnancer ces produits.
Agent_Nivek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2009, 09h21   #4
Futur Membre du Club
 
Inscription : mai 2009
Messages : 12
Détails du profil
Informations personnelles :
Âge : 38
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2009
Messages : 12
Points : 15
Points : 15
Par défaut OUTFIL puis IEBGENER

En 2 steps cela devrait fonctionner
D'abord OUTFIL pour créer le nombre de fichiers correspondant aux catégories voulues
puis un IEBGENER pour concaténer les fichiers dans l'ordre voulu


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//SERV0030 EXEC PGM=SORT                                              
//SYSOUT   DD SYSOUT=*                                                
//SORTIN   DD  DISP=SHR,DSN=fichier-entrée 
//OUT1     DD  DISP=(,CATLG,DELETE),SPACE=(CYL,(1,5),RLSE),           
//             DCB=*.SORTIN,                                          
//             DSN=fichier-cat1                      
//OUT2     DD  DISP=(,CATLG,DELETE),SPACE=(CYL,(1,5),RLSE),           
//             DCB=*.SORTIN,                                          
//             DSN=fichier-cat2                     
//OUT3     DD  DISP=(,CATLG,DELETE),SPACE=(CYL,(1,5),RLSE),           
//             DCB=*.SORTIN,                                          
//             DSN=fichier-reste          
//SYSIN    DD    *                                            
              SORT FIELDS=COPY                                
              OUTFIL INCLUDE=(29,4,CH,EQ,C'0004'),               
                                                 FNAMES=OUT1  
              OUTFIL INCLUDE=(29,4,CH,EQ,C'0000'),               
                                                 FNAMES=OUT2  
              OUTFIL SAVE,FNAMES=OUT3                         
//*

Code :
1
2
3
4
5
6
7
8
//S010IEB  EXEC PGM=IEBGENER                                   
//SYSPRINT DD SYSOUT=*                                         
//SYSUT1 DD DISP=SHR,DSN=fichier-cat1 
//            DD DISP=SHR,DSN=fichier-cat2 
//            DD DISP=SHR,DSN=fichier-reste
//SYSUT2 DD   DISP=(,CATLG,DELETE),SPACE=(CYL,(5,50),RLSE),    
//            DCB=*.SYSUT1,                                    
//            DSN=fichier-trié
Julien Del est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2009, 11h04   #5
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Si il y a un filler dans le fichier, il très facile de gérer ce problème avec INREC dans un simple sort, sinon ICETOOL est plus adapté en passant par un fichier CTRL.
Si on suppose le code produit sur 4 en col. 10, un filler en dernière position = 80 (que l'on va donc pouvoir modifier en entrée de tri) et le reste du critère de tri sur 10 octets derrière le code produit ça donne :
Code :
1
2
3
4
5
6
7
8
//SYSIN    DD  *                                                 
 SORT FIELDS=(80,1,CH,A,10,14,CH,A) 
 INREC   IFTHEN=(WHEN=(10,4,CH,EQ,C'0004'),OVERLAY(80:C'1')),    
         IFTHEN=(WHEN=(10,4,CH,EQ,C'0000'),OVERLAY(80:C'2')),    
         IFTHEN=(WHEN=NONE,OVERLAY(80:C'9'))                     
 OUTREC FIELDS=(1,79,C' ')                                       
//*
On aura les 0004 au début, puis les 0000, puis le reste
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2009, 12h27   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 31
Points : 12
Points : 12
Bonjour,

merci à vous pour ces réponses, c'est parfait.
Agent_Nivek 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 +1. Il est actuellement 06h43.


 
 
 
 
Partenaires

Hébergement Web