lunes, 21 de mayo de 2012

Respuestas de la semana II

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


3 comentarios:

Ismael dijo...

Hola! Sobre la pregunta 2, puedo afirmar y afirmo que se puede utilizar 'is numeric' sobre una variable alfanumérica.

Tallian dijo...

Gracias Ismael.
Corregido!

pjd dijo...

Hola:
Tengo un problema con el PikeCobol ya que luego de instalarlo, no me permite compilar y me sale el mensaje: Error 53 Archivo no encontrado.
Yo creo que es algún .dll que me falta en el Windows XP, o algo así.
Por favor envíenme alguna sugerencia
Gracias
Pablo