Bonjour,
Je chercher a récupérer un fichier via la fonction suvante dans un rexx:
OGET 'fic_unix' 'fic_zos'
Je souhaiterais que la copy soit en extend dans le cas ou il existe déja.
Est ce que cela est possible de paramétrer OGET ?
Bonjour,
Je chercher a récupérer un fichier via la fonction suvante dans un rexx:
OGET 'fic_unix' 'fic_zos'
Je souhaiterais que la copy soit en extend dans le cas ou il existe déja.
Est ce que cela est possible de paramétrer OGET ?
Ne trouvant le moyen de paramèter correctement la fonction OGET.
Je souhaiterais savoir, si il est possible en rexx de faire la chose suivante :
Le fichier destination existe déja et son nom est connu
- Allouer un fichier temp sur le même format que le final (pas de soucis)
- Decharger le fichier de la fonction OGET sur le fichier Temp(pas de soucis)
- Copier le fichier temporaire sur le fichier destination en extend (alors la...)
L'ajout en 'EXTEND' c'est le DISP=MOD du JCL. Il suffit donc dans son JCL de coder qque chose comme ça :
Si on veut faire ça en REXX sous TSO on à également la possibilité des spécifier MOD dans son ALLOC fichier qui sera donc complété s'il existe déjà par ce que l'on aura ecrit ensuite par 'EXECIO' nblignes 'DISKW ddname (STEM TAB. FINIS' (pour exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //STEP002 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SORTIN DD DISP=SHR,DISP=DSN=FICHIER.EN.ENTREE //SORTOUT DD DSN=FICHIER.EN.SORTIE,DISP=MOD, // SPACE=(TRK,(15,15)),UNIT=3390,LIKE=FICHIER.EN.ENTREE //SYSIN DD * SORT FIELDS=COPY OUTREC FIELDS=(1,80) //*
Maintenant quand on parle de commande TSO (ALLOC, FREE, ou même OGET comme indiqué dans le 1er post, il faut se rappeller que l'on dispose d'un HELP pour toutes ces commandes et que les infos fournies sont assez détaillées.
TSO HELP OGET par exemple.
Personnellement j'utilise un REXX comme ceci (appellons le TED pour l'exemple. Il intercepte les lignes affichées à l'écran pour avoir le résultat du HELP en EDIT. Ca me permet de saisir TSO TED HELP OGET. Avoir le fichier en EDIT est un + pratique pour faire du find en particulier.
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 /* TED : REXX DE RECUPERATION D'UN HELP OU DE TOUT AFFICHAGE ECRAN */ /* VIA UNE PROCEDURE EN EDIT SUR SON FICHIER ISPF ZTEMPF */ /* - ON PEUT INSERER UNE MACRO EDIT (MACRO(xxx)) AVANT la cde */ /* ----------------------------------------------------------------- */ Arg COMMAND MACRO = '' if left(COMMAND,6) = 'MACRO(' then parse var COMMAND MACRO COMMAND if length(COMMAND) = 0 then do say "Erreur: TED DOIT RECEVOIR DES PARAMETRES POUR LES TRAITER" say " Exemple --> TSO TED HELP LISTCAT" say " --> TSO TED LISTALC " say "----------------------------------------" exit 4 end address TSO x = outtrap("trap.","*") /* interception de l'affichage */ command /* execution de la cde en PARM */ x= outtrap("off") /* remise en service affichage */ "ISPEXEC CONTROL ERRORS RETURN" Address ISPEXEC "VGET (ZTEMPF)" /* ALLOC sur DDNAME ALEATOIRE */ DDN = "TP"random() "ALLOC DD("DDN") DA('"ZTEMPF"') SHR" "EXECIO * DISKW" DDN "(FINIS STEM trap." Address ISPEXEC "EDIT DATASET('"ZTEMPF"')" MACRO if RC > 8 then do /* EDIT sur ZTEMPF non récursif ! */ ZEDLMSG = "Sortir de l'Edit" ZTEMPF "avant de relancer TED !" "ISPEXEC SETMSG MSG(ISRZ001)" end "FREE DD("DDN")" EXIT RC
Merci Homer pour toutes ces infos, j'arrive à un truc du genre qui fait ce que je veux...(Y a surement mieux mais j'ai réussis à faire marché ca) a part qu'il faut que je delete le fichier temp
y'a t-il moyen de faire que mon TMP_NZOS soit vraiment un fichier temp ?
J'ai pas réussis à faire fonctionner ton exemple de génération de fichier ave le VGET et le ZTEMP, j'ai un rc(-3) sur le VGET
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 TMP_NZOS = xxxxxxxx.yyyyyyyy.zzzzzzzz "ALLOC DD(TEMP0) DA('"TMP_NZOS"') LIKE ('"VAL_NZOS"') NEW" "OGET '"VAL_NNAS"' '"TMP_NZOS"' "PAR_BIN "ALLOC DD(TEMP1) DA('"VAL_NZOS"') MOD" "EXECIO * DISKR TEMP0 (STEM TMP. FINIS" "EXECIO * DISKW TEMP1 (STEM TMP. FINIS" "FREE DD(TEMP0)" "FREE DD(TEMP1)"
Pour ce que j'ai déjà vu, un RC-3 sur une commande ISPF (ici VGET) est assez typique d'un ISPF non démarré. Sous TSO il l'est nécessairement, donc tu dois essayer de passer ton REXX en Batch.y'a t-il moyen de faire que mon TMP_NZOS soit vraiment un fichier temp ?
J'ai pas réussis à faire fonctionner ton exemple de génération de fichier ave le VGET et le ZTEMP, j'ai un rc(-3) sur le VGET
Si c'est le cas comme je l'imagine, il est inutile, voire risqué, de passer des alloc dans ton REXX. Utilise le JCL d'exécution de ton batch. JES fait ça très bien.
J'ai déjà posté un exemple de JCL Batch d'un REXX qui passe des ordres ISPF sur ce forum. Je ne sais plus ou. De toutes façons, si tu essayes de travailler avec le fichier ISPFILE d'ISPF (VGET ZTEMPF), il risque d'être insuffisant. Voici donc un exemple de JCL batch qui devrait fonctionner après adaptation aux standards de ton site et ajout des DD que tu utilises via EXECIO (TEMPO et TEMP1).
Il faut faire monter ISPF via un ISPSTART et indiquer ensuite ton REXX à exécuter. De plus, il te faut allouer (avec une ISPPROF de travail et les autres bibliothèques ISPxLIB nécessaires à ISPF), un fichier ISPFILE et ISPCTL1 si tu veux travailler avec ZTEMPF.
En ce qui concerne tes DD TEMPO et TEMP1, tu peux les mettre en DISP(NEW,PASS) sur un fichier DSN=&&TEMPO (par exemple) pour TEMPO et un DISP MOD pour TEMP1. Ca devrait règler ton problème de delete.
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 //user JOB ........ //*----------------------------------------------------------- //REXXLIB SET REXXLIB='ta.bib.de.REXX' //PREFISP SET PREFISP='ISP' prefixe des bib ISPF sur le site //STPISPF EXEC PGM=IKJEFT01,DYNAMNBR=10 //* APPEL DIRECT VIA PARM=('ISPSTART CMD(%MYREXX MYPARAM') //* //SYSTSIN DD * PROFILE NOPREFIX ISPSTART CMD(MYREXX MYPARAM) //* //SYSPROC DD DSN=&PREFISP..SISPCLIB,DISP=SHR //SYSEXEC DD DISP=SHR,DSN=&REXXLIB //SYSTSPRT DD SYSOUT=* //ISPLOG DD DUMMY //ISPPROF DD DSN=&&PROF,DISP=(NEW,PASS), // DCB=(LRECL=80,BLKSIZE=6160,RECFM=FB), // SPACE=(TRK,(2,1,2)),UNIT=VIO //ISPFILE DD DSN=&&ISPF0,DISP=(NEW,PASS), // DCB=(LRECL=80,BLKSIZE=800,RECFM=FB,DSORG=PS), // SPACE=(TRK,(2,1)),UNIT=VIO //ISPCTL1 DD DSN=&&ISPF1,DISP=(NEW,PASS), // DCB=(LRECL=80,BLKSIZE=800,RECFM=FB,DSORG=PS), // SPACE=(TRK,(2,1)),UNIT=VIO //ISPWRK1 DD DSN=&&ISPF2,DISP=(NEW,PASS), // DCB=(LRECL=80,BLKSIZE=2560,RECFM=FB,DSORG=PS), // SPACE=(TRK,(2,1)),UNIT=VIO //ISPMLIB DD DSN=&PREFISP..SISPMENU,DISP=SHR //ISPSLIB DD DSN=&PREFISP..SISPSENU,DISP=SHR //ISPPLIB DD DSN=&PREFISP..SISPPENU,DISP=SHR //ISPTLIB DD DSN=&PREFISP..SISPTENU,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSTERM DD SYSOUT=* //*
Merci Homer.
Ce JCL me permet effectivement de lancer la fonction VGET sans problème.
Pour les allocs TEMP0 etTEMP1 je suis obligé de les faire dans le REXX car le nom du fichier à ouvrir est dans une donnée dans un fichier.
De plus les informations pour la création ne sont aujourd'hui pas connus...dans ce cas la fonction OGET crée un fichier VB 255.
Je risque donc prochainement de devoir récupérer le nom, taille, format du fichier à créer en sortie de la fonction OGET. Je pense donc que je suis obligé de faire les alloc dans le REXX
Rebonjour,
Il semble que depuis que j'ai changé la manière d'appeler le REXX, les codes retour ne sont plus gérés.
J'ai message en Sysprint cependant j'ai un RC 0 au step du rexx.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ISPD117 The initially invoked CLIST ended with a return code = 8 NULLFILE was preallocated (no free was done). READY END
Je suppose que mes codes retours sont intercepté par ISPF.
La question est donc comment les remettre
Bon apparement voila solution qui marche dans mon cas :
Sans ISPF :
Avec ISPF :
Code : Sélectionner tout - Visualiser dans une fenêtre à part EXIT RC
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ZISPFRC = RC ADRESS ISPEXEC "VPUT (ZISPFRC) SHARED" EXIT RC
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager