Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > 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 ...

Réponse
 
Outils de la discussion
Vieux 30/10/2008, 20h42   #1 (permalink)
Invité de passage
 
Date d'inscription: octobre 2008
Localisation: Guyancourt
Messages: 3
Par défaut Copy d'un membre dans tous les membres d'un PDS

Bonjour à tous,

Voici mon problème,
J'ai une bibliothèque dans laquelle j'ai un membre, et une seconde dans la quelle j'ai environ 300 membres.
Je voudrais que le membre de ma première biliothèque soit recopié au début de chaque membre de la seconde.

Comment faire en peu de Steps. Car j'y parviens mais membre par membre et cela me fait trop de Steps dans mon JCL.

Merci pour vos réponses
Gomulf est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 11h31   #2 (permalink)
Rédacteur
 
Avatar de Peut-êtreUneRéponse
 
Date d'inscription: décembre 2006
Localisation: Ile de France
Messages: 287
Par défaut

Citation:
Envoyé par Gomulf Voir le message
Je voudrais que le membre de ma première biliothèque soit recopié au début de chaque membre de la seconde.
Bonjour,

veux-tu dire : "Je voudrais que le contenu du membre de ma première bibliothèque soit recopié au début du contenu de chaque membre de la seconde" ?

Personnellement, je ferais un REXX.

.
__________________
>> Documentation Mainframe par Guillaume Ventre <<

Dernière modification par Peut-êtreUneRéponse ; 31/10/2008 à 11h42
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 12h15   #3 (permalink)
Invité de passage
 
Date d'inscription: octobre 2008
Localisation: Guyancourt
Messages: 3
Par défaut

