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 :

REXX : lecture d'un fichier dont le contenu est à passer en paramètre dans une instream-procedure


Sujet :

z/OS

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Points : 39
    Points
    39
    Par défaut REXX : lecture d'un fichier dont le contenu est à passer en paramètre dans une instream-procedure
    Bonjour,

    Je souhaite lire un fichier 'fichier', dont chaque information par ligne, est à passer en paramètre dans une instream-procedure :


    Voici mon instream-procedure :

    //maproc PROC nomfic=
    //BSTITPT01 DD *,SYMBOLS=JCLONLY
    RETRIEVE ELEMENT &nomfic FROM SYSTEM nomsyst SUBSYSTEM nomsbsyst ENVIRONMENT nomenv STAGE s
    TYPE cobol TO DSNAME 'nom_lib' MEMBER &nomfic OPTIONS CCID 'nom_ccid'
    REPLACE MEMBER.
    //*
    // PEND
    //*
    //E1 EXPORT SYMLIST=(nomfic)
    //STEP EXEC PROC=maproc,nomfic=&var_fichier

    Donc, je souhaite lire le fichier 'fichier', et à chaque ligne lu, mettre le contenu dans &var_fichier.

    Exemple :
    'fichier' contient :
    module1
    module2
    module3

    Pour la 1ère lecture de 'fichier', je veux mettre 'module 1' dans &var_fichier

    A l'exécution, on aura :
    //STEP EXEC PROC=maproc,NOMFIC=module1 (puis =module2) (et enfin =module3)


    La solution d'écrire, dans ce cas, 3 fois le step :
    //STEP EXEC PROC=maproc,NOMFIC=module1
    //STEP EXEC PROC=maproc,NOMFIC=module2
    //STEP EXEC PROC=maproc,NOMFIC=module3

    est à bannir, car le fichier 'fichier' peut contenir plus de 50 enregistrements.


    Pourriez-vous m'aider ?

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Points : 39
    Points
    39
    Par défaut éclaicissement du problème
    Bonjour,

    Si je n'ai pas de réponse, c'est peut être que j'ai mal posé le problème. En fait, je veux simplement lire chaque enregistrement d'un fichier, en le passant en variable dans une INSTREAM PROCEDURE. Chacun de ces enregistrements est une table à mettre à jour, grâce, justement à INSTREAM PROCEDURE.

    Cela me permet d'éviter, de modifier ces tables (une centaine), une par une.

    En espérant que c'est clair, pourriez-vous m'aider ?

    Merci d'avance.

  3. #3
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    C'est pas très clair ton souci ...

    Tu écris :
    A l'exécution, on aura :
    //STEP EXEC PROC=maproc,NOMFIC=module1 (puis =module2) (et enfin =module3)
    Mais ça n'a pas de sens d'un point de vue JCL car ta procédure n'accepte qu'un paramètre en entrée.


    De plus :
    La solution d'écrire, dans ce cas, 3 fois le step :
    //STEP EXEC PROC=maproc,NOMFIC=module1
    //STEP EXEC PROC=maproc,NOMFIC=module2
    //STEP EXEC PROC=maproc,NOMFIC=module3
    est à bannir, car le fichier 'fichier' peut contenir plus de 50 enregistrements
    Mais en quoi est ce un problème ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Points : 39
    Points
    39
    Par défaut détail du problème
    Pour un //STEP EXEC PROC=maproc,NOMFIC=module1 (puis =module2) (et enfin =module3) , je veux dire que module1, sera remplacé par module2, puis module3 :

    Donc, il faut lancer, dans ce cas, 3 fois le jcl, en changeant à chaque fois le module. ET, pour 50 modules, il faudra le lancer 50 fois.

    De plus, nous sommes d'accord à ne pas créer les ligens suivants dans le jcl :

    //STEP EXEC PROC=maproc,NOMFIC=module1
    //STEP EXEC PROC=maproc,NOMFIC=module2
    //STEP EXEC PROC=maproc,NOMFIC=module3
    ....

    Car il y en aurait 50 à écrire, si on a affaire à 50 modules différents.

    Justement, pour éviter cette redondance, il faudrait :
    1) lire, ligne par ligne, le contenu d'un fichier, en REXX, contenant chacune un module.
    2) mettre, en paramètre, ce module, dans une INSTREAM PROCEDURE, afin de modidier le contenu du module lu.

    Et, dans ce cas, le jcl est exécuté qu'une seule fois.

    Je ne peux pas être plus clair. La solution viendrait d'un grand spécialiste du REXX.

    Merci d'avance encore.

  5. #5
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Bonjour

    Pas besoin de grand spécialiste du rexx.

    Dans un fichier, tu génères la sysin avec un rexx (ou DFSORT, c'est possible dans ton cas).

    A l'appel de la proc, plus besoin de paramètre. Magique!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Points : 39
    Points
    39
    Par défaut ddemande de détail du REXX avec la sysin
    justement, je sollicite les commandes et le détail des instructions REXX pour lire chaque enregistrement du fichier, et surtout le passage de paramètre du module lu vers l'INSTREAM PROCEDURE.

    Et après je serai un excellent magicien en REXX.

    Twisty.

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    De plus, nous sommes d'accord à ne pas créer les ligens suivants dans le jcl :

    //STEP EXEC PROC=maproc,NOMFIC=module1
    //STEP EXEC PROC=maproc,NOMFIC=module2
    //STEP EXEC PROC=maproc,NOMFIC=module3
    tu es d'accord avec toi même ? c'est bien ...


    Car il y en aurait 50 à écrire, si on a affaire à 50 modules différents
    .

    et alors ? en quoi est ce un problème ? c'est justement le rôle de la procédure !


    Sinon, tu fais une boucle de " SUB " dans ton REXX ... mais c'est ça qu'est pas terrible ...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Points : 39
    Points
    39
    Par défaut REXX : lecture d'un fichier
    Voici ce que je sais , pour lire le fichier :

    /* REXX */
    ADDRESS TSO
    "ALLOC FI(FIC) DA('nom_fichier') SHR REUSE"
    "EXECIO * DISKR FIC (STEM EX. FINIS"
    DO I=1 TO EX.0
    SAY EX.I '
    END


    DONC, à la place de la ligne 'SAY EX.I '', il faudrait les instructions, pour que 'EX.I' soit en paramètre d'une INSTREAM PROCEDURE. Et que, à chaque lecture du fichier, on change de module (EX.I = modulei)


    Pouvez-vous m'aider ?

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par twisty Voir le message
    ...
    Pouvez-vous m'aider ?
    NON ON NE PEUT PAS T'AIDER !

    Une INSTREAM PROCEDURE c'est une facilité liée au JCL et toi tu parles de REXX. Un programme REXX NE PEUT PAS appeler directement une INSTREAM PROCEDURE, ça n'a pas de sens.

    Sauf bien sûr, à générer un JCL qui, lui, fera appel à cette INSTREAM PROCEDURE, ce qui revient à créer un JOB qui aura autant de STEP que de fichiers différents. Solution, que tu sembles exclure a priori, mais sans être capable de nous en donner la raison précise.

    Voilà, ai je été assez clair ?

  10. #10
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    je ne comprend pas pourquoi tu veux absolument du rexx (je n'ai peut être pas compris le besoin original)
    Ma solution, je l'ai utilisée de nombreuses fois avec endevor, et ca marche!
    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
    //SORT EXEC PGM=SORT                                
    //SYSOUT DD SYSOUT=*                                
    //SORTIN   DD  *                                    
    NOM1                                                
    NOM2                                                
    NOM3                                                
    //SORTOUT DD DSN=le.fichier,DISP=....,LRECL=80,RECFM=FB
    //SYSIN    DD  *                                    
     SORT FIELDS=COPY                                   
     OUTFIL OUTREC=(C' RETRIEVE ELEMENT ',1,8,80:X,/,   
            C'   FROM SYSTEM NOMSYST        ',80:X,/,   
            C'   SUBSYSTEM NOMSBSYST        ',80:X,/,   
            C'   ENVIRONMENT NOMENV         ',80:X,/,   
            C'   STAGE S                    ',80:X,/,   
            C'   TYPE COBOL                 ',80:X,/,   
            C'   TO DSNAME ''NOM_LIB''      ',80:X,/,   
            C'   MEMBER ',1,8,C'            ',80:X,/,   
            C'   OPTIONS CCID ''NOM_CCID''  ',80:X,/,   
            C'   REPLACE MEMBER.            ',80:X)     
    /*
    //S1 EXEC MAPROC 
    //BSTITPT01 DD DSN=le.fichier
    pour faire avec du rexx, ceci est interessant http://www.ibmmainframeforum.com/cli...opic12007.html

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/06/2015, 15h03
  2. Ouvrir un fichier dont le nom est contenu dans un autre
    Par camillerufu dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/04/2015, 16h50
  3. Réponses: 7
    Dernier message: 25/05/2008, 14h02
  4. Réponses: 7
    Dernier message: 27/12/2007, 09h36
  5. [quel langage] sauvegarder fichier dont l'url est connu
    Par azerty_essai dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 28/03/2005, 12h14

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