Recordad que podéis escribirnos con vuestras dudas concretas y os responderemos lo antes posible : )
Pregunta 1:
como saber si una fecha es valida o no en db2
Respuesta 1:
Una fecha DB2 es un campo definido como DATE, que a los efectos de un programa cobol es un campo alfanumérico con PIC X(10).
El formato de la fecha será AAAA-MM-DD, donde AAAA es el año, MM el mes y DD el día. Los guiones son guiones normales.
En el blog hay un artículo sobre los diferentes formatos de fechas que podéis consultar:
Fechas: Juliana, Gregoriana, DB2...
Pregunta 2:
como validar variables alfanumericas en cobol
Respuesta 2:
Así como existe una sentencia "IS NUMERIC" para comprobar que un campo sólo lleva números, para los campos alfanuméricos tendremos también la opción de preguntar por "IS ALPHABETIC" para comprobar que solo lleva caracteres de la A a la Z.
Para el resto de caracteres:
Nuestra variable.
01 WX-ALFANUM PIC X(10) VALUE 'ABCD;EFGH1'.
01 INDICE PIC S9(4) COMP.
Definimos un switch con los los caracteres que queramos detectar.
01 SW-VALIDAR PIC X.
88 CAMPO-SIMBOLOS VALUE ';', '@', '#', '$',
'%', '&', '/', '(',
')', '='.
01 SW-BUCLE PIC X.
88 SALIR-BUCLE VALUE 'S'.
Montamos un bucle para recorrer todas las posiciones de nuestra variable alfanumérica.
PERFORM VARYING INDICE FROM 1 BY 1 UNTIL INDICE > 10
OR SALIR-BUCLE
MOVE WX-ALFANUM(INDICE:1) TO SW-VALIDAR
IF NOT CAMPO-SIMBOLOS
CONTINUE
ELSE
SET SALIR-BUCLE TO TRUE
END-IF
END-PERFORM
De tal forma que si al salir del bucle el switch SALIR-BUCLE está activado significa que la variable contiene caracteres especiales (en el ejemplo al llegar al punto y coma ';' activará SALIR-BUCLE).
La validación podéis montarla al gusto, siempre que comprobéis cada una de las posiciones:
WX-ALFANUM(INDICE:1) donde INDICE va cambiando de 1 en 1 y solo cogemos una posición (:1).
Pregunta 3:
agregar consecutivos desde jcl
Respuesta 3:
Se me ocurre que lo que estaba buscando esta persona era la manera de añadir un número secuencial a un registro de un fichero por JCL (que lo mismo no, pero bueno, yo os lo cuento).
Hay una opción de OUTREC para generar un número secuencial que podremos colocar donde queramos.
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(SEQNUM,10,ZD,START=0000000001,INCR=1,1,300)
Se trata de la opción SEQNUM. En el ejemplo vemos que indicamos lo siguiente:
SEQNUM: número secuencial
10: tendrá 10 posiciones
ZD: será de tipo numérico sin comprimir
START=0000000001: comenzará con el valor 0000000001
INCR=1: iremos incrementando de 1 en 1
1,300: son las demás posiciones del fichero de entrada que queremos incluir en salida (aquí podríamos poner lo que quisiéramos)
El SEQNUM podemos colocarlo en cualquier posición del registro, no hace falta que sea en la primera posición.
Pregunta 4:
declarar variables que no permite negativos en cobol
Respuesta 4:
Una variable definida sin signo nunca podrá ser negativa. Por ejemplo:
01 WX-CAMPO-POSITIVO PIC 9(8)V9(3).
No lleva el signo (la S delante del 9) por lo que nunca podrá ser menor que cero.
En las variables signadas podemos comprobar si son negativas preguntando si la variable es menor que cero:
IF WX-CAMPO-SIGNADO LESS THAN ZERO
Pregunta 5:
host utilidad comparar dos ficheros tso
Respuesta 5:
La utilidad para comparar ficheros está en la opción 3.13 del ISPF: SuperCE
En ella indicaremos los 2 ficheros a comparar y en el resultado veremos las filas que no coinciden (nos mostrará la fila de ambos ficheros). Lo malo es que si el fichero es muy largo, el final del registro no lo veremos (por mucho que demos F11 para que muestre más pantallas a la derecha).
Mostrando entradas con la etiqueta busquedas. Mostrar todas las entradas
Mostrando entradas con la etiqueta busquedas. Mostrar todas las entradas
lunes, 21 de mayo de 2012
lunes, 23 de abril de 2012
Respuestas de la semana
Revisando las búsquedas que llevan a la gente a visitar el Consultorio Cobol, se nos ocurrió crear un artículo semanal en respuesta a esas búsquedas que puede que no hayan encontrado solución a su problema.
Contestaremos a aquellas cuestiones que no necesiten de un artículo entero para ser explicadas, es decir, que la solución se pueda dar en un par de frases.
Vamos con las de esta semana : )
Pregunta 1:
se puede validar una variable numerica y alfanumerica en cobol
Respuesta 1:
En cobol se puede comprobar si una variable contiene solo números (es numérica) o no con la siguiente sentencia:
01 WX-VARIABLE-NUM PIC 9(4) VALUE 1234.
...
IF WX-VARIABLE-NUM IS NOT NUMERIC
DISPLAY 'ERROR'
END-IF
Nota: la validación de IS NUMERIC e IS NOT NUMERIC es válida sólo para campos numéricos o numéricos comprimidos, es decir, PIC 9(X) y PIC 9(X) COMP-3.
Pregunta 2:
quitar numeracion amarrilla cobol
Respuesta 2:
Los números amarillos que aparecen a izquierda y derecha de un programa cobol se puden quitar escribiendo en la linea de comandos (Command ===>) los siguiente:
Primero escribimos NUM STD COB y pulsamos intro. Veréis que el código se mueve hacia la izquierda.
Luego escribimos UNNUM y pulsamos intro. Veréis que el código se vuelve a centrar y los números han desaparecido.
Pregunta 3:
indexed by in cobol como incrementar
Respuesta 3:
Cuando un índice en cobol está definido en una cláusula INDEXED BY, la manera de incrementarlo sería:
SET WI-INDICE UP BY 1
Esto sería para incrementarlo en 1, si le indicamos otro número se incrementaría en esa cantidad.
Pregunta 4:
cargar campos de longitud variable con load bmc vachar position
Respuesta 4:
Supongamos que tenemos un fichero de longitud variable (VB) donde el VARCHAR es el último campo del fichero, de tal modo que es el que hace que la longitud varíe.
Supongamos ahora que con ese fichero queremos hacer una LOAD a la tabla correspondiente. Pueden pasar dos cosas:
1- En la tabla, el campo VARCHAR no es el último:
En este caso tendremos que formatear el fichero con un OUTREC, para colocar el VARCHAR de modo que coincida con la posición en la tabla DB2. Para ello podemos pasar el fichero de VB a FB y después hacer el OUTREC (por ejemplo).
2- En la tabla, el campo VARCHAR también es el último:
Si la LOAD directamente del fichero VB no funciona, podemos pasarlo a FB y funcionará.
Para pasar de VB a FB podemos hacerlo por JCL o, más a lo bestia, hacer una copia y cuando nos pregunte si queremos copiar los atributos del fichero original le diremos que no, que se los queremos indicar (opción 2 de la imagen). Cambiaremos el Record Format de VB a FB, el Record Length a la longitud del fichero con el VARCHAR al máximo, y el Block size a algo coherente con la longitud.
No dudéis en enviarnos vuestras dudas directamente al correo del consultorio o a través del formulario de contacto.
Contestaremos a aquellas cuestiones que no necesiten de un artículo entero para ser explicadas, es decir, que la solución se pueda dar en un par de frases.
Vamos con las de esta semana : )
Pregunta 1:
se puede validar una variable numerica y alfanumerica en cobol
Respuesta 1:
En cobol se puede comprobar si una variable contiene solo números (es numérica) o no con la siguiente sentencia:
01 WX-VARIABLE-NUM PIC 9(4) VALUE 1234.
...
IF WX-VARIABLE-NUM IS NOT NUMERIC
DISPLAY 'ERROR'
END-IF
Nota: la validación de IS NUMERIC e IS NOT NUMERIC es válida sólo para campos numéricos o numéricos comprimidos, es decir, PIC 9(X) y PIC 9(X) COMP-3.
Pregunta 2:
quitar numeracion amarrilla cobol
Respuesta 2:
Los números amarillos que aparecen a izquierda y derecha de un programa cobol se puden quitar escribiendo en la linea de comandos (Command ===>) los siguiente:
Primero escribimos NUM STD COB y pulsamos intro. Veréis que el código se mueve hacia la izquierda.
Luego escribimos UNNUM y pulsamos intro. Veréis que el código se vuelve a centrar y los números han desaparecido.
Pregunta 3:
indexed by in cobol como incrementar
Respuesta 3:
Cuando un índice en cobol está definido en una cláusula INDEXED BY, la manera de incrementarlo sería:
SET WI-INDICE UP BY 1
Esto sería para incrementarlo en 1, si le indicamos otro número se incrementaría en esa cantidad.
Pregunta 4:
cargar campos de longitud variable con load bmc vachar position
Respuesta 4:
Supongamos que tenemos un fichero de longitud variable (VB) donde el VARCHAR es el último campo del fichero, de tal modo que es el que hace que la longitud varíe.
Supongamos ahora que con ese fichero queremos hacer una LOAD a la tabla correspondiente. Pueden pasar dos cosas:
1- En la tabla, el campo VARCHAR no es el último:
En este caso tendremos que formatear el fichero con un OUTREC, para colocar el VARCHAR de modo que coincida con la posición en la tabla DB2. Para ello podemos pasar el fichero de VB a FB y después hacer el OUTREC (por ejemplo).
2- En la tabla, el campo VARCHAR también es el último:
Si la LOAD directamente del fichero VB no funciona, podemos pasarlo a FB y funcionará.
Para pasar de VB a FB podemos hacerlo por JCL o, más a lo bestia, hacer una copia y cuando nos pregunte si queremos copiar los atributos del fichero original le diremos que no, que se los queremos indicar (opción 2 de la imagen). Cambiaremos el Record Format de VB a FB, el Record Length a la longitud del fichero con el VARCHAR al máximo, y el Block size a algo coherente con la longitud.
No dudéis en enviarnos vuestras dudas directamente al correo del consultorio o a través del formulario de contacto.
Suscribirse a:
Entradas (Atom)