Oui c'est bien le contenu que j'aimerais ajouter (comme si dans mon premeir membre j'avais une carte Job que je voudrais recopier dans tous les membres de ma seconde bibl)
Gomulf est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/10/2008, 15h39   #4 (permalink)
Membre Confirmé
 
Avatar de Homer-ac
 
Date d'inscription: octobre 2007
Localisation: région parisienne
Messages: 228
Par défaut

Si c'est pour ajouter qque chose dans tout un PDS de JCL ,on dispose de l'ordre INCLUDE :
Code :
//I1     JCLLIB ORDER=MY.PDS.REF
//IN1   INCLUDE MEMBER=MEMBRE
Si c'est pour ajouter partout une 'carte' JOB ou si ce n'est pas du JCL, pas facile d'éviter un REXX.
Le plus évolutif est d'appliquer une macro EDIT sur tous le PDS. Comme cet exemple peut resservir à d'autres, j'ai pris le temps d'adapter le REXX "boite à outils" suivant :

==> Principe : Le REXX lit la directory du PDS spécifié et se rappelle lui même sous forme de macro EDIT sur tous les membres du PDS). Il n'y a qu'à adapter le sous-programme constitutif de l'exécution de la macro EDIT à ses besoins. J'ai mis 2 routines. La première (APPLYMAC) pour vérification de fonctionnement, fait un simple affichage du membre édité, la seconde (APLLYMACJ) comme exemple de macro EDIT. Insère 3 lignes constitutives d'une carte JOB, uniquement si la première ligne n'est pas un ordre JOB (c'est évidemment un exemple à adapter)

Code :
/* REXX - MYMACRO - LISTE DES MEMBRES D'UN PDS PAR LMMLIST */           
/* **** -        ET APPLICATION D'UNE MACRO EDIT CONTENUE  */           
/*          DANS CE REXX (APPLYMAC:) EN MODE APPEL MACRO   */           
/*=========================================================*/           
trace 'o'                                                               
arg PDS .                                                               
if  PDS = '' then PDS = userid()'.MYPDS.JCL'     /* PDS A METTRE A JOUR */
             /*    ==>  '------------------'  NOM DU PDS A CORRIGER !!! */
if sysdsn("'"PDS"'") ^= 'OK' then EXIT 8 /* LE PDS EST INVALIDE */      
   
Parse Source  . . MBR . DSNR .  /* MEMBRE et PDS D'EXECUTION du REXX */ 
is MBR = '' then MBR = 'MYMACRO'           /* NOM DE CE REXX */  
ADDRESS ISPEXEC "ISREDIT MACRO (TR)"                                    
IF RC = 0 THEN SIGNAL APPLYMAC  /* C'EST UN APPEL MACRO SOUS EDIT */    
                                /* ON L'APPLIQUE PARTOUT ........ */    
        /*  OU SIGNAL APPLYMACJ    EXEMPLE MACRO POUR AJOUT CARTE JOB */
        /*  --------------------------------------------------------- */
                                                                        
if pos('.',DSNR) > 0 then CALL ALLOCBIB /* ALLOC SYSUEXEC BIB EN EXEC */
                                    /* (SI CE REXX EST APPELE PAR EX) */
ADDRESS ISPEXEC                                                         
MACED = MBR ; MBR = ''  /* MACRO EDIT A PASSER SUR TOUS LES MEMBRES   */
"LMINIT DATAID(ID1)  DATASET('"PDS"') ENQ(SHRW)"                        
'LMOPEN DATAID('ID1')'                                                  
Do Forever            /* LISTE DES MEMBRES DU PDS A MODIFIER EN MASSE */
   'LMMLIST DATAID('ID1') OPTION(LIST) MEMBER(MBR)'                     
   if RC <> 0 then leave                                                
   DATAST = "'"PDS"("strip(MBR)")'"      
   "EDIT DATASET("DATAST") MACRO("MACED")"                              
                                                                        
end                                                                     
'LMMLIST DATAID('ID1') OPTION(FREE)'                                    
'LMCLOSE DATAID('ID1')'                                                 
'LMFREE  DATAID('ID1')'                                                 
                        /* COMPRESS DU PDS APRES MISE A JOUR DE MASSE */
"LMINIT  DATAID(ID2)  DATASET('"PDS"') ENQ(EXCLU)"                      
'LMCOMP  DATAID('ID2')'                                                 
'LMFREE  DATAID('ID2')'                                                 
Exit                                                                    
                                                                        
/* CAS D'APPEL DE CE REXX PAR EXEC, IL FAUT ALLOUER SYSUEXEC POUR    */ 
/*       APPEL PAR LA SUITE EN PROTOCOLE D'EXECUTION MACRO           */ 
ALLOCBIB:                                                               
ADDRESS TSO                                                             
AMSG = MSG(OFF)   /* ALLOCATION DU PDS CONTENANT LE REXX EN SYSUEXEC */ 
"ALTLIB DEACT USER(EXEC)" /* POUR EXECUTION DE CE REXX EN MODE MACRO */ 
"FREE FILE(SYSUEXEC)"                                                   
"ALLOC DA('"DSNR"') FILE(SYSUEXEC) SHR REUSE"                           
if RC > 0 then EXIT RC    /* ON S'EST PLANTE DANS LE NOM DU PDS REXX */ 
"ALTLIB ACTIVATE USER(EXEC)"                                            
AMSG = MSG(ON)     /* ---------------------------------------------- */ 
RETURN                                                                  
                                                                        
/* CAS D'APPEL DE CE REXX PAR MACRO EDIT (IL S'EST RAPPELE LUI MEME) */ 
/* ================================================================= */ 
APPLYMAC:                                                               
/* - EXEMPLE DE MACRO EDIT DE TEST -> SIMPLE INDICATION DU MEMBRE */    
/* ============================================================== */    
trace 'O'                                                               
"ISREDIT (MEM) = MEMBER " /* NOM DU MEMBRE  */                          
SAY '--> VU MEMBRE =' MEM '!'                                           
"ISREDIT CAN"                                                           
Exit                                                                    
                                                                        
/* - EXEMPLE DE MACRO EDIT : AJOUT CARTE JOB SI ELLE EST MANQUANTE */   
/* =============================================================== */   
APPLYMACJ:                                                              
trace 'O'                                                               
/* ADDRESS ISPEXEC "ISREDIT MACRO" - POUR TEST HORS DE CE REXX */       
"ISREDIT (MEM) = MEMBER "         /* NOM DU MEMBRE  */                  
JOB1 = "//"left(USERID()'A',8) "JOB (acct),'"MEM"',MSGCLASS=H,CLASS=A," 
JOB2 = "//        NOTIFY=?SYSUID,COND=(04,LT)"                          
JOB3 = "//* *********************************"                          
"ISREDIT CURSOR  = 1"                                                   
"ISREDIT (LIGNE) = LINE 1"                                              
if word(LIGNE,2) <> 'JOB' then do                                       
   "ISREDIT LINE_AFTER 0 =" '"'JOB3'"' /* INSERT LIGNES ORDRE INVERSE */
   "ISREDIT LINE_AFTER 0 =" '"'JOB2'"'                                  
   "ISREDIT LINE_AFTER 0 =" '"'JOB1'"'                                  
   "ISREDIT CHANGE X'7E6F' X'7E50' FIRST" /* NOTIFY=&SYSUID */          
   "ISREDIT STATS OFF"                                                  
   "ISREDIT SAVE"                                                       
   "ISREDIT RES"                                                        
   "ISREDIT LINE_AFTER 0 = MSGLINE '*** CARTE JOB AJOUTEE' "            
   "ISREDIT CURSOR = 1 1"            
End                                  
else do                              
   "ISREDIT CAN"                     
   SAY '--> VU MEMBRE =' MEM '!'     
End                                  
Exit
* Attention après adatation du code utilisé en macro EDIT à exécuter, tester (EX devant le REXX) sur un PDS qui ne contient que 2 ou 3 membres, sinon en cas d'erreur dans ce code macro EDIT, on risque de galérer pour en sortir !
D'autre part en Batch, il faudrait envisager un montage différent.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/11/2008, 12h45   #5 (permalink)
Membre éprouvé
 
Date d'inscription: mars 2004
Messages: 407
Par défaut

Bonjour,

pourquoi ne pas utiliser mask et insert pour la partie Mise à jour ?
sam01 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/11/2008, 10h26   #6 (permalink)
Invité de passage
 
Date d'inscription: octobre 2008
Localisation: Guyancourt
Messages: 3
Par défaut

Merci à tous,

Excusez moi pour le temps de réponse mais j'ai eu d'autres problèmes.

Je me doutais bien être obligé de passer par un REXX mais je voulais l'eviter.

Donc je m'en suis fait un

Merci
Gomulf
Gomulf est déconnecté   Envoyer un message privé Réponse avec citation
NEWS AUTRESAdaAlgoAssembleurBasicCobolFortranLaTeXMATLABPascalPerlPrologPurebasicRéseauRubySystèmesXMLRAD

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > z/OS



Outils de la discussion

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

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide