Eliminar espacios en fichero

Todo lo relacionado con JCL, manejo de jobs, etc.
ricamin
Usuario
Usuario
Mensajes: 3
Registrado: 04 Feb 2016, 07:11
País: España
Ciudad: Madrid
Ocupación: Programador

Eliminar espacios en fichero

Mensajepor ricamin » 04 Feb 2016, 09:15

Buenos días. Lo primero de todo gracias anticipadas por vuestra ayuda.

Tengo un fichero en este formato (En este ejemplo he puesto _ como si fuera un espacio para que se vea bien alineado)

XXX;AAA_AAA______________________________;0__;XXXXXXX;
XXX;BBBBB________________________________;1__;XXXXXXX;
XXX;CCC_CCCCCCCC________________________;3__;XXXXXXX;
XXX;DDDDDDD_DDDDDDDDDDDD______________;14_;XXXXXXX;
XXX;EE___________________________________;155;XXXXXXX;


Y necesito a traves de SORT o ICETOOL transformarlo al siguiente formato eliminando los espacios sobrantes entre campos.

XXX;AAA_AAA;0;XXXXXXX;
XXX;BBBBB;1;XXXXXXX;
XXX;CCC_CCCCCCCC;3;XXXXXXX;
XXX;DDDDDDD_DDDDDDDDDDDD;14;XXXXXXX;
XXX;EE;155;XXXXXXX;


He conseguido hacerlo realizando varios "OUTREC FINDREP=(IN=C' ',OUT=C' ')" para remplazar dos espacios seguidos por uno solo, pero me gustaría saber si existe alguna sentencia de SORT o ICETOOL que lo realice de una sola vez.


Un saludo y muchas gracias.

qwe2
Usuario avanzado
Usuario avanzado
Mensajes: 56
Registrado: 21 Ene 2015, 16:13
País: Argentina
Ciudad: CABA
Ocupación: Analista de desarrollo

Re: Eliminar espacios en fichero

Mensajepor qwe2 » 04 Feb 2016, 10:17

Lo otro que podes hacer es un OUTREC PARSE, pero digamos que FINDREP es lo mas "directo" y sencillo a la vista que tenes.

ricamin
Usuario
Usuario
Mensajes: 3
Registrado: 04 Feb 2016, 07:11
País: España
Ciudad: Madrid
Ocupación: Programador

Re: Eliminar espacios en fichero

Mensajepor ricamin » 04 Feb 2016, 11:37

qwe2 escribió:Lo otro que podes hacer es un OUTREC PARSE, pero digamos que FINDREP es lo mas "directo" y sencillo a la vista que tenes.


Muchas gracias qwe2 por tu comentarip, mirare la sentencia PARSE como dices a ver si puedo hacerlo con ella.

MAM82
Usuario
Usuario
Mensajes: 5
Registrado: 01 May 2012, 17:04
País: Agentina
Ciudad: Buenos Aires
Ocupación: Operador de consola

Re: Eliminar espacios en fichero

Mensajepor MAM82 » 06 Feb 2016, 12:15

Si el archivo de entrada no es muy grande podes hacerlo con REXX usando parse.

ricamin
Usuario
Usuario
Mensajes: 3
Registrado: 04 Feb 2016, 07:11
País: España
Ciudad: Madrid
Ocupación: Programador

Re: Eliminar espacios en fichero

Mensajepor ricamin » 09 Feb 2016, 15:53

MAM82 escribió:Si el archivo de entrada no es muy grande podes hacerlo con REXX usando parse.


Muchas gracias por la aportación MAM82 pero en mi sistema no se permite REXX. De todo modos gracias

jmhuerta
Usuario
Usuario
Mensajes: 11
Registrado: 20 Mar 2012, 21:18
País: mexico
Ciudad: mexico
Ocupación: Ingeniero de procesos

Re: Eliminar espacios en fichero

Mensajepor jmhuerta » 13 Feb 2016, 11:43

Utiliza SQZ=(SHIFT=LEFT) para tu formateo. Combinado con el parse que te comentan usando tu separador ";" con sqz y como el parse elimina el separador con un simple c';' al final de cada campo. Saludos.

juan
Usuario
Usuario
Mensajes: 8
Registrado: 08 Jul 2011, 06:49
País: ESPAÑA
Ciudad: Madrid
Ocupación: Otra

Re: Eliminar espacios en fichero

Mensajepor juan » 15 Feb 2016, 03:12

