Programa REXX para analizar componentes de libreria PO

Todo lo relacionado con REXX en este ambiente.
Responder
Lancelotemv
Usuario
Usuario
Mensajes: 10
Registrado: 12 Nov 2010, 20:21
País: Peru
Ciudad: Lima
Ocupación: Analista funcional

Programa REXX para analizar componentes de libreria PO

Mensaje por Lancelotemv » 24 Sep 2013, 17:19

Estimados, tengo un problema con rexx, leo secuencialmente un fichero donde guardo la ruta de un fichero particionado y el nombre de un elemento del mismo, lo que hago posteriormente es leer este componente del fichero PO y luego realiza una análisis de dicho componente y luego debo grabar dicha información a un fichero secuencial, todo correcto hasta allí, hasta este ultimo proceso impacta en la librería particionada cambiando su organización a PS realmente esto ultimo no debería tocar la librería particionada, adjunto el programa, se lo agradecerá de antemano si me podrían ayudar.

/* REXX - GENERA ARCHIVOS CON RELACION COMPONENTE VS PROGRAMAS
*------------------------------------------------------------------*/
/*123456789 123456789 123456789 123456789 123456789 123456789 123456*/
PARSE ARG CLI FODATE
ADDRESS TSO
MSGSTAT = MSG("OFF")
SAY 'CLI = ' CLI
SAY 'FODATE = ' FODATE
/* FICHERO CON LISTA DE LIBRERIAS VS PROGRAMAS */
LIBRERIA0 = 'PPACD.OP8.RCOL.EX.PRG.LST99'
LIBRERIA1 = 'PPACD.OP8.RCOL.EX.PRGPRG.' || FODATE
LIBRERIA2 = 'PPACD.OP8.RCOL.EX.PRGTAB.' || FODATE
LIBRERIA3 = 'PPACD.OP8.RCOL.EX.PRGCPY.' || FODATE
LIBRERIA4 = 'PPACD.OP8.RCOL.EX.PRGDCL.' || FODATE
"ALLOC FI(INFILE0) DSN('"LIBRERIA0"') SHR REU"
"EXECIO * DISKR INFILE0 ( FINIS STEM MYFILE0."
"FREE FI(INFILE0)"
CALL PRGPRG
EXIT
/* FIN */
/* BUSCA PROGRAMA VS PROGRAMA */
PRGPRG:
I = 1
DO WHILE I <= MYFILE0.0
LIBRERIA = SUBSTR(MYFILE0.I,01,44)
PROGRAMA = SUBSTR(MYFILE0.I,45,08)
LIBRERIA1= STRIP(LIBRERIA,'B',' ')
PROGRAMA1= STRIP(PROGRAMA,'B',' ')
DSINFO = LISTDSI("'"LIBRERIA1"'")
VOLUM = SYSVOLUME
SAY 'LIBRERIA : ' LIBRERIA
SAY 'PROGRAMA : ' PROGRAMA
FUENTE = LIBRERIA1 || '(' || PROGRAMA1 || ')'
SAY 'FUENTE : ' FUENTE
"ALLOC FI(INFILE1) DSN('"FUENTE"') SHR REU"
"EXECIO * DISKR INFILE1 ( FINIS STEM MYFILE1."
"FREE FI(INFILE1)"
CALL ANAPRG
CALL ANATAB
CALL ANACPY
CALL ANADCL
I = I + 1
END
RETURN
/* ANALIZA PROGRAMA, PARA OBTENER EL PROGRAMA LLAMADO */
ANAPRG:
J = 0
K = 1
DO WHILE K <= MYFILE1.0
FILA = SUBSTR(MYFILE1.K,01,72)
COL = SUBSTR(MYFILE1.K,07,01)
X1 = WORDPOS('CALL',FILA)
IF X1 > 0 & COL = ' ' THEN
DO
WPGM = WORD(FILA,X1+1)
J = J + 1
REGSAL1.J = WPGM
SAY 'CALL : ' WPGM
END
K = K + 1
END
STATUS = SYSDSN("'"LIBRERIA1"'")
IF STATUS = 'OK' THEN DO
"DELETE '"LIBRERIA1"'"
END
IF J > 0 THEN
DO
REGSAL1.0 = J
"ALLOC FI(X1OUT) DA('"LIBRERIA1"') SHR NEW SPACE(10,05)"
"DSORG(PS) RECFM(F,B) LRECL(80) BLKSIZE(10)"
"EXECIO * DISKW X1OUT (STEM REGSAL1."
"EXECIO 0 DISKW X1OUT (FINIS"
"FREE F(X1OUT)"
END
RETURN
/* ANALIZA PROGRAMA, PARA OBTENER LA TABLA USADA */

Avatar de Usuario
Horacio Villa
Colaborador
Colaborador
Mensajes: 186
Registrado: 04 Dic 2003, 13:11
País: Argentina
Ciudad: Buenos Aires
Ocupación: DBA

Re: Programa REXX para analizar componentes de libreria PO

Mensaje por Horacio Villa » 28 Sep 2013, 09:18

Si no entiendo mal el programa, lees los members de LIBRERIA1 y luego grabas LIBRERIA1 como secuencial. Podrá ser allí donde esté el error?
HV

ccavallo
Usuario
Usuario
Mensajes: 15
Registrado: 27 Ago 2013, 13:09
País: España
Ciudad: Alovera
Ocupación: Jefe de area de sistemas

Re: Programa REXX para analizar componentes de libreria PO

Mensaje por ccavallo » 28 Sep 2013, 13:03

Tienes un problema en la alocacion de fichero secuencial

ALLOC FI(X1OUT) DA('"LIBRERIA1"') SHR NEW SPACE(10,05) DSORG(PS) RECFM(F,B) LRECL(80) BLKSIZE(10)

1) O es SHR o es NEW, pero conceptualmente son excluyentes. Quita el SHR
2) El BLKSIZE debe ser multiplo del LRECL. Recomiendo que coloques 27920.

A pesar de que la alocacion realizada no de error, el fichero alocado no se puede utilizar.
Puedes verlo tu mismo por 3.4, en cuanto quieras hacer B(rowse), te saldra un error de "Invalid Block Size"

Lancelotemv
Usuario
Usuario
Mensajes: 10
Registrado: 12 Nov 2010, 20:21
País: Peru
Ciudad: Lima
Ocupación: Analista funcional

Re: Programa REXX para analizar componentes de libreria PO

Mensaje por Lancelotemv » 29 Sep 2013, 16:45

Muchas Gracias cCavallo, solucione mi problema.....ese era el problema adicionalmente.

Antes:

"ALLOC FI(INFILE1) DSN('"FUENTE"') SHR REU"
"EXECIO * DISKR INFILE1 ( FINIS STEM MYFILE1."
"FREE FI(INFILE1)"

Después:

"ALLOC FI(INFILE1) DSN('"FUENTE"') SHR "
"EXECIO * DISKR INFILE1 ( FINIS STEM MYFILE1."
"FREE FI(INFILE1)"

En tener el parámetro REU borraba mi fichero PO.

Gracias por el Apoyo...

Responder