lunes, 28 de diciembre de 2020

SORT vol.1: SORT, INCLUDE.

ACTUALIZADO: comparando zonas de un mismo registro con INCLUDE.

La estructura general de un SORT es la siguiente:

//SORT001  EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN   DD DSN=nombre.fichero.entrada1,DISP=SHR
//         DD DSN=nombre.fichero.entrada2,DISP=SHR
//SORTOUT  DD DSN=nombre.fichero.salida1,
//            DISP=(,CATLG,DELETE),SPACE=(CYL,(500,100))
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *




PGM=SORT --> Indica el programa a utilizar, en este caso el SORT
PARM=('DYNALLOC=(SYSALLDA,32)') --> Cantidad de memoria que se da a la ejecución del paso. Si se queda corto, aumentarla en valores de 8,12,32,64,128, 256 (como las memorias RAM)
SORTIN --> Ficheros de entrada
SORTOUT --> Ficheros de salida
SYSIN --> Indica el tipo de sort a realizar, las opciones disponibles son muchas y muy variadas, pudiendo utilizarse varias juntas en un mismo paso. Algunas de ellas son SORT, SUM, OMIT, INCLUDE, INREC, OUTREC, OUTFIL, OPTION … .

En este documento se explica en detalle algunas de estas funciones:

SORT

SORT FIELDS --> Ordena los registros a partir del fichero de entrada y los guarda ordenados en el fichero de salida:

//SORT001  EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN   DD DSN=nombre.fichero.entrada1,DISP=SHR
//         DD DSN=nombre.fichero.entrada2,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=(I,L,T,O,I,L,T,O)

I – Inicio. Posición donde empieza el campo por el que se quiere ordenar
L – Longitud máxima del campo por el que se quiere ordenar
T – Tipo de dato del campo que se quiere ordenar:
       CH --> Alfanumérico o numérico normal(sin COMP)
       BI --> Hexadecimal (campos COMP)
       PD --> Empaquetado con o sin signo(campos COMP-3)
O – Orden. A-Ascendente, D- Descendente

Ejemplo:

Ordenar el siguiente fichero por Número y Nombre de cliente en orden ascendente:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000006ANTONIO   VILLA     SUSO     AUTONOMO
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000004CARLOS    POLO      DEL BARROAUTONOMO
000000003CARLOS    PEREZ     FANO     AUTONOMO

Fórmula:

SORT FIELDS=(1,9,CH,A,10,10,CH,A)

Resultado:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000004CARLOS    POLO      DEL BARROAUTONOMO
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000006ANTONIO   VILLA     SUSO     AUTONOMO

Otra opción que tiene el SORT es la siguiente:

SORT FIELDS=COPY

Con ella no indicamos ningún tipo de orden, por lo cual, el fichero de entrada se grabará en salida con el mismo orden.


INCLUDE

Filtra los registros deseados por la condición que se indique:

//SORT001  EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN   DD DSN=nombre.fichero.entrada1,DISP=SHR
//         DD DSN=nombre.fichero.entrada2,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
 INCLUDE COND=(I,L,T,C,V)

I – Inicio. Posición donde empieza el campo por el que se quiere filtrar
L – Longitud máxima del campo por el que se quiere filtrar
T – Tipo de dato del campo que se quiere filtrar:
       CH - Carácter o numérico normal(sin COMP)
       BI - Hexadecimal (campos COMP)
C – Condición de la igualdad que se quiere realizar:
       EQ – Igual
       NE - Distinto
       GE – Mayor o igual
       GT - Mayor
       LE – Menor o igual
       LT - Menor
V – Valor del dato por el que se quiere filtrar
       X’001A‘ – Indica un valor hexadecimal o empaquetado
       C’AL12’ – Indica un valor alfanumérico

Ejemplos:

Ejemplo 1. Vamos a realizar un paso de SORT que realice un filtrado del fichero indicado, para quedarse con los clientes que cumplan lo siguiente: Sean AUTONOMOS y su número de teléfono sea un móvil (comience por 6):

Copy:

