Este es un ejemplo de como podemos operar con la información de un fichero usando la opción OUTREC del programa SORT.
//SORT001 EXEC PGM=SORT
//SORTIN DD DSN=nombre.fichero.entrada1,DISP=SHR
//SORTOUT DD DSN=nombre.fichero.salida1,
// DISP=(,CATLG,DELETE),SPACE=(CYL,(500,100))
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(I,L,Ti,O,D,TO=Tf,LENGTH=L)
I – Inicio. Posición donde empieza el campo.
L – Longitud máxima del campo.
Ti - Tipo de dato inicial:
CH - Alfanumérico
ZD - Numérico
BI - Hexadecimal (campos COMP)
PD - Empaquetado con o sin signo(campos COMP-3)
O - Operador:
ADD - Suma
SUB - Resta
MUL - Multiplicación
DIV - División
D – Dato de la operación
Tf - Tipo de dato final
L - Longitud del campo convertido
La razón por la que incluimos el tipo de dato inicial y final es que, si no lo hacemos, perderemos el formato del campo.
En lugar de indicar SORT FIELDS=COPY podríamos indicar cualquier tipo de ordenación.
Ejemplo 1: Añadir uno al saldo del fichero de empresas.
----+----1----+----2----+----3----+----4----+
000000002EMPRESA CAFETERIA NOVELTY 00110000
000000001EMPRESA LANAS MARUJA 00220000
000000004EMPRESA ASESORIA ASOCIA 00100000
Fórmula:
SORT FIELDS=COPY
OUTREC FIELDS=(1,35,36,8,ZD,ADD,+1,TO=ZD,LENGTH=8)
Resultado 1:
----+----1----+----2----+----3----+----4----+
000000002EMPRESA CAFETERIA NOVELTY 00110001
000000001EMPRESA LANAS MARUJA 00220001
000000004EMPRESA ASESORIA ASOCIA 00100001
Como podéis ver en el último campo todas las cantidades se ven incrementadas en 1.
Si quisiésemos cambiar el formato hay que tener en cuenta que la longitud del fichero de salida cambiaría.
Ejemplo 2:Añadir 5 al saldo del fichero de empresas y convertirlo a COMP-3.
----+----1----+----2----+----3----+----4----+
000000002EMPRESA CAFETERIA NOVELTY 00110000
000000001EMPRESA LANAS MARUJA 00220000
000000004EMPRESA ASESORIA ASOCIA 00100000
Fórmula:
SORT FIELDS=COPY
OUTREC FIELDS=(1,35,36,8,ZD,ADD,+5,TO=PD,LENGTH=5)
Resultado 2:
----+----1----+----2----+----3----+----4----+
000000002EMPRESA CAFETERIA NOVELTY
FFFFFFFFFCDDDCEC4CCCCECDCC4DDECDEE40010544444
000000002547952103165359910565533800100C00000
---------------------------------------------
000000001EMPRESA LANAS MARUJA
FFFFFFFFFCDDDCEC4DCDCE4DCDEDC4444440020544444
000000001547952103151204194110000000200C00000
---------------------------------------------
000000004EMPRESA ASESORIA ASOCIA
FFFFFFFFFCDDDCEC4CECEDDCC4CEDCCC4440000544444
000000004547952101252699101263910000100C00000
La operación se aplica al campo inmediatamente anterior indicado en el OUTREC. En ambos ejemplos veis que por un lado hemos indicado que queremos sacar en salida la información de la posición 1 ocupando 35, y después de la 36 ocupando 8, para la cual se aplica la operación "sumar 1".
Podéis probar con todas las operaciones : )
Aportes de los lectores:
Se pueden sumar dos campos del mismo archivo asi:
OUTREC FIELDS=((01,10,ZD),ADD,(11,10,ZD),TO=ZD,LENGTH=10)
Convertir un campo 9(3)v9(6) comp-3 a un 99v999 comp-3:
OUTREC FIELDS=(57,5,PD,DIV,+1000,TO=PD,LENGTH=3)
10 comentarios:
Este comentario ha sido eliminado por el autor.
Este comentario ha sido eliminado por el autor.
Hola; puedo reemplazar la 'D'(D – Dato de la operación), por posiciones del mismo fichero:
ejemplo:
----+----1----+----2----+----3----+----4----+
000000002EMPRESA CAFETERIA NOVELTY 00110000
000000001EMPRESA LANAS MARUJA 00220000
000000004EMPRESA ASESORIA ASOCIA 00100000
SORT FIELDS=COPY
OUTREC FIELDS=(1,35,36,8,ZD,ADD,+(9,1),TO=ZD,LENGTH=8)
... se puede hacer esto, o hay otra forma de hacer este caso en particular
Una consulta que me esta rompiendo el coco es...
como hago para editar un campo numérico con signo ejemplo WSV-A PIC S9(12) a un campo numerico sin signo ejemplo WSV-B PIC 9(12).
SE PUEDE CONVERTIR UN CH EN ZD O PD CON DECIMALES??
¿Cómo puedo convertir un ZD de 9 (Ej. 000000365) en CH de 3 (Ej. 365)? El dato inicial solo tiene lleno los 3 últimos dígitos
Buenas.
¿Cómo puedo realizar lo siguiente?
Sumar dos valores, uno existente en el archivo 'A' y otro en el 'B' cuando el apareo que haya realizado me de que las claves son iguales.
Gracias, me ha sido muy útil para convertir un campo 9(3)v9(6) comp-3 a un 99v999 comp-3:
OUTREC FIELDS=(57,5,PD,DIV,+1000,TO=PD,LENGTH=3)
Se pueden sumar dos campos del mismo archivo asi:
OUTREC FIELDS=((01,10,ZD),ADD,(11,10,ZD),TO=ZD,LENGTH=10)
Gracias por la aportación chicos! Lo añadimos.