UTILIDAD SORT o EASETRIEVE

Todo lo relacionado con JCL, manejo de jobs, etc.
Responder
guecarmar

UTILIDAD SORT o EASETRIEVE

Mensaje por guecarmar »

Hola a todos!!!

Esta es mi primera vez que hago esto...

Me han dicho que tengo que hacer una reestructuración de un fichero mediante un SORT o una EASETRIEVE, no mediante un COBOL.

Un ejemplo de lo que tengo que hacer sería esto.

Tengo en el fichero los siguientes datos

AAA111
AAA222
AAA333
BBB222
BBB333
CCC555
DDD444
DDD666

Y quieren que en el fichero de salida obtengamos esto:

AAA111222333
BBB222333
CCC555
DDD444666

Es decir que creemos un registro para cada CLAVE IGUAL, es decir, AAA-BBB-CCC-DDD y pongamos seguidos el resto de los datos del registro.

No sé si está bien explicado, pero con el ejemplo creo que se entiende bien.

Muchas gracias.
mazinger

Re: UTILIDAD SORT o EASETRIEVE

Mensaje por mazinger »

Hola,

yo le hecharia un vistazo al manual del SORT o ICETOOL, porque tiene muchísimas opciones q dudo que nadie sepa de memoria. Basándote en algún ejemplo puedes ir provando hasta obtener el resultado esperado. Lamento no poder ser de mas ayuda.

Un saludo.
mazinger

Re: UTILIDAD SORT o EASETRIEVE

Mensaje por mazinger »

Perdón, he puesto "provando" y queria decir probando,jeje
guecarmar

Re: UTILIDAD SORT o EASETRIEVE

Mensaje por guecarmar »

Gracias, le iré echando un vistazo a esos manuales.
Sabes si existe algún manual en Español sobre estos temas???
mazinger

Re: UTILIDAD SORT o EASETRIEVE

Mensaje por mazinger »

Hola,

yo solo tengo en inglés. Aún así dentro del área de descargas del foro, en el apartado "sin clasificar" hay un mini-manual de ICETOOL que tiene muy buena pinta, con bastantes ejemplos.

Salu2.
Alejo

Re: UTILIDAD SORT o EASETRIEVE

Mensaje por Alejo »

Yo ahora programa en Easytrieve y con un Sort no sería posible hacer lo que quieres, habría que montar un programa más complejo, pues el sort toma un fichero de entrada y usa como clave de ordenación el campo que tu le indicas, quedando el fichero ordenado por esa clave, nada más.

Se me ocurre algo que tiene varios pasos:

Ordenar el fichero por la clave y guardarlo sin duplicados en un fichero temporal, sólo el campo clave.

Hacer un maching entre el primer fichero de entrada y el temporal, enfrentandolos por la clave obviamente, y poniendo de maestro el temporal.

Por cada coincidencia, grabas en una variable auxiliar la clave, y los campos deseados de las siguientes lecutras, hasta cambiar de clave, que será cuando escribar las variable auxiliar en un registro del fichero de salida.


Espero que te haya servido la idea.

Saludos.-
alexglezquin

Re: UTILIDAD SORT o EASETRIEVE

Mensaje por alexglezquin »

Hola,
"Mejor tarde que nunca..."
Solución mediante un EASYTRIEVE, por si le sirve a alguien mas.
Admite hasta 32 ocurrencias de una misma clave,
He incluido un ordenamiento de fichero de entrada dada la extrema importancia para que el proceso funcione ok.
-Probado-

FICHERO DE ENTRADA

Código: Seleccionar todo

CCC555
BBB333
AAA222
BBB222
DDD444
AAA111
AAA333
DDD666

FICHERO DE SALIDA

Código: Seleccionar todo

AAA111222333
BBB222333
CCC555
DDD444666

Código: Seleccionar todo

//*********************************************************************
//EAS0000  EXEC PGM=EZTPA00                                            
//*********************************************************************
//STEPLIB  DD  DSN=xxx,                                 
//             DISP=SHR                                    
//PDS      DD  DSN=zzz,                                
//             DISP=SHR                                                
//SYSPRINT DD SYSOUT=*                                                 
//SORTWK01 DD  SPACE=(CYL,(100,10),RLSE)                               
//SORTWK02 DD  SPACE=(CYL,(100,10),RLSE)                               
//SORTWK03 DD  SPACE=(CYL,(100,10),RLSE)                               
//SYSSNAP  DD SYSOUT=*                                                 
//SYSOUT   DD SYSOUT=*                                                 
//SYSPRT1  DD SYSOUT=R,DEST=RMT472,HOLD=YES                            
//ENTRADA  DD DSN=fichero.entrada,                    
//            DISP=SHR                                                 
//ORDENA   DD SPACE=(CYL,(100,10),RLSE)    
//SALIDA   DD DSN=fichero.salida,                    
//            DISP=(,CATLG,DELETE),STORCLAS=SCDEPER,                   
//            SPACE=(100,(100,10),RLSE),AVGREC=K,                      
//            RECFM=FB,LRECL=100                                       
//EZTVFM   DD DCB=(DSORG=PS),SPACE=(CYL,(300,30),RLSE)                 
//SYSIN    DD *                                                        
LIST OFF                                                               
*PARM LIST(NOPARM NOFILE)                                              
*---------------> FICHERO IMPRESORA                                    
FILE SYSPRT1 PRINTER                                                   
*""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
FILE ENTRADA                                                           
  FE-ORD                   1   6 A                                     
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
FILE ORDENA   FB (6 0)                                                 
  FE-CLV                   1   3 A                                     
  FE-RES                   4   3 A                                     
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*   
FILE SALIDA   FB (100 0)                                               
  FS-CLV                   1   3 A                                     
  FS-RES                   *  96 A                                     
  FS-FILLER                *   1 A                                     
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
  CON                      W   1 N VALUE 0                             
  WS-CLV                   W   3 A VALUE ' '                           
  WS-RES                   W  96 A VALUE ' '                           
  WS-RES-ARR  WS-RES 3 A OCCURS 32 INDEX IND                           
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
 SORT ENTRADA TO ORDENA USING (FE-ORD)                                 
                                                                       
*""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
JOB INPUT NULL                                                         
    GET ORDENA                                                         
    DO WHILE NOT EOF ORDENA                                            
       IF FE-CLV = WS-CLV                                              
          IND = IND + 1                                          
          WS-RES-ARR(IND) = FE-RES                    
       ELSE                                           
          IF WS-CLV NE ' '                            
             FS-CLV = WS-CLV                          
             FS-RES = WS-RES                          
             WS-CLV = ' '                             
             WS-RES = ' '                             
             PUT SALIDA                               
          END-IF                                      
          IND = 1                                     
          WS-CLV = FE-CLV                             
          WS-RES-ARR(IND) = FE-RES                    
       END-IF                                         
       GET ORDENA                                     
    END-DO                                            
    IF WS-CLV NE ' '                                  
       FS-CLV = WS-CLV                                
       FS-RES = WS-RES                                                
       PUT SALIDA                                                       
    END-IF                                                              
    STOP                                                                
/*                                                                      
//**********************************************************************
//                                                                      
Responder