01 ENTRADA1.
   05 ENTRADA1-NUMCLI    PIC 9(9).
   05 ENTRADA1-NOMBRE    PIC X(10).
   05 ENTRADA1-APELLID1  PIC X(10).
   05 ENTRADA1-APELLID2  PIC X(10).
   05 ENTRADA1-TIPO      PIC X(11).
   05 ENTRADA1-CATEGORIA PIC 9(9) COMP-3.
   05 ENTRADA1-TLFNO     PIC 9(9).
   05 FILLER             PIC X(9) VALUE SPACES.

Fichero entrada:

=COLS>
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO      983275586
FFFFFFFFFDCECCD4444DCDECDCE44CCDDCECDDCECDCDCCCD400001FFFFFFFFF444444444
00000000211595900004193955900319953596121319914600000C983275586000000000
------------------------------------------------------------------------
000000006ANTONIO   VILLA     SUSO     AUTONOMO        918514535
FFFFFFFFFCDEDDCD444ECDDC44444EEED44444CEEDDDDD44400003FFFFFFFFF444444444
00000000615365960005933100000242600000143656460000000C918514535000000000
------------------------------------------------------------------------
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        988453548
FFFFFFFFFEDDCDCC444DDDCE44444CDDDED444CEEDDDDD44400001FFFFFFFFF444444444
00000000586315410003675900000136526000143656460000000C988453548000000000
------------------------------------------------------------------------
000000001JOSE      LOPEZ     PITA     AUTONOMO        676757687
FFFFFFFFFDDEC444444DDDCE44444DCEC44444CEEDDDDD44400001FFFFFFFFF444444444
00000000116250000003675900000793100000143656460000000C676757687000000000
------------------------------------------------------------------------
000000004CARLOS    POLO      DEL BARROAUTONOMO        666415887
FFFFFFFFFCCDDDE4444DDDD444444CCD4CCDDDCEEDDDDD44400003FFFFFFFFF444444444
00000000431936200007636000000453021996143656460000000C666415887000000000
------------------------------------------------------------------------
000000003CARLOS    PEREZ     FANO     AUTONOMO        986115484
FFFFFFFFFCCDDDE4444DCDCE44444CCDD44444CEEDDDDD44400001FFFFFFFFF444444444
00000000331936200007595900000615600000143656460000000C986115484000000000
------------------------------------------------------------------------

Fórmula:

INCLUDE COND=(39,8,CH,EQ,C'AUTONOMO',AND,55,1,CH,EQ,C'6')


Fichero salida:

=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000000001JOSE      LOPEZ     PITA     AUTONOMO        676757687
FFFFFFFFFDDEC444444DDDCE44444DCEC44444CEEDDDDD44400001FFFFFFFFF444444444
00000000116250000003675900000793100000143656460000000C676757687000000000
-------------------------------------------------------------------------
000000004CARLOS    POLO      DEL BARROAUTONOMO        666415887
FFFFFFFFFCCDDDE4444DDDD444444CCD4CCDDDCEEDDDDD44400003FFFFFFFFF444444444
00000000431936200007636000000453021996143656460000000C666415887000000000
-------------------------------------------------------------------------


Ejemplo 2. Vamos a realizar un paso de SORT similar al anterior, que realice un filtrado del fichero indicado, para quedarse con los clientes que cumplan lo siguiente: Sean AUTONOMOS y su número de teléfono sea un móvil (comience por 6). Pero en este caso el número de teléfono vendrá empaquetado(COMP-3):

Copy:

01 ENTRADA1.
   05 ENTRADA1-NUMCLI    PIC 9(9).
   05 ENTRADA1-NOMBRE    PIC X(10).
   05 ENTRADA1-APELLID1  PIC X(10).
   05 ENTRADA1-APELLID2  PIC X(10).
   05 ENTRADA1-TIPO      PIC X(11).
   05 ENTRADA1-CATEGORIA PIC 9(9) COMP-3.
   05 ENTRADA1-TLFNO     PIC 9(9) COMP-3.
   05 FILLER             PIC X(13) VALUE SPACES.

