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 :

copie d'un pds avec modification des noms des membres


Sujet :

z/OS

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut copie d'un pds avec modification des noms des membres
    Bonjour,

    Je recherche une méthode rapide pour renommer tout les membres dans un PDS.

    C'est-à-dire que j’ai mon pds ED.DFGO.SRC contenant des sources FGO___, on fait une copie de ce PDS en ED.DBAL.SRC avec les sources FGO, or il faut que les sources dans ED.DBAL.SRC doivent commencer par BAL___. Quand on en a qq’uns, on peut faire 3.1.
    Mais quand on en a 150, cela devient lord.

    FGO00125 devient BAL00125
    FGOBPROD devient BALBPROD

    Avez-vous une méthode par JCL?

    Pour la copie du PDS, je le fais par IEBCOPY.

    Merci par avance.
    Guy

  2. #2
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Par IEBCOPY tu peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //SYSIN    DD *              
     COPY INDD=IN01,OUTDD=OU01   
     S M=((FGO00125,BAL00125,R)) 
     S M=((FGOBPROD,BALBPROD,R))
    Mais faire un JCL pour générer le 'SELECT MEMBER=((OLDMEMBR,NEWMEMBR,R))' n'est simple que si les noms de membre ont tous la même longueur. IEBCOPY n'acceptera pas un SELECT du genre S M=((FGO001 ,BAL001 ,R)). Il faut donc que tous les noms de membres aient la même longueur.
    Dans ce cas un IEHLIST sur un fichier temporaire,
    (SYSIN : LISTPDS DSNAME=MON.PDS.INPUT,VOL=3390=VOLID)
    +1 un SORT de ce fichier de génération du SYSIN de SELECT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //SYSIN    DD  *                                                       
     SORT FIELDS=COPY                                                      
     OMIT COND=(22,1,CH,LT,C'0')     SI PAS TTR (VALEUR CHIFREE) ON JETTE  
     OUTREC FIELDS=(C' S M=((',12,8,C',BAL',15,5,C',R))',80:C' ')
    Et enfin l'IEBCOPY !
    C'est il me semble un cas typique ou un REXX apparait comme beaucoup plus simple (si tu as déjà pratiqué bien entendu).
    Un LISTDS pour lire la Directory et la génération du SYSIN de SELECT MEMBER qui va bien puis appel d'IEBCOPY ou encore au choix, recopie directement par LMCOPY.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    bonsoir,

    je vais regarder lundi votre proposition.

    J'ai fait des recherches et je vois regulierement la notion de REXX.
    J'ai l'impression que cela a l'air vraiment puissant. Mais je ne connais pas.

    Avez vous une doc ou un site qui peut m'aider?

    deja merci pour votre réponse.
    Mais je risque d'en avoir d'autres car je ne connais pas le listds. mais avant je vais voir sur le net si je trouve des infos la dessus.

    Guy

  4. #4
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    et je vois regulierement la notion de REXX.
    J'ai l'impression que cela a l'air vraiment puissant. Mais je ne connais pas.
    REXX est un language interprété (encore qu'il puisse être compilé si on a la chance de disposer du compilateur). Structuré et disposant d'une bonne cinquantaine de fonctions, il s'averre très pratique quand on a un peu le dos au mur avec les outils standards MVS (nb. REXX tourne aussi sur d'autres OS) et permet de faire un peu tout ce que l'on veut. C'est donc un outil courrant, tout au moins dans les métiers de production z/OS, qui permet d'appeler les services TSO et ISPF en particulier mais en fait bien d'autres. Il y a pas mal de doc sur REXX sur le NET mais en francais, plus grand chose à ma connaissance depuis que le responsable du site HOSTHELPONLINE a baissé les bras suite à des attaques de virus multiples et en attendant un nouvel hebergeur. J'espère que l'on reverra bientôt ce site, En attendant, si tu ne connais pas, je te conseilles de te rapprocher des équipes type bureau technique de ton site, il serait étonnant qu'ils ne puissent pas te preter un support de cours, il y a en effet pas mal de sociétés qui donnent des cours REXX et services ISPF, dont IBM bien entendu.
    Pour ton problème, en JCL pur c'est un peu plus difficile sur des noms de membres variables mais ça reste jouable. Je vais vérifier lundi une ou deux possibilités. Par SORT ou ICETOOL mais le SYSIN pour éliminer les blancs ne m'apparait pas si trivial que ça, mais comme souvent en MVS on peut toujours ruser, par exemple en appelant l'EDIT en Batch.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    En faite pour te simplifier la recherche, les noms ont tous 8 caractères.
    Donc c'est pas utile de chercher l'astuce. Mais cela peut être intéressant de voir la solution.

    Pour le moment j'ai un pb dans mon sort (err 158)... mais je ne baisse pas les bras, je vais chercher le pourquoi entre midi et 14h.

    Guy

  6. #6
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Pour le fun donc (ça complique effectivement, mais si un autre voit plus simple je suis aussi preneur), une solution avec SORT (pour des noms de membres sur 5 à 8 caractères) :
    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
    26
    27
    28
    //S0010  EXEC PGM=IEHLIST                                               
    //SYSPRINT DD DSN=&&OUT1,DISP=(NEW,PASS),                               
    // SPACE=(TRK,(15,15),RLSE),LRECL=121,RECFM=FBA,BLKSIZE=0               
    //VOL      DD UNIT=3390,VOL=SER=volser,DISP=SHR                         
    //SYSIN    DD *                                                         
         LISTPDS DSNAME=Mon.PDS.Origine,VOL=3390=volser                    
    //*-------------------------------------------------------------------  
    //S0020    EXEC PGM=SORT                                                
    //SYSOUT   DD  SYSOUT=*                                                 
    //SYSPRINT DD  SYSOUT=*                                                 
    //SORTIN   DD DSN=&&OUT1,DISP=(OLD,DELETE)                              
    //SORTOUT  DD DSN=&SYSUID..WORK.TEMP1,DISP=(NEW,CATLG,DELETE),          
    // SPACE=(TRK,(5,5),RLSE),LRECL=80,RECFM=FB,BLKSIZE=0                   
    //SYSIN    DD  *                                                        
     SORT FIELDS=COPY                                                       
     OMIT COND=((22,1,CH,LT,C'0'),OR,(15,1,CH,EQ,C' '))  - NON TTR / MBR <4 
     OUTFIL  IFTHEN=(WHEN=(16,1,CH,EQ,C' '),   LONG. MBR = 4                
             BUILD=(C' S M=((',12,4,C',BAL',15,1,C',R))',80:C' ')),         
             IFTHEN=(WHEN=(17,1,CH,EQ,C' '),   LONG. MBR = 5                
             BUILD=(C' S M=((',12,5,C',BAL',15,2,C',R))',80:C' ')),         
             IFTHEN=(WHEN=(18,1,CH,EQ,C' '),   LONG. MBR = 6                
             BUILD=(C' S M=((',12,6,C',BAL',15,3,C',R))',80:C' ')),         
             IFTHEN=(WHEN=(19,1,CH,EQ,C' '),   LONG. MBR = 7                
             BUILD=(C' S M=((',12,7,C',BAL',15,4,C',R))',80:C' ')),         
             IFTHEN=(WHEN=NONE,                LONG. MBR = 8                
             BUILD=(C' S M=((',12,8,C',BAL',15,5,C',R))',80:C' '))          
    //* GENERATION D'UN SELECT MEMBER=((OLDMEMBR,NEWMEMBR,R))

  7. #7
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Toujours pour le fun et pour rappeler qu'un EDIT assez rustique fonctionne aussi en batch, bien que l'on n'y pense pas souvent :
    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
    26
    27
    28
    29
    30
    31
    32
    //SYSIN    DD  *                                                      
     SORT FIELDS=COPY                                                     
     OMIT COND=(22,1,CH,LT,C'0')     SI PAS TTR (VALEUR CHIFREE) ON JETTE 
     OUTREC FIELDS=(C' S M=((',12,8,C',BAL',15,5,C',R))',80:C' ')         
    //*-------------------------------------------------------------------
    //EDIT03   EXEC PGM=IKJEFT01        
    //SYSTSPRT DD  SYSOUT=*                                               
    //SYSTSIN  DD  *                                                      
    EDIT 'MON.FICHIER.SORTIE.DE.TRI' DATA NONUM                                  
    CHANGE * 9999 '    ' '' ALL                                           
    TOP                                                                   
    CHANGE * 9999 '   '  '' ALL                                           
    TOP                                                                   
    CHANGE * 9999 '  '   '' ALL                                           
    TOP                                                                   
    CHANGE * 9999 ' '    '' ALL                                           
    TOP                                                                   
    CHANGE * 9999 'SM='  ' SELECT MEMBER=' ALL                            
    TOP                                                                   
    END SAVE                                                              
    //*
    //S0040    EXEC PGM=IEBCOPY                             
    //SYSPRINT DD  SYSOUT=*                                 
    //SYSUDUMP DD  SYSOUT=*                                 
    //IN01     DD  DISP=SHR,DSN=&PDSIN                      
    //OU01     DD  DSN=&SYSUID..WORK.MONPDS.COPIE,          
    //             DISP=(NEW,CATLG),UNIT=3390,LIKE=&PDSIN   
    //SYSIN    DD *                                         
      COPY  INDD=((IN01,R)),OUTDD=OU01                      
    //         DD DSN=MON.FICHIER.SORTIE.DE.TRI,DISP=SHR          
    //

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci Homer-ac,

    Pour tout le temps que vous avez passé pour répondre à mes questions...

    Mais pour le moment, je n'arrive pas à faire fonctionner le IEHLIST, mais je vais pas me laisser embêter par cela, je vais continuer à chercher le pourquoi.
    Je me permettrai de remettre un msg si je bloque.

    Sinon comme vous avez dis, j'ai fait la demande sur la doc sur Rexx et en même temps sur les jcl's.

  9. #9
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    IEHLIST est un utilitaire antédiluvien de MVS pour lister une vtoc ou une directory. Comme il faut spécifier le volume, et dans une DD (le plus souvent on met DISP=OLD, mais ça marche avec SHR) et dans le SYSIN, en général, gestion SMS oblige, on le remplace par autre chose sur les sites z/OS, mais au moins marche t'il partout, c'est pourquoi je l'avais signalé.
    Un exemple de JCL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      
    //S0010  EXEC PGM=IEHLIST                                    
    //SYSPRINT DD DSN=&&OUT1,DISP=(NEW,PASS),                    
    // SPACE=(TRK,(15,15),RLSE),LRECL=121,RECFM=FBA,BLKSIZE=0    
    //VOL      DD UNIT=3390,VOL=SER=volume,DISP=SHR              
    //SYSIN    DD *                                              
         LISTPDS DSNAME=mon.PDS.a.lister,VOL=3390=volume 
    //*
    Vraissemblablement si tu n'arrives pas à le faire fonctionner c'est que tu n'as pas spécifié de DD (DDNAME quelconque) pointant sur le volume disque où se trouve ton PDS

  10. #10
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Bien que la finalité de ce forum est de proposer des réponses mais pas des solutions toutes faites, comme ça me faisait une pose, j'ai testé ceci.
    Un REXX qui récupère la liste des membres du PDS passé en SYSUT1 dans le JCL et qui réécrit sur un fichier QSAM en DD SYSUT2, pour relecture en SYSIN ensuite, après remise en forme de chaque ligne par l'instruction REXX trouvée dans le PARM.
    J'ai mis le tout dans un JCL complet. Bien entendu, normalement le REXX serait dans un PDS de procédures appelées directement par IKJEFT01. Normalement également un REXX de service de ce type aurait très bien pu faire directement la copie des membres. Simplement dans ce cas, c'est un peu plus ouvert puisque l'on génère le SYSIN que l'on veut via le PARM d'appel.
    Juste pour ceux qui ne connaissent pas, ça donne une idée de la puissance de REXX. Il n'y a pas beaucoup de languages qui permettent d'exécuter une instruction contenue dans une variable. Donc pourquoi pas un petit coup de pub pour REXX au passage.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    //*-----------------------------------------------------------------
    //PDSIN    SET PDSIN=ici.le.nom.du.PDS.en.entrée
    //PDSOU    SET PDSOU=ici.le.nom.du.PDS.en.sortie
    //*-----------------------------------------------------------------
    //*------- COPIE DU REXX SUR UN PDS TEMPORAIRE --------------------*
    //IEBGENER EXEC PGM=IEBGENER
    //SYSUT1   DD   *,DLM=££
    /* REXX - LISTE sous TSO ou écriture sur SYSUT2 de tous les membres   */
    /* ====   d'un PDS passé en PARM ou via une DD JCL BATCH SYSUT1       */
    /*        si DD SYSUT1, le parm contient l'ordre REXX de restitution  */
    /*        pour chaque membre trouvé.   Par exemple :                  */
    /*        " SELECT MEMBER="MBR.        A défaut, affich/écrit. simple */
    /* ------------------------------------------------------------------ */
    Arg PARM
    /* PARM = '" SELECT MEMBER="MBR'     pour test sous TSO */
    PARM=Strip(strip(PARM),"B","'")   /* si QUOTES, VIREES AUX EXTREMITES */
    Call ON HALT                /* GESTION INTERRUPTION sous TSO */
    Address TSO                 /* MODE EXEC TSO EN BATCH */
    RC = LISTDSI('SYSUT1' FILE)
    DSNAME = SYSDSNAME
     
    If RC <> 0 then ,           /* PAS DE DDNAME SYSUT1 TROUVE */
       Parse var PARM DSNAME PARM  /* Sous TSO dans le PARM ?  */
    DSNAME=Strip(DSNAME,B,"'")  /* si QUOTES, VIREES AUX EXTREMITES */
    If SYSDSN("'"DSNAME"'") ^= 'OK' then do
       say DSNAME SYSDSN("'"DSNAME"'") 'ABANDON !' ; Exit 4
    End
    X= OUTTRAP('TAB.')
    "LISTDS  '"DSNAME"' MEMBERS"
    If TAB.0 < 5 then do
       say Strip(TAB.1) ; say Strip(TAB.2) 'ABANDON !' ; Exit 4
    End
    do i=1 TO TAB.0            /* Il faut se pointer sur 1er membre */
       If Pos('-MEMBERS',TAB.i) > 0 then LEAVE
    End
    If Pos('-MEMBERS',TAB.I) = 0 then EXIT 1      /* CE N'EST PAS UN PDS */
    R2 = LISTDSI('SYSUT2' FILE)              /* SYSUT2 EST T'IL ALLOUE ? */
    j = i + 1 ; k = TAB.0 - i
    do i=1 TO k /* Réaffectation des noms de membres au début du tableau */
       MBR = strip(TAB.j)  ; j = j + 1
       if PARM = '' then TAB.i = MBR              /* simple */
                    else interpret 'TAB.i=' PARM  /* ou par affect. Parm */
       if R2 <> 0 then say TAB.I            /* pas de SYSUT2 - Affichage */
    End
    if R2 = 0 then "EXECIO" k "DISKW SYSUT2 (STEM TAB. FINIS)"  /* Batch */
    drop TAB.
    Exit 0
     
    HALT:
    say "LISTE DES MEMBRES PDS INTERROMPUE !"
    Exit 0
    ££
    //SYSPRINT DD   SYSOUT=*
    //SYSUT2   DD   DISP=(,PASS,DELETE),DSN=&&REXX(TMPREXX),
    //         SPACE=(TRK,(15,15,5),RLSE),    BIB DE REXX TEMPORAIRE
    //         DCB=(RECFM=FB,LRECL=80,BLKSIZE=0,DSORG=PO)
    //*
    //SYSIN    DD   *
     GENERATE MAXFLDS=9
     RECORD   FIELD=(80,1,,1)
    //*
    //DELOUT   DD  DSN=&PDSOU, DELETE DU PDS DE TRAVAIL A CREER VIA IEBCOPY
    //             DISP=(MOD,DELETE),UNIT=3390,SPACE=(TRK,(1,1))
    //*------------------------------------------------------------------
    //*------- EXECUTION DU REXX : GENERATION SYSIN SUR LISTE DES MEMBRES
    //REXX001  EXEC PGM=IKJEFT01,
    // PARM=('TMPREXX " SELECT MEMBER=(("MBR",NEW"SUBSTR(MBR,4)",R))"')
    //*                                       === PREFIXE MEMBRE A CORRIGER
    //* GENERATION D'UN SELECT MEMBER=((OLDMEMBR,NEWMEMBR,R))
    //SYSPROC  DD   DISP=(OLD,DELETE),DSN=&&REXX
    //SYSTSPRT DD   SYSOUT=*
    //SYSTSIN  DD   DUMMY
    //SYSUT1   DD   DISP=SHR,DSN=&PDSIN
    //SYSUT2   DD   DISP=(NEW,PASS),DSN=&&TEMP1,
    //         SPACE=(TRK,(15,15,5),RLSE),    GENERATION SYSIN POUR IEBCOPY
    //         DCB=(RECFM=FB,LRECL=80,BLKSIZE=0,DSORG=PS)
    //*
    //*------------------------------------------------------------------
    //*------- EXECUTION DE LA COPIE DES MEMBRES, NOUVEAU PREFIXE : NEW
    //IEBCOPY  EXEC PGM=IEBCOPY
    //SYSPRINT DD  SYSOUT=*
    //SYSUDUMP DD  SYSOUT=*
    //IN01     DD  DSN=&PDSIN,DISP=SHR
    //OU01     DD  DSN=&PDSOU,DISP=(NEW,CATLG),UNIT=3390,LIKE=&PDSIN
    //*        SPACE=(TRK,(45,45,100),RLSE)  ,SPACE A AJOUTER SI PB SMS
    //SYSIN    DD *
      COPY  INDD=((IN01,R)),OUTDD=OU01
    //         DD DSN=&&TEMP1,DISP=(OLD,DELETE)
    //
    //STEPFIN  EXEC PGM=IEFBR14
    //*==================================================================

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    je viens de lire ton message, et je ne veux absolument pas la réponse toute faite!!! Car ce que j'aime c'est trouver le pourquoi du problème...
    Donc il ne faut surtout pas me donner les réponses mais des chemins pour trouver...

    Car ce midi j'ai réussie à trouver le fonctionnement du IEHLIST. Et j'avoue que la sensation était vraiment sympa.

    Donc merci pour ta propoition toute faite mais je vais la mettre de coté et je la regarderai quand mon traitement tournera.. Car j'ai un p'tit pb avec le IEBCOPY. Mais rien d'insurmontable.

    a bientôt j'espere.

  12. #12
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Comme je l'ai dit, le but n'est pas de donner des solutions 'clé en main' mais pour le coup, un REXX m'a détendu, d'autant plus que ce problème d'IEHLIST est récurrent en MVS.
    Personnellement, je veux bien utiliser un utilitaire STANDARD MVS qui spécifie un STORAGROUP pour lister un contenu mais pas un VOLSER ! A l'heure de SMS généralisé à peu près partout en z/OS ça me semble débile !
    Sauf que pour IEHLIST, je cherche encore une alternative STANDARD au LISTPDS. Pour lister la VTOC, en alternative au LISTVTOC, pas de problème, le DCOLLECT est plus sérieux. De même que , dans la famille IEH je demande le fils, pour remplacer l'ancien utilitaire IEHPROGM de cette génération, rien à dire, IDCAMS a évolué pour ça.
    Reste le LISTPDS. Là je cherche encore le digne successeur qui évite de sortir un REXX de son chapeau ou un produit spécifique genre PDSMAN, FILEAID ou autre !
    Alors j'en profite pour passer un appel. Si j'ai raté quelque chose et si quelqu'un a vu une alternative crédible au LISTPDS dans les utilitaires STANDARD IBM, ça m'intéresse aussi !
    nb. un LISTDS via IKJEFT01 bien entendu, mais c'est un peu pauvre il me semble !

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Je viens de faire la comparaison entre ma sol et la tienne...
    Et j'avoue que la votre est plus rapide.

    Par contre je viens de remarquer que l'on fait une incertion dans un nouveau pds. Comment faire pour mettre à jour dans un PDS contenant deja des membres sans les ecrasser?

    Merci.

  14. #14
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Par IEBCOPY
    COPY INDD=((IN01,R)),OUTDD=OU01 -> option replace
    COPY INDD=IN01,OUTDD=OUT01 -> pas de replace (messages de Warning)
    Puis les SELECT MEMBER= (ou S M=)

    Nb. C'est sans rapport mais une info. pour ceux que ça peut interesser : j'ai vérifié par curiosité. Contrairement à ce que laisse penser la DOC IBM, on peut appeller IEHLIST dans un COBOL. Il faut juste faire attention aux options de compilations et Options Langage Environment (IEHLIST est en AMODE 24).
    On peut donc remplacer IEHLIST par un COBOL d'appel qui génère le SYSIN qui va bien pour des PDS gérés par SMS.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    je me suis mal exprimé...

    Dans le solution que tu as mise, on fait fait une suppression du pds en sortie

    //DELOUT DD DSN=&PDSOU, DELETE DU PDS DE TRAVAIL A CREER VIA IEBCOPY
    // DISP=(MOD,DELETE),UNIT=3390,SPACE=(TRK,(1,1))

    et après on fait :

    COPY INDD=((IN01,R)),OUTDD=OU01 (ou OU01 est &PDSOU)

    Or mon pb en faisant cela on supprime tout ce qu'il y a dans &PDSOU.
    Or je veux mettre à jour certains membres et ne pas toucher les autres.

    Je pensai quand suppriment DELOUT, cela serait ok, mais j'ai l'erreur disant de le pds &PDSOU est deja catalogué.

    fg

  16. #16
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    C'est du JCL de base.
    Si ou veut faire l'IEBCOPY sur un PDS existant. on le met en DISP=SHR dans le Step d'IEBCOPY : PDSOUT DD DISP=SHR,DSN=le.PDS.en.sortie
    Bien entendu pas question de Delete en amont dans ce cas.
    Le JCL que j'avais proposé permet simplement de tester sans risque, à charge ensuite d'adapter le JCL à son besoin.
    nb. Il y a pas mal de doc sur le JCL sur internet, et il me semble indispensable de pratiquer au moins un peu ce JCL pour travailler en MVS; Si de grosses sociétés choisissent une exploitation z/OS, c'est encore probablement parce que c'est un OS sans concurrence dans une logique de gestion Batch.

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bjr,

    Je suis mort de honte en lisant ta réponse...

    Merci pour tout et surtout pour tout le temps que tu as passé à me répondre.

    Si besoin d'info complementaire, je connais une bonne adresse...

    encore merci.

  18. #18
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Pas de pb et de honte à avoir, on a tous galéré au début en MVS.
    Mais si je peux me permettre un conseil, ne pas s'intéresser aux forums seulement quand on a un problème. Chaque question apporte son lot d'idées et tous avons a y gagner.
    Par exemple, cette histoire de LISTPDS IEHLIST. Le fait qu'il faut spécifier le VOLSER énerve tous ceux (en fait presque tous en MVS) qui travaillent avec SMS.
    Si on regarde sur le net, chacun y est allé de son REXX. J'ai fait ça aussi comme tout le monde je suppose, parce que même si c'est mieux en assembleur, les sites ont moins de compétences en Assembleur en ces temps.
    S'il n'y avais pas eu celle question, parce qu'IEHLIST est un progamme autorisé, je n'aurai pas eu la curiosité de vérifier si un appel COBOL est possible.
    Merci donc, je vais me faire ça en COBOL, juste par esprit de contradiction. COBOL n'auant paa le réputation de pouvoir gérer ça.
    Parce qu'il y a moins de compétences en Assembleur, IBM met en avant le C à présent pour tout ce qui touche un peu au système. Normal, ils vendent de la CPU. Quand on voit qu'i faut moins d'un Meg pour compiler/linkéditer un Cobol contre 20 pour un progamme C, il ne me semble pa compliqué d'en déduire que le flot de runtime nécessaires à C pour son exécution à un coût.
    Nb. Pour ceux qui ne compendraient pas, disons que c'était ma minute nostalgie.

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

Discussions similaires

  1. suppression dossier avec condition suivant nom des dossiers
    Par rastacouaire dans le forum VBScript
    Réponses: 2
    Dernier message: 02/11/2010, 13h53
  2. Réponses: 3
    Dernier message: 16/08/2009, 21h06
  3. AddIn avec SAS : récupérer noms des variables de table
    Par pavinho dans le forum Outils BI
    Réponses: 0
    Dernier message: 27/07/2009, 17h41
  4. Réponses: 2
    Dernier message: 20/05/2007, 19h22
  5. Modification à la chaine des noms de contrôle
    Par dde78 dans le forum Access
    Réponses: 3
    Dernier message: 29/09/2005, 17h24

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