Prueba con esto:

Código: Seleccionar todo

INREC IFTHEN=(WHEN=INIT,                                             
   PARSE=(%1=(ABSPOS=1,ENDBEFR=C';',FIXLEN=100),                     
          %2=(ENDBEFR=C';',FIXLEN=100),                               
          %3=(ENDBEFR=C';',FIXLEN=100),                               
          %4=(ENDBEFR=C';',FIXLEN=100)),                             
   BUILD=(1:%1,101:%2,201:%3,301:%4)),                               
 IFTHEN=(WHEN=INIT,                                                   
   BUILD=(001,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100),   
          101,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100),   
          201,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100),   
          301,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100))), 
 IFTHEN=(WHEN=INIT,                                                   
   BUILD=(1,400,SQZ=(SHIFT=LEFT,MID=C';',PAIR=QUOTE))),               
 IFTHEN=(WHEN=INIT,FINDREP=(IN=C'"',OUT=C''))                         
SORT FIELDS=COPY                                                     

A modo de ejemplo ha puesto que el fichero de entrada podría tener 100 bytes y, por ello, cada PARSE lo ajusto al máximo posible.
Para respetar los espacios intermedios de cada campo, hay que delimitar los campo con comillas antes de comprimir los espacios con SQZ.
EL PARSE te podría sobrar si sabes exactamente, donde empieza y termina cada campo de entrada.
DFSORT no tiene una función directa que lo haga (que yo sepa).
Un saludo

uso1980
Usuario
Usuario
Mensajes: 1
Registrado: 15 Nov 2017, 14:03
País: Argentina
Ciudad: Rosario
Ocupación: Programador

Re: Eliminar espacios en fichero

Mensajepor uso1980 » 15 Nov 2017, 17:20

Hola! Buscando un caso similar al mio me encuentro con tu respuesta, la cual fue de mucha ayuda! Muchas gracias

Me surge un problema más y tal vez puedas/puedan ayudarme con mi duda.
La situación es la misma sólo que en algunos registros, en mi caso, el nombre y apellido tiene una coma en medio (apellido, nombre) entonces en ese caso, el campo iría entre " " , por ejemplo:


ABCDHJ,"PEREZ, RICARDO",11/7/2017,CARONL
POIHGT,CARLINE MARIA,11/6/2017,CARONL
ABSHDG,"SUAREZ, JUAN MANUEL",11/8/2017,CARONL
A2D5FB,*** NOT FOUND ***,,CARONL
UYHGS4,SOLARES JACQUELINE,10/12/2017,CARONL

Hay algo que se pueda hacer?
Se me ocurre que tal vez se pueda dividir el dataset en dos (nombres con coma y sin coma) y tratarlos por separado para poder agregarle las " " y luego unir los registros (el orden no importa).

GRACIAS!


juan escribió:Prueba con esto:

Código: Seleccionar todo

INREC IFTHEN=(WHEN=INIT,                                             
   PARSE=(%1=(ABSPOS=1,ENDBEFR=C';',FIXLEN=100),                     
          %2=(ENDBEFR=C';',FIXLEN=100),                               
          %3=(ENDBEFR=C';',FIXLEN=100),                               
          %4=(ENDBEFR=C';',FIXLEN=100)),                             
   BUILD=(1:%1,101:%2,201:%3,301:%4)),                               
 IFTHEN=(WHEN=INIT,                                                   
   BUILD=(001,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100),   
          101,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100),   
          201,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100),   
          301,100,JFY=(SHIFT=LEFT,LEAD=C'"',TRAIL=C'"',LENGTH=100))), 
 IFTHEN=(WHEN=INIT,                                                   
   BUILD=(1,400,SQZ=(SHIFT=LEFT,MID=C';',PAIR=QUOTE))),               
 IFTHEN=(WHEN=INIT,FINDREP=(IN=C'"',OUT=C''))                         
SORT FIELDS=COPY                                                     

A modo de ejemplo ha puesto que el fichero de entrada podría tener 100 bytes y, por ello, cada PARSE lo ajusto al máximo posible.
Para respetar los espacios intermedios de cada campo, hay que delimitar los campo con comillas antes de comprimir los espacios con SQZ.
EL PARSE te podría sobrar si sabes exactamente, donde empieza y termina cada campo de entrada.
DFSORT no tiene una función directa que lo haga (que yo sepa).
Un saludo


Volver a “JCL”