Fichero entrada:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO      q Íì%
FFFFFFFFFDCECCD4444DCDECDCE44CCDDCECDDCECDCDCCCD400001937564444444444444
00000000211595900004193955900319953596121319914600000C8258C0000000000000
-----------------------------------------------------------------------
000000006ANTONIO   VILLA     SUSO     AUTONOMO        q Î %
FFFFFFFFFCDEDDCD444ECDDC44444EEED44444CEEDDDDD44400003937164444444444444
00000000615365960005933100000242600000143656460000000C8265C0000000000000
-----------------------------------------------------------------------
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        o ÍÌ 
FFFFFFFFFEDDCDCC444DDDCE44444CDDDED444CEEDDDDD44400001937724444444444444
00000000586315410003675900000136526000143656460000000C6858C0000000000000
-----------------------------------------------------------------------
000000001JOSE      LOPEZ     PITA     AUTONOMO        #jéì%
FFFFFFFFFDDEC444444DDDCE44444DCEC44444CEEDDDDD44400001695564444444444444
00000000116250000003675900000793100000143656460000000C9118C0000000000000
-----------------------------------------------------------------------
000000004CARLOS    POLO      DEL BARROAUTONOMO        ÅÂÌì%
FFFFFFFFFCCDDDE4444DDDD444444CCD4CCDDDCEEDDDDD44400003667564444444444444
00000000431936200007636000000453021996143656460000000C7288C0000000000000
-----------------------------------------------------------------------
000000003CARLOS    PEREZ     FANO     AUTONOMO        m nç%
FFFFFFFFFCCDDDE4444DCDCE44444CCDD44444CEEDDDDD44400001939464444444444444
00000000331936200007595900000615600000143656460000000C4558C0000000000000
-----------------------------------------------------------------------

Fórmula:

 INCLUDE COND=(39,8,CH,EQ,C'AUTONOMO',AND,
    (55,5,BI,GE,X'600000000C',AND,55,5,BI,LT,X'700000000C'))

Resultado:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000000001JOSE      LOPEZ     PITA     AUTONOMO        #jéì%
FFFFFFFFFDDEC444444DDDCE44444DCEC44444CEEDDDDD44400001695564444444444444
00000000116250000003675900000793100000143656460000000C9118C0000000000000
------------------------------------------------------------------------
000000004CARLOS    POLO      DEL BARROAUTONOMO        ÅÂÌì%
FFFFFFFFFCCDDDE4444DDDD444444CCD4CCDDDCEEDDDDD44400003667564444444444444
00000000431936200007636000000453021996143656460000000C7288C0000000000000
------------------------------------------------------------------------


NOTA: a la hora de comparar con valor (EQ, NE, GT...) podemos utilizar para la comparación otra zona del fichero:

Fichero entrada:
----+----1----+----2-
XXXXX111111XXXXX
YYYYY111111XXXXX
ZZZZZ111111ZZZZZ
WWWWW111111XXXXX

Fórmula:
INCLUDE COND =(1,5,CH,EQ,12,5,CH)

Resultado:
----+----1----+----2-
XXXXX111111XXXXX
ZZZZZ111111ZZZZZ

Hemos comparado las posiciones 1 a 5 con las posiciones 12 a 16 del mismo registro.

35 comentarios:

javier dijo...

Quisiera hacerles una consulta :
Ocuapando el mismo archivo de entrada de arriba como ordeno el campo numerico si
este no tuviera los ceros a la izquierda

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
20 JAVIER MARTINEZ CARRETEROASALARIADO
166 ANTONIO VILLA SUSO AUTONOMO
55 YOLANDA LOPEZ ALONSO AUTONOMO
1233 JOSE LOPEZ PITA AUTONOMO
4 CARLOS POLO DEL BARROAUTONOMO
3 CARLOS PEREZ FANO AUTONOMO

Tallian dijo...

Hola Javier. Viendo los números que has puesto a la izquierda de los nombres, tengo que preguntar:
habría espacios a la derecha (o izquierda) de los números para completar una misma longitud? Me explico, imagina que los guiones bajos son espacios:
__20
_166
__55
1233
___4
___3

Si es así en el SORT indicaríamos lo siguiente para ordenar por ese campo:
SORT FIELDS = (1,4,CH,A)
Usamos CH para indicar que es un campo alfanúmerico pues incluye espacios.
Y el resultado sería:
___3
___4
__20
__55
_166
1233

Y si no era eso me dices y lo intento otra vez^^

Talli.

Anónimo dijo...

Creo que no es del todo correcto decir:

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

Yo las conversiones que utilizo son:

