PerroCobolero

PerroCobolero

ADS

jueves, 22 de octubre de 2015

OUTREC – CONVERSIÓN DE DATOS

OUTREC – CONVERSIÓN DE DATOS

El outrec nos permite cambiar el formato de los campos. Se realiza del siguiente modo:

OUTREC FIELDS=(inicio_campo1,
               fin_campo1,
               tipo_dato_inicial,
               TO=tipo_dato_de_destino,
               LENGTH=longitud_final_del_campo_convertido,
               …)

Los tipos de formato son los siguientes:

CH --> Alfanumérico
ZD --> Numérico normal
BI --> Hexadecimal (campos COMP)
PD --> Empaquetado con o sin signo(campos COMP-3)

Para saber la longitud del LENGTH, se debe seguir la norma siguiente:
- Campos COMP --> Dividimos la longitud entre 2 y nos quedamos con la parte entera:
   S9(9) COMP --> LENGTH=4
   9(9)  COMP --> LENGTH=4
   S9(8) COMP --> LENGTH=4
   9(8)  COMP --> LENGTH=4


- Campos COMP-3 --> Dividimos la longitud + 1 entre 2, si el resultado da decimales se redondea al mayor:
   S9(9) COMP-3 --> LENGTH=5
   9(9)  COMP-3 --> LENGTH=5
   S9(8) COMP-3 --> LENGTH=5
   9(8)  COMP-3 --> LENGTH=5


- Si el campo tiene decimales, ya sea COMP o COMP-3, se suman primero los enteros + los decimales, y a partir de ahí se aplica la fórmula anterior:
   S9(9)V99 COMP   --> LENGTH=5
   9(9)V99  COMP   --> LENGTH=5
   S9(9)V99 COMP-3 --> LENGTH=6
   9(9)V99  COMP-3 --> LENGTH=6


Ejemplos prácticos suponiendo que el campo comience en la primera posición:

- Convertir 9(8) a S9(9) COMP-3 y viceversa:

OUTREC FIELDS=(1,8,ZD,TO=PD,LENGTH=5)
OUTREC FIELDS=(1,5,PD,TO=ZD,LENGTH=8)

- Convertir 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)


Cosas a tener en cuenta:
- La longitud del fichero de salida puede no ser la misma de entrada, porque si convertimos tipos de datos, por ejemplo, un numérico normal a un empaquetado la longitud se reduce al comprimir el campo.
- Se pueden realizar varias conversiones dentro de un mismo OUTREC.
- No se puede convertir un campo alfanumérico(que tenga letras) a un campo numérico.


11 comentarios:

  1. Buenos días;

    Después de bucear y navegar por la red encuentro ejemplos de conversión de datos, pero necesitaría un caso mas concreto.
    Al convertir un número de cualquier formato a hexadecimal siempre lo convierte en este formato X'000C' número con signo positivo, pero yo necesito que lo convierta a este otro formato X'000F' número sin signo, pero no encuentro la manera.
    ¿Podrías echarme una mano?
    Muchas gracias,
    Un saludo.

    Txema.

    ResponderBorrar
  2. En el outrec indicándole ZD,TO=ZD, te pongo un ejemplo:

    OUTREC FIELDS=(1,10,BI,TO=ZD), no se si te servirá.

    Un saludo.

    ResponderBorrar
  3. Hola me surge una duda, como puedo convertir un numérico a comp-3 directamente escrito en el paso del jcl? Lo estoy indicando de la siguiente manera pero me marca error

    OUTREC FIELDS=(01,278,C'9999123120060630',ZD,TO=PD)

    ResponderBorrar
    Respuestas
    1. Buenas, te falta añadir el tamaño final, lo tendrías que poner así:

      OUTREC FIELDS=(01,278,C'9999123120060630',ZD,TO=PD,LENGTH=9)

      Borrar
  4. Hola, yo no necesito convertir un dato, sino insertar un dato con valor
    900, en un campo PIC S9(9) USAGE COMP. Estoy intentando de ésta forma, pero no le gusta :

    22,08, -- FECALTA
    (0900,ZD,TO=BI,LENGTH=4), -- SECUACC
    $
    SYNTAX ERROR

    El campo al que me refiero es el SECUACC.
    Desde ya, muchas gracias !!

    ResponderBorrar
  5. Amigo, buenas noches.
    Pruebalo así, a ver si te resulta.
    OUTREC FIELDS=(22,08,C'000000900',ZD,TO=PD,LENGTH=4)
    Saludos

    ResponderBorrar
  6. OUTREC FIELDS=((12,13,ZD,DIV,26,13,ZD),TO=ZD,LENGTH=5)
    Estoy dividiendo dos campos numericos enteros, pero el resultado es 2 enteros y 3 decimales, dado que el resultado es un porcentaje, con esta forma solo me entrega enteros, me falta algo mas para definir los decimales, de manera que el resultado quede 00,023?.
    gracias


    ResponderBorrar
  7. Buenos días.. Tengo el mismo caso...Estoy dividiendo dos campos numericos enteros, pero el resultado es 2 enteros y 3 decimales, dado que el resultado es un porcentaje, con esta forma solo me entrega enteros. Lo hice con campos empaquetados y ocurre lo mismo. Alguien tendrá respuesta?

    ResponderBorrar
  8. Tengo un archivo que transferi de un txt a host
    Y donde dice por ejemplo 156.789,23
    quiero que en el sort OUTREC me lo deje así 000015678923
    se puede? mil gracias

    ResponderBorrar
  9. como puedo desplegar el valor de un campo S9(04) con el EDIT del SORT?
    tengo el siguiente valor 029H y quiero que con el EDIT me muestre el signo, o sea que el resultado sea 0298, alguna recomendación?

    ResponderBorrar
  10. Estimado como puedo hacer para convertir un computacional, esta definido de esta manera "PIC S9(13)V9(2) USAGE COMP-3.", en un numerico con el signo, necesitamos realizar esa conversion y que traiga el signo correspondiente (+ o -).

    ResponderBorrar