Bonjour à tous,
Ma question est très simple, est-ce que c'est possible en REXX ?
Merci d'avance.
Bonjour à tous,
Ma question est très simple, est-ce que c'est possible en REXX ?
Merci d'avance.
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).
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.
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 : 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 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
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 ?
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.
Merci pour tes réponses.
Partager