Antes de empezar a hablar del OUTREC, vamos a recordar ciertos conceptos tales como los siguientes: los diferentes tipos de dato que hay y la longitud de los mismos.
Para repasar los diferentes tipos de dato que hay podéis pinchar aquí. En dicha entrada se explica cómo ordenar un fichero mediante un sort en un jcl, y de paso se explicó lo de los tipos de dato existentes.
Y para repasar la longitud de los mismos podéis pinchar aquí. Bien es verdad que se está explicando desde el enfoque de Cobol pero se puede hacer extensible a los jcl's ya que:
- un alfanumérico (CH) que sea de 10 posiciones, su longitud es 10.
- un numérico editado (ZD) que sea de 9 posiciones, su longitud es 9.
- un numérico COMP tenga o no tenga signo (BI), hay que tener en cuenta
las posiciones decimales ya que:
- si no tiene decimales, su longitud se corresponde con el resultado
de dividir la parte entera entre 2 despreciando los decimales que
se obtengan en la división
Ejemplo 1: 7/2 = 3'5 - longitud 3
Ejemplo 2: 8/2 = 4 - longitud 4
- si tiene decimales, su longitud se obtiene con la siguiente fórmula:
PASO 1. Sumamos la parte entera y los decimales:
Ejemplo 1: 7 + 2 = 9
Ejemplo 2: 8 + 2 = 10
PASO 2. Al anterior resultado le sumamos 1 y obtenemos un
nuevo resultado al que dividimos entre 2:
Ejemplo 1: 9 + 1 = 10 ----- 10/2
Ejemplo 2: 10 + 1 = 11 ---- 11/2
PASO 3. Si el resultado da decimales se redondea al mayor y lo
que se obtiene es la longitud
Ejemplo 1: 10/2 = 5
Ejemplo 2: 11/2 = 5'5 - se redondea a 6
- un numérico COMP-3 tenga o no tenga signo (PD), hay que tener en
cuenta las posiciones decimales como en el caso anterior ya que:
- si no tiene decimales, partiríamos de la parte entera y le aplicamos
los pasos 2 y 3 de la fórmula anterior
- si tiene decimales, su longitud se obtiene aplicando todos los pasos
de la fórmula anterior.
Bien, ahora que hemos refrescado estos conceptos vayamos a por el OUTREC. Vamos a familiarizarnos con su funcionamiento a base de ejemplos práctios, para ello, vamos a suponer que el campo comienza en la primera posición.
Conversión 9(8) a S9(9) COMP-3 y viceversa
OUTREC FIELDS=(1,8,ZD,TO=PD,LENGTH=5)
OUTREC FIELDS=(1,5,ZD,TO=PD,LENGTH=8)
Conversión 9(8) COMP a 9(8) y viceversa
OUTREC FIELDS=(1,4,BI,TO=ZD,LENGTH=8)
OUTREC FIELDS=(1,8,ZD,TO=BI,LENGTH=4)
Cambiar datos
Imaginemos que tenemos un fichero de entrada como el siguiente:
Para sustituir los espacios por ceros con OUTREC:
OUTREC FIELDS=(1,9,10,10,
CHANGE=(10,C' ', C'0000000000'),NOMATCH=(10,10))
Otra forma:
OUTREC FIELDS=(1,9,10,10,CHANGE=(10,C'40404040404040404040',
C'0000000000'),NOMATCH=(10,10))
Y el fichero de salida quedaría así:
Continuemos con el siguiente OUTREC.
Máscaras de edición
Imaginemos que tenemos un fichero de entrada como el siguiente:
Donde tenemos lo siguiente:
- una fecha (posiciones del 5 al 10)
- una hora (posiciones del 20 al 25)
- importe 1 comprimido (posiciones del 21 al 31)
- importe 2 (posiciones del 32 al 35)
- importe 3 (posiciones del 36 al 45)
- importe 4 (posiciones del 46 al final)
Utilizamos máscaras:
OUTREC FIELDS=(01,04,
05,06,ZD,M9,LENGTH=8,
11,09,
20,06,ZD,M8,LENGTH=8,
26,06,PD,
32,04,ZD,M18,LENGTH=4,
36,10,ZD,M4,LENGTH=11,
46,10,ZD,M26,LENGTH=11)
Tras la utilización de las máscaras mostradas obtenemos el siguiente fichero de salida:
Esto ha sido todo por hoy.
Y para repasar la longitud de los mismos podéis pinchar aquí. Bien es verdad que se está explicando desde el enfoque de Cobol pero se puede hacer extensible a los jcl's ya que:
- un alfanumérico (CH) que sea de 10 posiciones, su longitud es 10.
- un numérico editado (ZD) que sea de 9 posiciones, su longitud es 9.
- un numérico COMP tenga o no tenga signo (BI), hay que tener en cuenta
las posiciones decimales ya que:
- si no tiene decimales, su longitud se corresponde con el resultado
de dividir la parte entera entre 2 despreciando los decimales que
se obtengan en la división
Ejemplo 1: 7/2 = 3'5 - longitud 3
Ejemplo 2: 8/2 = 4 - longitud 4
- si tiene decimales, su longitud se obtiene con la siguiente fórmula:
PASO 1. Sumamos la parte entera y los decimales:
Ejemplo 1: 7 + 2 = 9
Ejemplo 2: 8 + 2 = 10
PASO 2. Al anterior resultado le sumamos 1 y obtenemos un
nuevo resultado al que dividimos entre 2:
Ejemplo 1: 9 + 1 = 10 ----- 10/2
Ejemplo 2: 10 + 1 = 11 ---- 11/2
PASO 3. Si el resultado da decimales se redondea al mayor y lo
que se obtiene es la longitud
Ejemplo 1: 10/2 = 5
Ejemplo 2: 11/2 = 5'5 - se redondea a 6
- un numérico COMP-3 tenga o no tenga signo (PD), hay que tener en
cuenta las posiciones decimales como en el caso anterior ya que:
- si no tiene decimales, partiríamos de la parte entera y le aplicamos
los pasos 2 y 3 de la fórmula anterior
- si tiene decimales, su longitud se obtiene aplicando todos los pasos
de la fórmula anterior.
Bien, ahora que hemos refrescado estos conceptos vayamos a por el OUTREC. Vamos a familiarizarnos con su funcionamiento a base de ejemplos práctios, para ello, vamos a suponer que el campo comienza en la primera posición.
Conversión 9(8) a S9(9) COMP-3 y viceversa
OUTREC FIELDS=(1,8,ZD,TO=PD,LENGTH=5)
OUTREC FIELDS=(1,5,ZD,TO=PD,LENGTH=8)
Conversión 9(8) COMP a 9(8) y viceversa
OUTREC FIELDS=(1,4,BI,TO=ZD,LENGTH=8)
OUTREC FIELDS=(1,8,ZD,TO=BI,LENGTH=4)
Cambiar datos
Imaginemos que tenemos un fichero de entrada como el siguiente:
Para sustituir los espacios por ceros con OUTREC:
OUTREC FIELDS=(1,9,10,10,
CHANGE=(10,C' ', C'0000000000'),NOMATCH=(10,10))
Otra forma:
OUTREC FIELDS=(1,9,10,10,CHANGE=(10,C'40404040404040404040',
C'0000000000'),NOMATCH=(10,10))
Y el fichero de salida quedaría así:
Continuemos con el siguiente OUTREC.
Máscaras de edición
Imaginemos que tenemos un fichero de entrada como el siguiente:
Donde tenemos lo siguiente:
- una fecha (posiciones del 5 al 10)
- una hora (posiciones del 20 al 25)
- importe 1 comprimido (posiciones del 21 al 31)
- importe 2 (posiciones del 32 al 35)
- importe 3 (posiciones del 36 al 45)
- importe 4 (posiciones del 46 al final)
Utilizamos máscaras:
OUTREC FIELDS=(01,04,
05,06,ZD,M9,LENGTH=8,
11,09,
20,06,ZD,M8,LENGTH=8,
26,06,PD,
32,04,ZD,M18,LENGTH=4,
36,10,ZD,M4,LENGTH=11,
46,10,ZD,M26,LENGTH=11)
Tras la utilización de las máscaras mostradas obtenemos el siguiente fichero de salida:
Esto ha sido todo por hoy.
No hay comentarios:
Publicar un comentario