lunes, 23 de octubre de 2017

REPLACE / REEMPLAZAR con FINDREP en JCL

Hola a todos.
Hace unos días un amigo me contaba que tenía un fichero que generaba desde Java, y que le llegaba a host con espacios al final.
Él necesitaba cambiar esos espacios a low-values y me preguntaba cómo hacerlo por JCL.

Así que aprovecho y os enseño este job facilito para reemplazar algunos valores de tu fichero usando OUTREC FINDREP, como complemento al artículo SORT vol.2: OUTREC donde explicábamos el uso de CHANGE.

Imaginad que tenemos un fichero de longitud variable que viene relleno con espacios al final de los datos:

                                                           Columns 00001 00072
Command ===>                                                  Scroll ===> CSR 
****** ***************************** Top of Data ******************************
000001 ENTRADA1                                                               
       CDEDCCCF4444444444444444444444444444444444444444444444444444444444444444
       553914110000000000000000000000000000000000000000000000000000000000000000
------------------------------------------------------------------------------
000002 ENTRADA1MASCOSAS                                                       
       CDEDCCCFDCECDECE44444444444444444444444444444444444444444444444444444444
       553914114123621200000000000000000000000000000000000000000000000000000000
------------------------------------------------------------------------------
****** **************************** Bottom of Data ****************************


Y que queremos reemplazar esos espacios por low-values.



JCL:
//******************************************* 
//* SORT REPLACE DE ESPACIOS POR LOW-VALUES   
//******************************************* 
//REPLACE EXEC PGM=SORT                       
//SORTIN   DD DSN=ENTRADA.OUTRECVB,DISP=SHR
//SORTOUT  DD DSN=ENTRADA.OUTRECVB.SAL,   
//            DISP=(,CATLG,DELETE),           
//            SPACE=(CYL,(200,50),RLSE)       
//SYSOUT   DD SYSOUT=*                        
//SYSIN    DD *                               
    SORT FIELDS=COPY                          
    OUTREC FINDREP=(IN=(X'40'),OUT=(X'00')) 
  
/*     
                                     

Podéis poner varios valores en IN, y pueden ser caracteres alfanuméricos (un guión, una letra, un número....), parejas de reemplazo...
Tenéis un montón de ejemplos de FINDREP en este enlace de IBM.

NOTA: Tened en cuenta que si reemplazáis una cadena (por ejemplo 'HOLA') por otra con diferente longitud (por ejemplo 'HI'), se eliminarán las posiciones sobrantes, es decir, si en mi fichero de entrada tenía:
HOLATALLIAN
En el de salida tendré
HITALLIAN
:-)

Saludos!

2 comentarios:

Anónimo dijo...

Esta super bueno este articulo, pero quisiera saber si tambien aplicaria con c (X'40') (X'00') all

Unknown dijo...

Yo digo que si aplica con el "C", pero hay archivos tan grandes que no te deja usar los comandos, adicional a que en ambientes productivos en ocasiones no se tiene privilegios para modificar los archivos mas que por JOB