COMP-3 -> PD
COMP con signo -> FI
COMP sin signo -> BI
Numérico no comprimido -> ZD
Carácter -> CH

Alvarito dijo...

Hola, perdona la tardanza.
Totalmente de acuerdo contigo. Siguiendo el manual al pié de la letra es correcto, ahora para quien quiera salirse de las reglas que use el otro método, todo es válido.

Gracias anónimo!

Anónimo dijo...

Buenos días, me encanta vuestro blog y lo sigo bastante a menudo. Una pregunta:
Si yo tengo un fichero que tiene un primer registro que es una cabecera, y los siguientes registros es la información propiamente dicha. Si quiero hacer un sort obviando la primera línea ¿ Cómo sé haría??

Tallian dijo...

Muy buenas y gracias por seguirnos : )

Puedes hacer un SORT obviando la primera linea, pero esta no se escribirá en el fichero de salida. Lo haríamos con un SORT FIELDS=(ordenacion) y un SKIPREC=1. De tal modo que se saltaría el primer registro antes de ordenar el fichero.

Si necesitas mantener toda la información, te recomiendo que ordenes el fichero antes de incluir la cabecera, o sino tendrás que separarlos (bien con un SKIPREC=1 para tener los detalles y STOPAFT=1 para tener la cabecera, o bien con un OUTFIL).
Una vez separados, ordenarias el fichero de los detalles, y luego volverias a unirlos con un SORT FIELDS=COPY, colocando en el SORTIN primero el fichero con la cabecera y luego el fichero con los detalles.

Tanto SKIPREC, como STOPAFT y OUTFIL están expicados y puedes encontrarlos en el apartado de JCL:
http://www.consultoriocobol.com/p/jcl.html

Anónimo dijo...

Buen dia.

Antes que nada, son excelentes sus aportaciones. Queria consultar si ustedes saben como hacer un INCLUDE de un campo, donde solo me deje la informacion que venga numerica, si existe algun caracter, no incluya ese registro.

Saludos.

Anónimo dijo...

Ya encontre la respuesta, era algo sencillo... pero tenia que encontrar los parametros correctos. Se las comparto por si algun dia la llegan a utilizar.

SORT FIELDS=COPY
INCLUDE COND=(01,04,FS,EQ,NUM)

Tallian dijo...

Muchas gracias por compartir!!

Anónimo dijo...

Buenas,

necesito escribir en un fichero de salida todos los registros que en un campo 9(9) lleven LOW-VALUES.

Las siguientes instrucciones no funcionan:

INCLUDE COND=(1,9,ZD,EQ,X'000000000')
INCLUDE COND=(1,9,CH,EQ,X'000000000')

Da un error en el SORT, se que es un poco raro que el campo numérico venga con LOW-VALUES pero es así, va a venir a low-values.

¿Podéis ayudarme?

Tallian dijo...

Hola Anónimo.
Si se trata de un numérico normal sin comprimir, no va a aceptar low-values. Tendría que ser un COMP-3 para que los aceptase y se definiría como PD en el SORT y serían 10 ceros (X'0000000000').

Un PIC 9(9) no acepta low-values ni high-values.

Un saludo.

Yseku dijo...

Hola,
antes de nada gracias por la pagina. ;)

Quiero comparar con una fecha en formato (AAAA-MM-DD) procedente de Control-M.
Tengo mis dudas con las comillas y la C que las precede.

¿Como le paso una variable dinamica de control-M al campo de la condicion?:

INCLUDE COND=(17,10,CH,EQ,C'%%$OYEAR-%%OMONTH-%%ODAY')

INCLUDE COND=(17,10,CH,EQ,%%$OYEAR-%%OMONTH-%%ODAY)


Gracias.

Yseku dijo...

O seria algo parecido a esto:

INCLUDE COND=(17,4,CH,EQ,%%$OYEAR,
21,1,CH,EQ,C'-',
22,2,CH,EQ,%%OMONTH,
24,1,CH,EQ,C'-',
25,2,CH,EQ,%%ODAY)

Cogeria así las variables dinamicas?

Gracias de nuevo.

Anónimo dijo...

