Leer el ultimo GDG desde Rexx

Todo lo relacionado con REXX en este ambiente.
Responder
diego6500

Leer el ultimo GDG desde Rexx

Mensaje por diego6500 » 15 Nov 2012, 16:01

Hola gente, les queria realizar la siguiente consulta:

Queria saber como puedo hacer para leer la ultima version de un GDG para sacar una estadistica, el Rexx ya me funciona pero solo especificando la version de GDG, yo lo que necesito es que cuando se ejecute el REXX siempre valla a buscar el ultimo GDG creado.
Este es un ejemplo del Rexx donde especifico los datasets

/* Rexx */
transm=0
sistema = sysvar('sysnode')
say 'Proceso en Nodo: ' sistema
/* Procesando archivos */
call netvftp dvg.report.sye.file1.G2559V00 primero
transm=transm + result
call netvftp dvg.report.sye.file2.g2578V00
transm=transm + result
call netvftp DVG.REPORT.SYE.FILE3.G2567V00
transm=transm + result
call netvftp DVG.REPORT.SYE.FILE4.G2540V00
transm=transm + result
call netvftp DVG.REPORT.SYE.FILE5.G2544V00
transm=transm + result
call netvftp DVG.REPORT.SYE.FILE6.G2482V00
transm=transm + result ultimo
/* Fin proceso archivos */


Desde ya muchas gracias!
Saludos

Avatar de Usuario
Vicente
Colaborador avanzado
Colaborador avanzado
Mensajes: 545
Registrado: 21 Jul 2011, 04:52
País: España
Ciudad: Malaga
Ocupación: Técnico en Sistemas

Re: Leer el ultimo GDG desde Rexx

Mensaje por Vicente » 16 Nov 2012, 04:18

Hola Diego:
¿Has probado con:
call netvftp DVG.REPORT.SYE.FILE3(0)

Un saludo

Leamos un poco:
El libro DFSMS Using Data Sets, en su capítulo 29 "Processing Generation Data Groups"
explica el uso de los GDGs. De lectura muy recomendable en el link:
http: //publibz.boulder.ibm. com/epubs/pdf/dgt2d460.pdf
Varios días probando, equivocandote y volviendo a probar
pueden ahorrarte quince minutos de lectura de un manual.

Avatar de Usuario
acevedo
Colaborador Senior
Colaborador Senior
Mensajes: 375
Registrado: 01 Abr 2005, 14:36
País: España
Ciudad: Malaga
Ocupación: Analista de desarrollo

Re: Leer el ultimo GDG desde Rexx

Mensaje por acevedo » 16 Nov 2012, 08:57

Hola, en el caso de comandos que no admiten el 'formato' de GDG, como por ejemplo alloc, utilizo el siguiente codigo

Código: Seleccionar todo

/*>Rexx --------------------------------------------------------------*/        
/* Desc.: traduce version gdg a la dsname correspondiente____________ */        
/* Parms: gdg     nombre del fichero a traducir______________________ */        
/*--------------------------------------------------------------------*/        
                                                                                
arg dsn                                                                         
dsnoriginal=dsn                                                                 
if pos("(",dsn) = 0 then return dsnoriginal  /* dsn es gdg?  */                 
                                                                                
 /* separar dsn y numero de gdg */                                              
parse value dsn with dsn "("gdg")"                                              
if datatype(gdg) <> "NUM" then return dsnoriginal                               
                                                                                
 /* listado de catalogo */                                                      
call outtrap "listc."                                                           
address tso  "listc level('"dsn"')"                                             
call outtrap "off"                                                              
                                                                                
 /* crear un stem con los catalogados */                                        
base= 0                                                                         
do i= 1 to listc.0                                                              
   if word(listc.i,1)ª= "NONVSAM" then iterate                                  
   base = base + 1                                                              
   gdg.base = word(listc.i,3)                                                   
   end i                                                                        
                                                                                
if gdg > 0 then do  /* >0, seria nuevo   */                                     
   dsnw= gdg.base                                                               
   dsnw= translate(dsnw," ",".")                                                
   goovoo= word(dsnw,words(dsnw))                                               
   parse value goovoo with "G" gen "V" ver                                      
   if gen=9999 then do                                                          
      gen=0                                                                     
      ver=ver + 1                                                               
      gdg=gdg - 1                                                               
      end                                                                       
   gen= gen + gdg                                                               
                                                                                
   dsnt=subword(dsnw,1,words(dsnw)-1)                                           
   dsnt=dsnt".G"right(gen+10000,4)"V"right(ver+100,2)                           
                                                                                
   gdg.base=translate(dsnt,"."," ")                                             
   end                                                                          
else                                                                            
   base=base+gdg                                                                
return gdg.base           
si se le pasa como parámetro MIFICHERO(0) devolvería MIFICHERO.G0005V00, suponiendo que es el ultimo.

si solo necesitas la ultima versión puedes adaptar el código para simplificarlo.

Responder