![]() |
| 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é. | |||||||
|
|||||||
| 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 ... |
![]() |
|
|
Outils de la discussion |
|
|
#2 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: octobre 2007
Localisation: région parisienne
Messages: 228
|
La réponse est oui mais pas avec EXECIO qui n'autorise pas l'indéfini.
Le plus simple est d'utiliser Library Management d'ISPF (LMINIT -> LMOPEN -> LMGET qui sait parfaitement lire de l'indéfini). |
|
|
|
|
|
#3 (permalink) |
|
Membre à l'essai
![]() Date d'inscription: octobre 2008
Messages: 42
|
Merci, j'avou être une grosse buse en REXX et malheureusement je vais devoir en faire pas mal.
Ca confirme bien ce que je pensais concernant l'EXECIO. Est ce que je pourrais abuser et demander si tu avais un exemple en 2 lignes ? Mes connaissances en REXX pour le moment se limitant à la lecture (Extrèmement agréable en livre de chevet) de la doc REXX pour ZOS. Merci d'avance. |
|
|
|
|
|
#4 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: octobre 2007
Localisation: région parisienne
Messages: 228
|
Voici un exemple de sous programme de lecture d'un fichier indéfini en REXX via LMGET. Il alimente un tableau pour réécriture d'un fichier en fixe pour une longueur maxi (ici 6144). Le paramètre DATALEN donne la longueur du bloc lu, le paramètre MAXLEN donne si on le veut, la longueur maxi de l'enreg. à lire.
En l'occurrence il s'agit de la lecture d'un load module. Bien entendu si le fichier est un PS, le LMMFIND pour pointer sur le membre en directory ne sera pas codé. Code :
LIRELOAD: /* LECTURE DU LOAD MODULE */
parse upper arg MBNAME MYLOAD .
MBLEN = 6144 /* VOIR QUELLE LONGUEUR MAXI EST UTILE */
RCD = COPIES('00'X,MBLEN) ; LGRCD = 0 ; COUNTRCD = 0
Call on error
Address ISPEXEC
"LMINIT DATAID(DAID1) DATASET('"MYLOAD"') ENQ(SHRW)"
"LMOPEN DATAID("DAID1") OPTION(INPUT)"
"LMMFIND DATAID("DAID1") MEMBER("MBNAME")"
Call off ERROR /* RC 8 en fin de LMGET */
Do While RC = 0
"LMGET DATAID("DAID1") MODE(INVAR) DATALOC(RCD) DATALEN(LGRCD)" ,
"MAXLEN("MBLEN")"
if RC = 0 then do
COUNTRCD = COUNTRCD + 1
ENREG.COUNTRCD = LGRCD left(RCD,LGRCD) /* MEF Sortie */
end
else do
RC = 0 ; Leave
end
end
ENREG.0 = COUNTRCD
ERROR: /* On s'assure du close en cas de RC > 0 */
If RC > 0 then say 'CODE RETOUR' RC 'NON PREVU SUR LIGNE' SIGL
RCRET = RC
"LMCLOSE DATAID("DAID1")"
"LMFREE DATAID("DAID1")"
address TSO
Return RCRET
|
|
|
|
|
|
#5 (permalink) |
|
Membre à l'essai
![]() Date d'inscription: octobre 2008
Messages: 42
|
Encore merci
Dernière question je pense On m'a spécifié de faire une copie binaire pour ne pas altérer le contenu du fichier qui pourait être en ascii. Est ce que cette notion est valable pour REXX ? Si oui, Est ce que c'est possible de faire une copie binaire en REXX ? Si non, je suppose que la copie sera strictement identique à l'originale ? |
|
|
|
|
|
#6 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: octobre 2007
Localisation: région parisienne
Messages: 228
|
REXX ne va pas altérer le contenu si on ne le change pas à l'écriture.
Une remarque cependant si c'est une simple copie à l'identique du fichier : On peul le faire sans passer par un REXX. En fonction du tri installé sur site Sort IBM, CA-SORT, SYNC-SORT ... Certains peuvent prendre en compte un fichier indéfini via un SORT FIELDS=COPY et changer éventuellement le format en sortie. Pour une simple copie, une option DFDSS, de mémoire PROCESS(UNDEFINED), permet à présent de recopier ces fichiers. Enfin, si on veut écrire un programme, COBOL sait également lire un fichier indéfini. |
|
|
|
|
![]() |
![]() |
||
Recopié un fichier au format U en binaire sous ZOS
|
||
| Outils de la discussion | |
|
|