Hola.
Alguien podría decirme si el sort omit tiene un limite de longitud para hacer referncia a la ubicación del campo a omitir.
Con OMIT COND=(6561,8,CH,EQ,C'P0033049') me envía error S0C4 (ERROR OCCURED IN PHASE-3)

Tallian dijo...

Para Yseku, no puedes utilizar una variable OPC? De las que te rellena el control-M, y luego comparas. Por ej:
//*%OPC SETFORM CDATE=(CCYY-MM-DD)
(...)
INCLUDE COND=(17,10,CH,EQ,C'&CDATE')

??

Alejandro Arancivia dijo...

Este comentario ha sido eliminado por el autor.

Michael Jannes dijo...

tal vez lo que debe estar sucediendo con tu OMIT COND es que esa no es la posición en la que empieza el campo y debes estar solapando el siguiente campo probablemente de otro tipo de dato.

Pepe Gotera dijo...

Buenos días,
¿Cómo podría filtrar aquellos registros que cumplan que su fecha sea superior a los últimos 5 días? ¿Algo así como: INCLUDE COND=(1,10,CH,GE,X'&CDATE' - 5)?
Gracias.
Un saludo.

Tallian dijo...

Hola Pepe.
Lo que tendrías que hacer es calcular la fecha por la que quieres filtrar (la actual - 5 dias) en la cabecera del job como una variable OPC. Luego en el include usas directamente el nombre que le hayas dado.

//*%OPC SCAN
//*%OPC SETFORM CDATE=(CCYYMMDD)
//*%OPC SETVAR TDATE=(CDATE + 5CD)

TDATE tendría la fecha en formato AAAAMMDD de 5 días antes.

Un saludo.

Pepe Gotera dijo...

Muchas gracias.
Entiendo que tendría que ser:
/*%OPC SETVAR TDATE=(CDATE - 5CD)
¿no?
Un saludo.

Tallian dijo...

ups eso es jeje

Pepe Gotera dijo...

Perfecto! Gracias!

Sixto Vargas Sanabria dijo...

Hola, tengo un problema, estoy haciendo un SORT INCLUDE con un fichero de entrada formato VB, este fichero tiene los primeros 5 registros de cabecera (los cuales quiero conservar) y a continuacion mas datos, de los cuales me quiero quedar con 1 solo, esta es la instruccion que utilizo

SORT FIELDS=COPY
INCLUDE COND=((5,2,CH,NE,C'20'),OR,(16,4,CH,EQ,C'9910'))

El caso es que el JCL termina OK, pero la informacion que me selecciona no es la correcta,

Entrada:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
Asset Class,ECB RMBS Template
Version,28
Date ,11/27/2012
Data Type,Loan
AR1,AR2,AR3,AR4,AR5,AR6,AR7,AR8,AR15,AR16,AR17,AR18,AR19,AR20,AR21,AR22,AR23,AR2
2014-01-24,0606/GENOVA VIII,00650001210056115156,"ND,6",
2014-01-24,0606/GENOVA VIII,00650001260056115180,"ND,6",
2014-01-24,0606/GENOVA VIII,00650001210056115466,"ND,6",
2014-01-24,0606/GENOVA VIII,00650001240056115490,"ND,6",
2014-01-24,0606/GENOVA VIII,00650001210056115563,"ND,6",

Y la salida es:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
Asset Class,ECB RMBS Template
Date ,11/27/2012
AR1,AR2,AR3,AR4,AR5,AR6,AR7,AR8,AR15,AR16,AR17,AR18,
2014-01-24,9910/GOYA I,00651515810056000364,"ND,5",

Lo cual solo me esta seleccionando solo 3 registros de la cabecera, siendo que deberian de ser 5 y el registro de datos el cual si es correcto.

Si ejecuto el SORT INCLUDE por separado, es decir primero:
INCLUDE COND=(5,2,CH,NE,C'20')

y en otro paso :

INCLUDE COND=(16,4,CH,EQ,C'9910')

Funciona correctamente, pero yo quiero hacerlo en un solo paso.

El problema, pienso que es porque al ser el fichero VB los registros de cabecera tienen un fin de linea determinado y la instruccion del SORT INCLUDE no llega a validarlos:

----+----1----+----2----+----3----+----4----+----5----+----6--
----+----F----+----F----+----F----+----F----+----F----+----F--
----+----1----+----2----+----3----+----4----+----5----+----6--
-------------------------------------------------------------
Asset Class,ECB RMBS Template
CAA8A4C98AA6CCC4DDCE4E89998A8
12253033122B53209422035473135
-------------------------------------------------------------
Version,28
E89A8996FF
5592965B28
-------------------------------------------------------------
Date ,11/27/2012
C8A846FF6FF6FFFF
41350B1112712012
-------------------------------------------------------------
Data Type,Loan
C8A84EA986D989
413103875B3615
-------------------------------------------------------------

Alguien sabe como hacerlo para que funcione bien?


gracias por la ayuda:

vargass.sixto@gmail.com

SALUDOS

Unknown dijo...

tengo un campo ZD con signo y después de sumarlo quiero dejarlo en otra posición ZD sin signo, como lo hago

lola alarcon oudshoorn dijo...

Hola Soy Lola Alarcon.
En el ultimo ejemplo con los numero de telefonos empaquetados
INCLUDE COND=(39,8,CH,EQ,C'AUTONOMO',AND,
(55,5,BI,GE,X'600000000C',AND,55,5,BI,LT,X'700000000C')), no acabo de ver esta parte
(55,5,BI,GE,X'600000000C',AND,55,5,BI,LT,X'700000000C').
Si fueseis tan amables de detallar un poco mas

Tallian dijo...

Hola Lola.
En este caso al estar los números de teléfono empaquetados, no podemos preguntar por el '6' como hacíamos en el ejemplo 1.

Lo que hacemos es quedarnos con aquellos números de teléfono (el número completo empieza en la posición 55 y ocupa 5 posiciones) que estén entre el valor 600000000 y 700000000.

Como están empaquedatos debemos indicarlo con la X delante y la última letra indica el signo, positivo en este caso.

Si el valor es GE(mayor o igual) que 600000000 y LT (menor) que 700000000 lo consideramos un teléfono móvil :-)

Espero que te sirva!

Flor Baltodano dijo...

Hola tengo una cabecera en un fichero y quiero unirla al reporte y ponerle salto de linea pero y que la cabecera se repita en cada hoja , esto solo puedo hacerlo definiendo el header , pero mi header ya esta en un fichero saben como podria hacerlo? gracias

Bárbara Cerezo dijo...

Hola ...quiero agregar en un archivo las comillas ' pero se confinde con las comillas indicadoras .. alguien sabe como peudo solucinar este tema.
Algo asi, pero con comillas simples:

OUTREC FIELDS=(29,4,C'"',33,2,C'"',35,2)

Tallian dijo...

Hola Bárbara.
Has probado a poner la comilla simple dos veces? Así:
OUTREC FIELDS=(29,4,C'''',33,2,C'''',35,2)

Bárbara Cerezo dijo...

Tallian!!! Si!!! Muchas gracias!!!! :D Funciono!!!
gracias!

Sixto Vargas Sanabria dijo...

tambien podrias ponerlo en hexadecimal....

Tallian dijo...

Genial Bárbara!
Sixto en hexadecimal se escribe X'7D'.
Saludos!

Unknown dijo...

Buenos dias, quiero hacer un sort de un archivo de entrada filtrado por registro externo de forma ascendente, pero cuando lo graba en el archivo de salida el pimer registro lo deja vacio, ya probe usando option OPTION SKIPREC=1, pero no me funciona.
Este es el codigo que estoy usando :

SORT <<!
STEP=2
SORTIN=$ALIAS$LOCI/OBLIGAC_2017 DISP=SHR
SORTOUT=$ALIAS$PRET/SALSORT DISP=(NEW,CATLG,DELETE) LRECL=266
SORT FIELDS=(1,11,CH,A)
OPTION SKIPREC=1

Osvaldo A dijo...

HOLA EN UN JCL, OUTREC, NECESITO PASAR POR EJEMPLO 12345678 COMO 1234567H 0 SEA 8 POSITIVO , COMO HAGO QU EEL ULTIMO DIGITO TENGA EL SIGNO

joel dijo...

Hola, una consulta, si quiero ingresar a la condición que filtre solo los registros que posean espacios, pero en un largo de 350...como para no ingresar literalmente esos 350 espacios?

gracias!