Sie sind auf Seite 1von 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO/ISPF, ERRORES, CHANGEMAN, CONTROL-M

MANUAL PLATAFORMA IBM390 INDICE

Que es el COBOL? ------------------------------------------------------------------------------ 01 IDENTIFICATION DIVISION ------------------------------------------------------------------ 04 ENVIRONMENT DIVISION -------------------------------------------------------------------- 05 DATA DIVISION ---------------------------------------------------------------------------------- 05 PROCEDURE DIVISION ---------------------------------------------------------------------- 12 CODIGOS DE ERROR ----------------------------------------------------------------------- 46

BELEN SOLIS MARCIAL

Pgina 1 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

QUE ES EL COBOL?
El COBOL (Common Bussines Oriented Language) es un lenguaje de programacin para uso de computadoras. Se utiliza como el lenguaje estndar para aplicaciones administrativas tanto en grandes instalaciones (MAINFRAMES) como en pequeas (PCs). A travs de los aos, se ha venido actualizando bajo los auspicios de CODASYL (Conference Data System Language), por lo tanto a pesar de existir como lenguaje estandarizado desde 1959, su implementacin actual, responde a las necesidades de los nuevos programas. Para ejecutar una aplicacin en COBOL se requiere: Crear una lista de instrucciones (Programa) escrita con apego a los lineamientos (SINTAXIS) del lenguaje COBOL. Compilar el programa para obtener un modulo ejecutable Ordenar la ejecucin del programa segn el ambiente de trabajo (P.ej. TSO, CICS)

PROG FUENTE EN COBOL

COMPILADOR DE COBOL

MODULO EJECUTABLE EN LENGUAJE DE MAQUINA

TAREA QUE EJECUTA LA APLICACIN

EJECUTOR DE PROGRAMA

RESUMEN DE DECLARACIONES DE COBOL.


1. Las declaraciones COBOL deben escribirse en Formato COBOL, segn la siguiente tabla: COLUMNA 01 06 07 08 11 12 72 USO EN COBOL NUMERO SECUENCIAL AREA DE INDICADORES AREA A AREA B

BelSolis

Pgina 2 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

El nmero de secuencia se genera automticamente con el editor. Por lo tanto se deja vaco el espacio de la columna 1 a la 06. En el rea de indicadores se puede poner: Un guin - Para indicar continuacin. Un asterisco * Para indicar comentario (Se ignora todo el rengln) En el rea A se deben escribir: Los encabezados de Seccin y los encabezados de Divisin. Los nombres de Prrafo. El encabezado END PROGRAM Los indicadores de nivel FD y SD Los nmeros de nivel 01 y 77 En el rea B se deben escribir: Declaraciones, sentencias, clusulas y, entradas. Los renglones que sean continuacin de uno anterior. CONTINUACIONES Cualquier sentencia, clusula, frase puede continuar en el siguiente rengln, pero la continuacin debe empezar a escribirse en el rea B. Si se pone un guin en el rea de indicadores, se supone que el ultimo carcter de la lnea anterior va seguido de un espacio. Si NO se pone un guin en el rea de indicadores, el primer carcter que no sea espacio de la continuacin sigue inmediatamente al ultimo carcter que no sea espacio de la lnea anterior. En el caso de continuaciones de literales NO-NUMERICAS - Cuando no se cierran las comillas del rengln anterior, todos los espacios hasta la columna 72 se toman como parte de la literal. - El rengln de continuacin debe tener un guin en la columna 7, y el primer carcter que no sea espacio en el rea B debe ser comilla. EJEMPLOS: 5 10 15 20 25 30 35 60 65 70 72 ....!....|....!....|....!....|....!.. / / ....|....!....|.. 01 WX-CAMPO-AUXILIAR PIC X(20). 77 WX-CAMPO-CON-CONTINUACIN PIC X(30) VALUE ABC DEFGHIJKLMNOPQRSTUVWXYZ 01 WX-CAMPO-CON ESPACIOS 2 3 4 5 6 7 8 9 PIC X(33) 10 11. VALUE 1

El carcter de continuacin va en col 7, en WX-CAMPO-CON-CONTINUACIN, no hay espacio antes de col 72.

DIVISIONES
Las cuatro divisiones de un programa COBOL son: 1. IDENTIFICATION DIVISION. Se usa para dar nombre al programa por medio de la entrada PROGRAM-ID. 2. ENVIRONMENT DIVISION. Se usa principalmente para especificar informacin externa de los archivos en el prrafo FILE-CONTROL. 3. DATA DIVISION. Aqu se dan las definiciones de los registros de archivos y de todos los datos que se van a procesar en la ejecucin del programa. 4. PROCEDURE DIVISION.
BelSolis

Pgina 3 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Se usa para escribir las instrucciones que dirigen el proceso de la aplicacin. EJEMPLO DE UN PROGRAMA EN COBOL: 5 10 15 20 25 30 35 ...!....|....!....|....!....|....!.. IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. AREA-WS. 05 WS-MENSAJE-INICIAL VALUE HOLA MUNDO. 05 WS-MENSAJE-FINAL PROCEDURE DIVISION. DISPLAY WS-MENSAJE-INICIAL DISPLAY WS-MENSAJE-FINAL STOP RUN. 60 65 70 72 ....|....!....|..

/ /

PIC X(20) PIC X(10) VALUE ADIOS.

IDENTIFICATION DIVISION
La IDENTIFICATION DIVISION se utiliza para indicar el nombre del programa, el nombre del programador, otras informaciones que se consideren importantes; los parrafos principales son: PROGRAM-ID. El texto de este prrafo es el nombre del programa. AUTHOR. En este prrafo se pone el nombre del programador. REMARKS. Se usa para escribir comentarios acerca del programa. Ejemplo: Escribir la IDENTIFICATION DIVISION de un programa llamado BE001 cuyo programador es Luis Antonio Salinas. 5 10 15 20 25 30 35 ....!....|....!....|....!....|....!.. / / IDENTIFICATION DIVISION. PROGRAM-ID. BE001. AUTHOR. LUIS ANTONIO SALINAS. REMARKS. 60 65 70 72 ....|....!....|..

* ********** ********** *** *** *** SISTEMA : EMPLEADOS *** *** *** *** PROGRAMA: BE001 TIPO PROGRAMA: BATCH *** *** *** *** OBJETIVO: REALIZA UN REPORTE DE ARCHIVO *** *** SECUENCIAL *** *** *** *** FECHA DE CREACIN 24 DE OCTUBRE DE 2000 *** *** FECHA DE CAMBIOS 28 DE DICIEMBRE DE 2000 *** *** *** ********** ********** * Observe que:
BelSolis

Pgina 4 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

El texto a continuacin del prrafo REMARKS se considera como comentarios y termina con el nombre de la siguiente divisin; ENVIRONMENT DIVISION. Los prrafos de esta divisin son optativos, pero, los que estn presentes, debern aparecer en este orden.

ENVIRONMENT DIVISION.
La ENVIRONMENT DIVISION es la segunda divisin de un programa COBOL, y se utiliza para establecer las relaciones entre el programa de aplicacin y el sistema operativo de la computadora donde se va a ejecutar. Una parte importante de la ENVIRONMENT DIVISION es el FILE-CONTROL de la INPUT-OUTPUT SECTION, que establece la relacin entre los datos del programa COBOL y las tarjetas DD del JOB que ejecutara el programa.

PROGRAMA COBOL
ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL SELECT FD-ENTRADA ASSIGN TO ENTRADA

JOB
//BECLAS01 JOB (1,2),LUIS, CLASS=A,MSGLEVEL=(1,1) //PASO1 EXEC PGM=BE001 //ENTRADA DD DSN=ARCHIVO,EMPLEADO, DISP=SHR //SALIDA DD DSN=ARCHIVO.REPORTE, DISP=SHR

SELECT FD-REPORTE ASSIGN TO SALIDA.

Ejemplo: Escriba la ENVIRONMENT DIVISION del programa BE001 5 10 15 20 25 30 35 40 45 50 55 60 65 70 ....|....|....|....|....|....|....|....|....|....|....|....|....|....|.. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FD-ENTRADA ASSIGN TO ENTRADA ORGANIZATION IS SEQUENTIAL FILE STATUS IS WF-STATUS. SELECT FD-REPORTE ASSIGN ORGANIZATION FILE STATUS TO SALIDA IS SEQUENTIAL IS WF-STATUS.

Observe que: Los nombres de Divisin, Seccin y Prrafo se escriben a partir de la columna 8 (Margen A) Las clusulas se escriben a partir de la columna 12 (Margen B) El archivo ENTRADA se llamara FD-ENTRADA dentro del programa COBOL El archivo SALIDA se llamara FD-REPORTE dentro del programa COBOL Debe haber un SELECT por cada archivo que use el programa. Cada archivo es de tipo secuencial, por eso su ORGANIZATION es SEQUENTIAL. El campo FILE STATUS se usa para recibir un cdigo que indica el resultado de las operaciones con el archivo.

DATA DIVISION
La DATA DIVISION describe todos los datos que se procesaran en el programa. Se divide en tres secciones: FILE SECTION Define la estructura de los archivos de datos. Los datos de la FILE SECTION no estarn disponibles para el programa hasta que se abran los archivos. WORKING-STORAGE SECTION
BelSolis

Pgina 5 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Define los datos que no son parte de los archivos. LINKAGE SECTION Define los datos que estarn disponibles en ESTE programa, provenientes de OTRO programa. Las secciones de DATA DIVISION son optativas, pero, las que estn presentes, debern presentarse en este orden. Dentro de la DATA DIVISION, los datos se describen segn el procedimiento de niveles. Los nmeros de nivel del 01 al 49 describen la jerarqua de los datos, entre mas alto el numero, menor es la jerarqua del dato. Algunos nmeros de nivel son especiales: Nivel 66 Debe contener la clusula RENAMES Nivel 77 Se usa para definir datos elementales (No estn subdivididos). Nivel 88 Se usa para establecer nombres-condicin asociados a la clusula VALUE. La descripcin de las reas de datos puede requerir de varias clusulas: DESCRIPCIN DE DATOS Numero de nivel Nombre de dato | [ FILLER ] [ clusula REDEFINES ] [ clusula BLANK WHEN ZERO ] [ clusula JUSTIFIED ] [ clusula OCCURS ] [ clusula PICTURE ] [ clusula SIGN ] [ clusula USAGE ] [ clusula VALUE ] Todas las descripciones de datos deben terminar con punto. Los datos que requieran nombre deben llevar un nombre de campo que no puede ser el mismo de una seccin o de un prrafo. Los datos que no requieran nombre pueden llevar la palabra FILLER o nada

CLUSULA PICTURE
Supongamos una estructura de datos como la siguiente: REGISTRO-EMPLEADO NOMBRE-EMPLEADO DATOS-EMPLEADO APELLIDOS NOMBRE CLAVE-EMPLEADO PUESTO-EMPL La clusula PICTURE se usa para definir el tipo y tamao de un dato elemental, o sea de un dato que no esta subdividido. 5 10 15 20 25 30 35 ....!....|....!....|....!....|....!.. 01 REGISTRO-EMPLEADO. 05 NOMBRE-EMPLEADO. 10 APELLIDO 10 NOMBRE 05 DATOS-EMPLEADO. 10 CLAVE-EMPLEADO 10 PUESTO-EMPL Observe que: Todas las descripciones terminan con un punto. El nivel 01 esta en la regin A.
BelSolis

/ /

60 65 70 72 ....|....!....|..

PICTURE X(20). PICTURE X(20). PICTURE X(18). PICTURE 9(08).

Pgina 6 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Solo los elementos de nivel mas bajo (datos elementales) tienen el descriptor de tamao (clusula PICTURE). Los nmeros de nivel no necesariamente deben ser consecutivos. La palabra PICTURE puede abreviarse PIC. Los parntesis indican repeticin de un carcter en la clusula; por ejemplo: PICTURE 9999999 y PICTURE 9(07) son equivalentes. La longitud mxima de un string de PICTURE es de 30 caracteres.

CLUSULA USAGE
Se utiliza para especificar el formato en el cual se almacenaran los datos, las especificaciones pueden ser: DISPLAY Es el Default, los datos se guardan en el formato en que se ven. DISPLAY-1 Para datos con representacin de doble byte (DBCS). INDEX Ocupan 4 bytes se usan para ndices en SEARCH. POINTER Ocupan 4 bytes, se usan para sealadores. PROCEDURE-POINTER 8 bytes. Para usarse en rutinas de recuperacin. BINARY Datos numricos para usarse en operaciones aritmticas PACKED-DECIMAL Guarda nmeros decimales hasta 18 dgitos COMPUTATIONAL Datos numricos para usarse en operaciones aritmticas COMPUTATIONAL-1 (COMP-1) Nm. punto flotante hasta 27 dgitos. 4 Bytes No lleva PIC COMPUTATIONAL-2 (COMP-2) Nm. punto flotante hasta 54 dgitos. 8 Bytes No lleva PIC COMPUTATIONAL-3 (COMP-3) Igual que PACKED-DECIMAL COMPUTATIONAL-4 (COMP-4) Datos numricos para operaciones aritmticas COMPUTATIONAL-5 (COMP-5) Datos numricos enteros de una palabra INTERNAMENTE LOS DATOS SE GUARDAN: DISPLAY Los datos se guardan en formato de carcter: Un carcter ocupa un byte (8 bits). COMPUTATIONAL-1 Los datos se guardan como valores de punto flotante en media palabra (4 Bytes) tambin se llama Single Precisin, sirve para nmeros de hasta 27 dgitos, el signo va en el primer bit del byte izquierdo, El tamao es fijo de media palabra. No se pone clusula PICTURE. COMPUTATIONAL-2 Los datos se guardan como valores de punto flotante en una palabra (8 Bytes) tambin se llama Double Precisin, sirve para nmeros de hasta 54 dgitos, el signo va en el primer bit del Byte izquierdo, el tamao es fijo de una palabra. No se pone clusula PICTURE. PACKED-DECIMAL o COMPUTATIONAL-3 Los datos se guardan en decimal empacado, o sea dos dgitos decimales en cada Byte, EL Byte de la derecha contiene un dgito y el signo del numero, el tamao es variable segn el numero. La clusula PIC indica el tamao, se puede poner punto virtual con V (P.ej. 9(05)V99) BINARY o COMPUTATIONAL o COMPUTATIONAL-4 Los datos se guardan en formato binario (media Palabra, una palabra, etc.) El bit de la izquierda contiene el signo. Media Palabra (2 Bytes) para nmeros de 1 a 4 dgitos. Una Palabra (4 Bytes) para nmeros de 5 a 9 dgitos. Doble Palabra (8 Bytes) para nmeros de 10 a 18 dgitos.

CLUSULA USAGE
Se utiliza para especificar el formato en el cual se almacenaran los datos.
BelSolis

Pgina 7 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

EJEMPLOS DE CLUSULA USAGE 5 10 15 20 25 30 35 40 45 50 55 60 65 7072 ....!....|....!....|....!....|....!....|....!....|....!....|....!....|.. 01 IVA. 05 IVA-GENERAL PIC 9(04) VALUE 15 USAGE COMP. 05 IVA-ESPECIAL PIC 9(04) VALUE 6 COMP. 05 IVA-CALCULADO COMP-1. 05 IVA-TOTAL COMP-2. 05 IVA-RETENIDO PIC S9(07)V99 VALUE +0 COMP-3. 05 IVA-PAGADO PIC S9(08)V99 VALUE +0 COMP-4. 01 REGIONES. 05 REGION-1 PIC X(10) VALUE CENTRO USAGE DISPLAY. O5 REGION-2 PIC X(10) VALUE NORTE. Observe que: La palabra USAGE es optativa USAGE DISPLAY es el default Los datos guardados COMP-1 y, COMP-2 se almacenan en un tamao fijo, no llevan clusula PICTURE Los datos guardados COMP-3 y COMP-4 se almacenan en un tamao variable.

CLUSULA VALUE
VALUE - Valor Se usa para especificar el valor inicial de un dato en la WORKING-STORAGE SECTION, si el valor inicial del dato no se especifica, el contenido del campo es impredecible. En FILE SECTION solo se usa VALUE para nombres-condicin. En LINKAGE SECTION solo se usa VALUE para nombres-condicin. La clusula VALUE es obligatoria para declarar nombres-condicin. Ejemplos de VALUE 5 10 15 20 25 30 35 40 45 50 55 60 65 7072 ....!....|....!....|....!....|....!....|....!....|....!....|....!....|.. 01 REGISTRO-ENCABEZADO PIC X(132) VALUE ALL =. 02 IVA. 04 IVA-GENERAL PIC 9(04) VALUE 15. 04 IVA-ESPECIAL PIC 9(04) VALUE 6. 02 ESTADO-CIVIL 88 CASADO 88 SOLTERO 88 DIVORCIADO PIC X(01). VALUE C. VALUE S. VALUE D.

02 COSTO. 04 PESOS PIC X(5). 04 FILLER PIC X(01) VALUE .. 04 CENTAVOS PIC X(02). 02 DATOS-DEPARTAMENTO. 04 DEPTO-1 PIC X(14) VALUE VTAS MENUDEO. 04 DEPTO-2 PIC X(28) VALUE VENTAS POR MAYOR EO Y CREDITO. Observe que: Los valores numricos deben estar dentro del rango de la clusula PICTURE
BelSolis

Pgina 8 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Las clusulas VALUE en los datos con nombres-condicin son obligatorias Las literales alfanumricas deben ser del tamao indicado por la clusula PICTURE, de otro modo, ocurrir un error de nivel E (truncacin).

REDEFINICIONES
La redefinicin permite asignar diferentes descripciones de datos a la misma rea.

Numero de nivel

nombre-dato-1

REDEFINES

nombre-dato-2

EJEMPLOS DE REDEFINES: 5 10 15 20 25 30 35 40 45 50 55 60 65 7072 ....!....|....!....|....!....|....!....|....!....|....!....|....!....|.. 05 AREA-1 PIC X(06). 05 AREA-2 REDEFINES AREA-1. 10 DATO-A PIC X(02). 10 DATO-B PIC 9(04). 05 AREA-3 REDEFINES AREA-1. 10 DATO-C PIC X(04). 10 DATO-D PIC 9(02). Observe que: Los nmeros de nivel de nombre-dato-1 y nombre-dato-2 son iguales. La entrada de redefinicin va inmediatamente despus de la definicin del rea, o sea, no se definen otras reas y despus se redefine una rea anterior. Los datos redefinidos no contienen la clusula VALUE (La primera definicin si puede llevar VALUE). Todas las definiciones de un rea estn siempre en vigencia, o sea, se puede utilizar cualquier definicin de los datos en un momento dado.

DEFINICIN DE ARCHIVOS
Los archivos que se usan en COBOL, se definen en el prrafo FILE-CONTROL de la ENVIRONMENT DIVISION. El prrafo FILE-CONTROL debe contener una entrada para cada archivo que se vaya a utilizar en el programa. Ejemplo de definicin de archivos: ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT ENTRADA ASSIGN TO SELECT SALIDA ASSIGN TO

EMPLEADOS. REPORTE.

Por cada definicin de archivos en el prrafo FILE-CONTROL de la ENVIRONMENT DIVISION, debe haber una entrada en la FILE SECTION de la DATA DIVISION DATA DIVISION. FILE SECTION. FD ENTRADA ... 01 RD-ENTRADA PIC X(80). FD SALIDA ... 01 RD-SALIDA PIC X(132). Los archivos en COBOL son conjuntos de datos organizados. Existen dos tipos bsicos de organizacin de archivos:
BelSolis

Pgina 9 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Organizacin secuencial (SEQUENTIAL); Los registros vienen secuencialmente o sea uno tras de otro, en el orden en que se guardaron en el archivo. Organizacin indexada (INDEXED); Los registros estn dentro de un archivo de datos, y se localizan por medio de una clave. FILE-CONTROL (Archivos Secuenciales) FILE-CONTROL. SELECT nombre de archivo ASSIGN TO nombre ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS nombre-dato . Observe que: Esta declaracin sirve para archivos secuenciales y archivos VSAM que se manejaran secuencialmente. El prrafo FILE-CONTROL asocia cada archivo con un DATASET externo. El nombre-archivo deber identificarse en la DATA DIVISION en la entrada FD o en la SD. EJEMPLO DE ARCHIVO SECUENCIAL: ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT ENTRADA ASSIGN TO EMPLEADOS ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WF-STATUS. Por cada archivo en FILE-CONTROL debe haber un FD en DATA DIVISION DATA DIVISION. FILE SECTION. FD ENTRADA RECORD CONTAINS RG-ENTRADA. 05 NUM-EMP 05 NOMBRE 05 APELLI 05 INICIA 05 DEPTO 05 SUELDO 05 FILLER

80. PIC PIC PIC PIC PIC PIC PIC 9(06). X(10). X(10). X(01). X(04). 9(05)V99. X(42).

FILE-CONTROL para archivos indexados. FILE-CONTROL. SELECT nombre-archivo ASSIGN TO nombre ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL \ RANDOM \ DYNAMIC RECORD KEY IS nombre-campo FILE STATUS IS nombre-campo2 Observe que: Un archivo indexado significa que la posicin de cada registro esta determinada por directorios o ndices mantenidos por el sistema y basados en Claves contenidas dentro del registro lgico. El acceso SEQUENTIAL de un archivo INDEXED significa que los registros se accesarn secuencialmente en orden ascendente segn su clave.
BelSolis

Pgina 10 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

El acceso RANDOM de un archivo INDEXED significa que los registros se accesarn en cualquier orden por medio de su clave. El acceso DYNAMIC de un archivo INDEXED significa que se pueden solicitar los registros del archivo en forma RANDOM o SEQUENTIAL, segn el formato de la operacin de entrada-salida. El prrafo FILE-CONTROL asocia cada archivo con un DATASET externo. El nombre-archivo deber identificarse en la DATA DIVISION en la entrada FD. Ejemplo de ARCHIVO INDEXADO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PERSONAL ASSIGN TO ARCHVSAM ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS NUM-EMP-V FILE STATUS IS WF-STATUS. Por cada archivo en FILE-CONTROL debe haber un FD en DATA DIVISION DATA DIVISION. FILE SECTION. FD PERSONAL RECORD CONTAINS RG-PERSONAL. 05 NUM-EMP-V 05 NOMBRE-V 05 APELLI-V 05 INICIA-V 05 DEPTO-V 05 SUELDO-V 05 FILLER

80. PIC PIC PIC PIC PIC PIC PIC 9(06). X(10). X(10). X(01). X(04). 9(05)V99. X(42).

FILE SECTION La FILE SECTION es parte de la DATA DIVISION, se usa para definir los archivos y la estructura de sus registros. Cada archivo del programa se describe con una definicin FD en la FILE SECTION. Por Ejemplo: DATA DIVISION. FILE SECTION. FD PERSONAL RECORD CONTAINS RECORDING MODE 01 RG-PERSONAL. 05 NUM-EMP-C 05 NOMBRE-C 05 APELLI-C 05 INICIA-C 05 DEPTO-C 05 SUELDO-C 05 FILLER 01 RG-VENTAS. 05 NUM-EMP-V 05 VENDEDOR 05 FECHA 05 FILLER Observe que:
BelSolis

80 CHARACTERS F. PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC 9(06). X(10). X(10). X(01). X(04). 9(05)V99. X(42). 9(06). X(21). X(10). X(43).

Pgina 11 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Cada archivo debe tener un nombre nico en el programa. Puede haber varias descripciones de registro para un archivo, que funcionan como una redefinicin del registro. La clusula RECORDING MODE es optativa.

PROCEDURE DIVISION
La PROCEDURE DIVISION es la cuarta divisin de un programa COBOL, y se utiliza para indicar y describir las instrucciones que ejecutara la aplicacin. Ejemplo: escribir la PROCEDURE DIVISION del programa BE001
*PROCEDURE DIVISION. * ********** ********** *** *** *** RUTINA DE CONTROL *** *** *** ********** ********** * 000-CONTROL. NOMBRE DEL PARRAFO PERFORM 005-INICIAL PERFORM 050-PRINCIPAL UNTIL WS-FIN-PROCESO PERFORM 900-FINAL STOP RUN. FINAL DEL PARRAFO * ********** ********** *** *** *** RUTINA INICIAL *** *** *** ********** ********** * 005-INICIAL. NOMBRE DEL PARRAFO PERFORM 010-INICIA-CIFRAS PERFORM 020-APERTURA-ARCHIVOS PERFORM 500-LECTURA-ENTRADA. FINAL DEL PARRAFO

Observe que: La PROCEDURE DIVISION esta formada por operaciones que se ejecutaran segn la lgica del diseo de la aplicacin. Generalmente las instrucciones se agrupan en prrafos. Un prrafo empieza con nombre de prrafo que se escribe en el margen A y termina con un punto. El prrafo termina con la ultima instruccin que a su vez lleva punto. Las instrucciones como PERFORM,MOVE, OPEN se escriben en el margen B (A partir de la col 11)

OPEN
OPEN INPUT \ OUTPUT \ I-O nombre de archivo Para utilizar un archivo definido en la DATA DIVISION, se escriben las instrucciones necesarias en la PROCEDURE DIVISION. Antes de leer o de escribir en un archivo, debe usarse la declaracin OPEN (OPEN Statement). Observe que: La declaracin OPEN puede tener 3 frases INPUT, OUTPUT, I-O. Un archivo abierto INPUT debe usarse para leer de el Un archivo abierto OUTPUT debe usarse para escribir en l Un archivo abierto I-O puede usarse para escribir en el o para leer sus datos.

BelSolis

Pgina 12 de 46

MANUAL DE USUARIO Ejemplo de OPEN ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT ENTRADA ASSIGN TO SELECT SALIDA ASSIGN TO SELECT PERSONAL ASSIGN TO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

EMPLEADOS. REPORTE. ARCHVSAM

Por cada definicin de archivos en el prrafo FILE-CONTROL de la ENVIRONMENT DIVISION, debe haber una entrada en la FILE SECTION de la DATA DIVISION

DATA DIVISION.
FILE SECTION. FD ENTRADA . . . 01 RD-ENTRADA PIC X(80). FD SALIDA . . . 01 RD-SALIDA PIC X(132). FD PERSONAL . . . 01 RD-PERSONAL PIC X(80). Cada archivo debe abrirse adecuadamente antes de usarlo en la PROCEDURE DIVISION. PROCEDURE DIVISION. OPEN INPUT ENTRADA OPEN OUTPUT SALIDA OPEN I-O PERSONAL

CLOSE (Cerrar un archivo)


CLOSE (CLOSE Statement). CLOSE nombre del archivo Observe que: CLOSE termina con el proceso de los archivos. Un archivo cerrado no puede leerse ni se puede escribir en l. CLOSE solo opera con archivos previamente abiertos con OPEN. Ejemplos de CLOSE PROCEDURE DIVISION. CLOSE ENTRADA CLOSE SALIDA CLOSE PERSONAL

Lectura usando READ para un archivo SEQUENTIAL


READ nombre del archivo [ NEXT ] [ INTO nombre de registro de WS
BelSolis

] Pgina 13 de 46

MANUAL DE USUARIO [ [ [ AT END ... NOT AT END ..... END-READ

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

] ] ]

Observe que: Para un acceso SEQUENTIAL, la declaracin READ toma el siguiente registro del archivo y pone los datos en el registro FD. La frase INTO copia los datos del registro FD y los pone en el rea indicada, Ejemplo de READ con archivo SEQUENTIAL. PROCEDURE DIVISION. OPEN INPUT ENTRADA OPEN OUTPUT SALIDA OPEN I-O PERSONAL . . . READ ENTRADA IF WF-STATUS = 0 THEN MOVE SI LEIDO TO WL-MENSAJE END-IF IF WF-STATUS = 10 THEN MOVE FIN DE ARCHIVO TO WL-MENSAJE END-IF Observe que: Antes de ejecutar la declaracin READ, se debe abrir el archivo para INPUT Al terminar la ejecucin de la declaracin READ, se devuelve un cdigo de respuesta en la variable declarada FILE STATUS en este caso WF-STATUS el cdigo 0 (cero) significa operacin terminada correctamente el cdigo 10 significa Final de archivo Lectura usando READ para un archivo INDEXED READ nombre del archivo [ NEXT ] [ INTO nombre de registro de WS [ KEY IS nombre de rea [ INVALID KEY ... [ NOT INVALID KEY ... [ END-READ

] ] ] ] ]

Observe que: Para un acceso SEQUENTIAL, la declaracin READ toma el siguiente registro del archivo y pone los datos en el registro FD. Para un acceso RANDOM, previamente a READ, se pone la clave buscada en el rea declarada RECORD KEY, entonces, si se localiza la clave, READ toma el registro solicitado y pone los datos en el registro FD. Para un acceso DYNAMIC, previamente a READ, se debe incluir la declaracin START con objeto de posicionar la lectura. En este caso, la declaracin READ deber contener la frase NEXT Ejemplo de READ con archivo INDEXED y acceso RANDOM PROCEDURE DIVISION. OPEN I-O PERSONAL . . . MOVE WX-CLAVE TO NUM-EMP-V READ PERSONAL IF WF-STATUS = 0 THEN
BelSolis

Pgina 14 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

MOVE SI LEIDO TO WL-MENSAJE END-IF IF WF-STATUS = 23 THEN MOVE REG NO LOCALIZADO TO WL-MENSAJE END-IF Observe que: Antes de ejecutar la declaracin READ, se debe abrir el archivo INDEXED como INPUT o I-O. Antes de ejecutar la declaracin READ se debe poner la clave en el rea declarada RECORD KEY si se usa acceso RANDOM Al terminar la ejecucin de la declaracin READ, se devuelve un cdigo de respuesta en la variable declarada FILE STATUS en este caso WF-STATUS el cdigo 0 (cero) significa operacin terminada correctamente el cdigo 23 significa Registro no localizado Lectura usando STARTREAD para un archivo INDEXED START nombre del archivo [ KEY IS EQUAL TO nombre de rea ] [ INVALID KEY ... ] [ NOT INVALID KEY ... ] [ END-START ] Observe que: Para un acceso DYNAMIC, previamente a READ, se debe incluir la declaracin START con objeto de posicionar la lectura. En este caso, la declaracin READ deber contener la frase NEXT Ejemplo de READ con archivo INDEXED y acceso DYNAMIC ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PERSONAL ASSIGN TO ARCHVSAM ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS NUM-EMP-V FILE STATUS IS WF-STATUS. . . . PROCEDURE DIVISION. OPEN I-O PERSONAL . . . MOVE WX-CLAVE TO NUM-EMP-V START PERSONAL IF WF-STATUS = 0 THEN READ PERSONAL NEXT ELSE IF WF-STATUS = 23 THEN MOVE INICIO NO LOCALIZADO TO END-IF END-IF . . . READ PERSONAL NEXT

WL-MENSAJE

Observe que: Antes de ejecutar la declaracin READ, se debe abrir el archivo INDEXED como INPUT o I-O.
BelSolis

Pgina 15 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Antes de ejecutar la Primera lectura, se debe posicionar el inicio de la lectura con la declaracin START poniendo la clave en el rea declarada RECORD KEY. Las siguientes lecturas no requieren START. Al terminar la ejecucin de la declaracin START, se devuelve un cdigo de respuesta en la variable declarada FILE STATUS en este caso WF-STATUS el cdigo 0 (cero) significa operacin terminada correctamente el cdigo 23 significa Registro no localizado La declaracin READ debe incluir la frase NEXT.

WRITE para un archivo SEQUENTIAL WRITE nombre del registro FD [ FROM nombre de rea [ AFTER ADVANCING xxx LINES [ AT END-OF-PAGE ..... [ NOT AT END-OF-PAGE [ END-WRITE

] ] ] ] ]

Observe que: La declaracin WRITE inserta nuevos registros dentro del archivo SEQUENTIAL. La declaracin WRITE utiliza el nombre del registro FD y NO EL NOMBRE DEL ARCHIVO. El registro FD debe estar declarado en la DATA DIVISION. Ejemplo de WRITE con archivo SEQUENTIAL. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SALIDA ASSIGN TO REPORTE ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WF-STATUS. . . DATA DIVISION. FILE SECTION. FD SALIDA RECORD CONTAINS 132 CHARACTERS 01 RD-SALIDA PIC X(132). . . PROCEDURE DIVISION. OPEN INPUT ENTRADA OPEN OUTPUT SALIDA . . MOVE WL-DETALLE TO RD-SALIDA WRITE RD-SALIDA IF WF-STATUS = 0 THEN MOVE SI GRABADO TO WL-MENSAJE ELSE MOVE ERROR EN ESCRITURA TO WL-MENSAJE END-IF Observe que: La declaracin WRITE escribe en el archivo, el contenido del registro FD. Antes de ejecutar la declaracin WRITE, se mueve al registro FD la informacin que se desea escribir. WRITE para un archivo INDEXED
BelSolis

Pgina 16 de 46

MANUAL DE USUARIO WRITE nombre del registro [ FROM nombre de rea [ INVALID KEY [ NOT INVALID KEY [ END-WRITE FD

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

] ] ] ]

Observe que: La declaracin WRITE inserta nuevos registros en el archivo INDEXED La declaracin WRITE utiliza el nombre del registro FD y NO EL NOMBRE DEL ARCHIVO. El registro FD debe estar declarado en la DATA DIVISION. El archivo debe estar abierto OUTPUT o I-O
Ejemplo de WRITE con archivo INDEXED. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PERSONAL ASSIGN TO ARCHVSAM ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS NUM-EMP-V FILE STATUS IS WF-STATUS. . . DATA DIVISION. FILE SECTION. FD PERSONAL RECORD CONTAINS 80 CHARACTERS 01 RD-PERSONAL PIC X(80). . . PROCEDURE DIVISION. OPEN OUTPUT PERSONAL . . MOVE WL-DETALLE TO RD-SALIDA WRITE RD-SALIDA IF WF-STATUS = 0 THEN MOVE SI GRABADO TO WL-MENSAJE ELSE MOVE ERROR EN ESCRITURA TO WL-MENSAJE END-IF

Observe que: La declaracin WRITE escribe en el archivo, el contenido del registro FD Antes de ejecutar la declaracin WRITE, se mueve al registro FD la informacin que se va a escribir REWRITE (Solo se usa con archivos INDEXED) REWRITE nombre del registro FD [ FROM nombre de rea ] [ INVALID KEY ] [ NOT INVALID KEY ] [ END-WRITE ] Ver que la declaracin REWRITE modifica los registros existentes en el archivo INDEXED Adems, el archivo debe estar abierto I-O

BelSolis

Pgina 17 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplo de REWRITE con archivo INDEXED. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PERSONAL ASSIGN TO ARCHVSAM ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS NUM-EMP-V FILE STATUS IS WF-STATUS. . . DATA DIVISION. FILE SECTION. FD PERSONAL RECORD CONTAINS 80 CHARACTERS 01 RD-PERSONAL. 05 NUM-EMP-V PIC 9(06). 05 DAT-EMP-V PIC X(74). . . PROCEDURE DIVISION. OPEN I-O PERSONAL . . MOVE WL-DETALLE TO RD-PERSONAL MOVE WC-CLAVE TO NUM-EMP-V REWRITE RD-PERSONAL IF WF-STATUS = 0 THEN MOVE REG MODIFICADO TO WL-MENSAJE ELSE IF WF-STATUS = 23 THEN MOVE CLAVE NO LOCALIZADA TO WL-MENSAJE ELSE MOVE ERROR EN ESCRITURA TO WL-MENSAJE END-IF END-IF

Observe que: Antes de ejecutar la declaracin REWRITE, se mueve al Area declarada RECORD KEY, la clave del registro que se va a modificar El status del archivo 23 indica que el registro no fue localizado. DELETE Para Archivos INDEXED DELETE nombre del Archivo [ INVALID KEY [ NOT INVALID KEY [ END-DELETE

] ] ]

La declaracin DELETE elimina (Borra) registros existentes en archivos INDEXED o RELATIVE El archivo debe estar abierto I-O Antes de ejecutar la declaracin DELETE, se mueve al Area declarada RECORD KEY, la clave del registro que se va a Borrar.

BelSolis

Pgina 18 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplo de DELETE con un archivo INDEXED. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PERSONAL ASSIGN TO ARCHVSAM ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS NUM-EMP-V FILE STATUS IS WF-STATUS. . . . DATA DIVISION. FILE SECTION. FD PERSONAL RECORD CONTAINS 80 CHARACTERS 01 RD-PERSONAL. 05 NUM-EMP-V PIC 9(06). 05 DAT-EMP-V PIC X(74). . . . PROCEDURE DIVISION. OPEN I-O PERSONAL . . . MOVE WC-CLAVE TO NUM-EMP-V READ PERSONAL IF WF-STATUS = 0 THEN DELETE PERSONAL ELSE IF WF-STATUS = 23 THEN MOVE CLAVE NO LOCALIZADA TO WL-MENSAJE ELSE MOVE ERROR EN OPERACIN TO WL-MENSAJE END-IF END-IF Observe que: Generalmente se usa READ para localizar el registro antes de borrar. El status del archivo 23 indica que el registro no fue localizado. Una vez eliminado el registro, su clave queda libre y, puede reutilizarse.

Declaracin MOVE
MOVE MOVE Identificador-1 Literal TO Identificador-2 . . . TO Identificador-2 . . .

Observe que: La declaracin MOVE, copia los datos de un rea a otra u otras reas de almacenamiento Si se usa MOVE con varias reas como receptoras, cada rea recibe una copia del rea original. No se puede usar move para pasar datos a un rea usage INDEX. Ejemplos de MOVE: PROCEDURE DIVISION. MOVE WL-DETALLE MOVE WC-CLAVE MOVE SPACES MOVE WX-ENTERO MOVE ALL *
BelSolis

TO TO TO TO TO

RD-PERSONAL NUM-EMP-V WX-MJE-1 WX-MJE-2 WX-TEXTO WX-MJE-4

WX-MJE-3

Pgina 19 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

En caso de usar campos numricos: WORKING-STORAGE SECTION. 01 SALARIO-DE-DISCO PIC 9999V99 COMP-3. 01 SALARIO-NORMAL PIC 9999.99. 01 SALARIO-EDITADO PIC ZZ,ZZZ.99. PROCEDURE DIVISION. MOVE 1234.56 TO SALARIO-DE-DISCO DISPLAY SALARIO-DE-DISCO MOVE 1234.56 TO SALARIO-NORMAL DISPLAY SALARIO-NORMAL MOVE SALARIO-DE-DISCO TO SALARIO-EDITADO DISPLAY SALARIO-EDITADO _________________________________________________ 123456 1234.56 1,234.56 Observe que: Los campos numricos pueden copiarse a otro campo numrico. El punto virtual (PIC 9(05)V99) se toma en cuenta para clculos, pero no se escribe. Un numero entero, puede copiarse (MOVE) a un campo de texto Declaracin ADD ADD IdentificadorS-1 iIdentifcadorS-2 ... TO IdentificadorR-1 [ROUNDED] IdentificadorR-2 . . . Observe que: Todos los identificadores o literales antes de la palabra TO se suman, y el resultado se suma a cada uno de los identificadores despus de la palabra TO. La palabra ROUNDED indica que el resultado se redondeara al entero ms prximo. Ejemplos de ADD: ADD 12 14 25 DISPLAY SUMA TO SUMA

ADD SALARIO COMISION TO SUELDO-TOTAL DISPLAY SUELDO-TOTAL _____________________________________________ 00051 12500.50 Existe otro formato de ADD ADD IdentificadorS-1 IdentifcadorS-2 ... [TO] GIVING IdentificadorR-1 [ROUNDED] IdentificadorR-2 IdentificadorS-n . . .

Todos los identificadores o literales antes de la palabra GIVING, se suman y la suma reemplaza a cada uno de los identificadores despus de la palabra GIVING. La palabra ROUNDED indica que el resultado se redondeara al entero mas prximo. Ejemplos de ADD: ADD ADD 12 14 25 TO SUMA GIVING TOTAL SALARIO COMISION GIVING SUELDO-TOTAL

ADD WS-VENTAS1 WS-VENTAS2 GIVING TOTAL-A TOTAL-B DISPLAY TOTAL-A TOTAL-B -------------------------------------------------------------14256.80 14256.80

BelSolis

Pgina 20 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Declaracin SUBTRACT SUBTRACT IdentificadorS-1 iIdentifcadorS-2 ... FROM IdentificadorR-1 [ROUNDED] IdentificadorR-2

...

Observe que: Todos los identificadores o literales antes de la palabra FROM se suman, y despus el resultado se resta de cada uno de los identificadores despus de la palabra FROM. La palabra ROUNDED indica que el resultado se redondeara al entero ms prximo. Ejemplos de SUBTRACT: MOVE 70 SUBTRACT 12 DISPLAY SUMA TO 14 SUMA 25 FROM

SUMA

SUBTRACT IMPUESTO1 IMPUESTO2 FROM SUELDO DISPLAY SUELDO __________________________________________________ 0019 11300.00 Existe otro formato de SUBTRACT SUBTRACT IdentificadorS-1 IdentifcadorS-2 ..FROM IdentificadorS-n GIVING IdentificadorR-1 [ROUNDED] IdentificadorR-2 . . . Todos los identificadores o literales antes de la palabra GIVING, se suman y la suma resta del identificador despus de la palabra FROM, a continuacin el resultado reemplaza a cada uno de los identificadores despus de la palabra GIVING. La palabra ROUNDED indica que el resultado se redondeara al entero ms prximo. Ejemplos de SUBTRACT: SUBTRACT 12 14 25 FROM SUMA GIVING TOTAL SUBTRACT SALARIO COMISION FROM INGRESOS GIVING

PAGO

SUBTRACT WS-VENTA1 WS-VENTA2 FROM VENTA-TOTAL GIVING TOTAL-A TOTAL-B DISPLAY TOTAL-A TOTAL-B _________________________________________________________________________ 12256.80 12256.80

Declaracin MULTIPLY
MULTIPLY IdentificadorM-1 BY IdentifcadorM-2 [ROUNDED] IdentificadorR-1 IdentificadorR-2 Observe que: El primer identificador o literal se multiplica por IdentificadorM-2, el producto reemplaza a cada uno de los identificadores IdentificadorR-1, IdentificadorR-2,l etc. La palabra ROUNDED indica que el resultado se redondeara al entero mas prximo. Ejemplos de MULTIPLY: MULTIPLY 12 BY DISPLAY PRODUCTO 14 PRODUCTO

MULTIPLY COSTO BY IVA IMPUESTO DISPLAY IMPUESTO ____________________________________________ 00168 150.00


BelSolis

Pgina 21 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Existe otro formato de MULTIPLY MULTIPLY IdentificadorM-1 BY IdentifcadorM-2 GIVING IdentificadorR-1 [ROUNDED] IdentificadorR-2

. . .

El valor del primer Identificador o literal se multiplica por IdentificadorM-2 y a continuacin el resultado reemplaza a cada uno de los identificadores despus de la palabra GIVING. La palabra ROUNDED indica que el resultado se redondeara al entero mas prximo. Ejemplos de MULTIPLY: MULTIPLY 12 BY 14 GIVING TOTAL MULTIPLY SALARIO BY COMISION GIVING MULTIPLY VENTA BY 1.15 GIVING

PAGO

PAGO-IVA ROUNDED

MULTIPLY WS-VENT1 BY FACTOR GIVING TOTAL-A TOTAL-B DISPLAY TOTAL-A TOTAL-B ____________________________________________________________ 158000.00 158000.00 Declaracin DIVIDE DIVIDE IdentificadorD-1 INTO IdentifcadorD-2 [ROUNDED] IdentificadorC-1 IdentificadorC-2 Observe que: El valor del primer identificador o literal se divide entre el IdentificadorD-2, el cociente reemplaza a cada uno de los identificadores, IdentificadorC-1, IdentificadorC-2,l etc. La palabra ROUNDED indica que el resultado se redondeara al entero mas prximo. Ejemplos de DIVIDE: DIVIDE 12 INTO 6 COCIENTE DISPLAY COCIENTE DIVIDE COSTO INTO CANTIDAD UNITARIO DISPLAY UNITARIO _____________________________________________ 0002 14.50 Existe otro formato de DIVIDE

DIVIDE IdentificadorD-1 INTO GIVING IdentificadorC-1 [ROUNDED] IdentificadorC-2 . . .

IdentifcadorD-2

El valor del primer Identificador o literal se divide entre el IdentificadorD-2 y a continuacin el resultado reemplaza a cada uno de los identificadores despus de la palabra GIVING. La palabra ROUNDED indica que el resultado se redondeara al entero ms prximo. Ejemplos de DIVIDE: DIVIDE 120 INTO 6 GIVING TOTAL DIVIDE SALARIO INTO DIAS GIVING PAGO DIVIDE WS-VENT1 INTO FACTOR GIVING TOTAL-A TOTAL-B DISPLAY TOTAL-A TOTAL-B ____________________________________________________________ 158000.00 158000.00 Existe otro formato de DIVIDE DIVIDE IdentificadorD-1 INTO
BelSolis

IdentifcadorD-2 Pgina 22 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

GIVING IdentificadorC-1 [ROUNDED] REMAINDER IdentificadorR-1 El valor del primer Identificador o literal se divide entre el IdentificadorD-2 y a continuacin el resultado reemplaza al identificador despus de la palabra GIVING. Pone el residuo en IdentificadorR-1 Declaracin COMPUTE COMPUTE IdentificadorR-1 [ROUNDED] = Expresin Aritmtica IdentifcadorR-2 ...

Observe que: IdentificadorR-1, IdentificadorR-2, etc. Pueden ser campos numricos o campos numricos Editados. Primero se calcula el valor de la expresin aritmtica y despus el resultado reemplaza al valor de cada uno de los Identificadores antes de IGUAL. En lugar del smbolo IGUAL se puede utilizar la palabra EQUAL. Los operadores Aritmticos son: + (suma) (resta) * (multiplicacin) / (divisin) ** (exponenciacin) La palabra ROUNDED indica que el resultado se redondeara al entero ms prximo. Ejemplos de COMPUTE: COMPUTE VALOR-TOTAL DISPLAY VALOR-TOTAL ROUNDED = COSTO * 1.15

COMPUTE COSTO EQUAL CANTIDAD - DESCUENTO END-COMPUTE DISPLAY COSTO ______________________________________________________ 1800 14.50

Declaracin SET TO TRUE


SET IdentificadorC-1 TO TRUE IdentifcadorC-2 ... A veces se requiere poner directamente en TRUE una variable de condicin, la declaracin SET TO TRUE pone en VERDADERO una o varas variables de condicin. IdentificadorC-1, IdentificadorC-2, etc. Deben ser nombres de condicin. La declaracin SET pone en TRUE cada uno de los Identificadores antes de la palabra TO. Ejemplo de SET TO TRUE: WORKING-STORAGE SECTION. 01 DATOS. 05 ESTADO-CIVIL PIC X(01) VALUE SPACE. 88 CASADO VALUE C. las variables de condicin 88 SOLTERO VALUE S. Se definen a nivel 88 88 DIVORCIADO VALUE D.

BelSolis

Pgina 23 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Al definir las variables anteriores, todas las variables de condicin tienen valor FALSE pues ESTADO-CIVIL tiene espacios y no coincide con ninguna de ellas. . . . PROCEDURE DIVISION. SET SOLTERO TO . . . SET CASADO TO . . . SET DIVORCIADO TO

TRUE

TRUE

TRUE

Observe que: MOVE S TO ESTADO-CIVIL equivale a SET SOLTERO TO TRUE MOVE C TO ESTADO-CIVIL equivale a SET CASADO TO TRUE MOVE D TO ESTADO-CIVIL equivale a SET DIVORCIADO TO TRUE Al poner en TRUE alguna de las variables de condicin, se ponen en FALSE las otras variables asociadas. SET nicamente pone en TRUE el nombre de condicin, no puede poner en FALSE Declaracin PERFORM La declaracin PERFORM se utiliza para transferir el control del programa hacia uno o ms procedimientos y despus, regresar el control a la siguiente declaracin ejecutable. PROCEDURE DIVISION. SET SOLTERO TO TRUE . . MOVE VENTAS TO INGRESOS . . PERFORM 050-IMPUESTOS _________________ 050-IMPUESTOS MULTIPLY INGRESOS BY1.15 GIVIN IVA ADD IVA TO SUMA 050-FIN IMPUESTOS _________________ DISPLAY SUMA . . STOP RUN Hay cuatro formatos de PERFORM: PERFORM Bsico. PERFORM con la Frase TIMES. PERFORM con la Frase UNTIL. PERFORM con la Frase VARYING. PERFORM Bsico PERFORM Nombre de Procedimiento [THRU Nombre de Procedimiento]
BelSolis

Pgina 24 de 46

MANUAL DE USUARIO PERFORM Instruccin1 Instruccin2 ......

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

END-PERFORM Observe que: El procedimiento indicado por el PERFORM Bsico, se ejecuta solo una vez, y despus el control pasa a la siguiente declaracin ejecutable. En el caso de PERFORM Instrucciones, el grupo de Instrucciones debe terminar con la palabra END-PERFORM. Ejemplo de PERFORM nombre de Prrafo. PROCEDURE DIVISION. PERFORM 500-LEE-ENTRADA THRU 500-LEE-ENTRADA-FIN PERFORM 060-CALCULA-COMISION MOVE RG-ENTRADA TO RG-SALIDA . . 500-LEE-ENTRADA. READ ENTRADA . . 500-LEE-ENTRADA-FIN ESTA ETIQUETA INDICA EL FIN DEL PROCEDIMENTO. 060-CALCULA-COMISION. ADD COMISION TO SUELDO. EL PARRAFO TERMINA CON UN PUNTO . . Ejemplo de PERFORM en LINEA ( in Line) PROCEDURE DIVISION. PERFORM MOVE 1.15 TO IVA COMPUTE TOTAL = COSTO * IVA ADD TOTAL TO COSTO END-PERFORM PERFORM Times PERFORM Nombre de Procedimiento [THRU Nombre de Procedimiento] Numero TIMES PERFORM Numero TIMES Instruccin1 Instruccin2 ...... END-PERFORM Observe que: El procedimiento indicado por el PERFORM TIMES, se ejecuta el nmero de veces especificado por Numero y al terminar, el control pasa a la siguiente instruccin o declaracin ejecutable. El nmero debe de ser un Entero positivo, si es cero o negativo, el control pasa a la siguiente instruccin. Ejemplo de PERFORM nombre de Prrafo. PROCEDURE DIVISION. PERFORM 500-LEE-ENTRADA THRU 500-LEE-ENTRADA-FIN . . .
BelSolis

10

TIMES

Pgina 25 de 46

MANUAL DE USUARIO 500-LEE-ENTRADA. READ ENTRADA . . . 500-LEE-ENTRADA-FIN Ejemplo de PERFORM en LINEA ( in Line) PROCEDURE DIVISION. PERFORM 3 TIMES MOVE 1.15 COMPUTE TOTAL = ADD TOTAL END-PERFORM

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

TO IVA COSTO * IVA TO COSTO

PERFORM UNTIL PERFORM Nombre de Procedimiento [THRU Nombre de Procedimiento] UNTIL Condicin PERFORM UNTIL Condicin Instruccin1 Instruccin2 ...... END-PERFORM Observe que: Si la condicin es cierta en el momento en el que empieza el PERFORM, el procedimiento no se Ejecuta, y pasa a la siguiente Instruccin. Si se requiere que se ejecute el procedimiento aunque sea solo una vez, se debe incluir la Frase TEST AFTER antes de UNTIL. Ejemplo de PERFORM UNTIL PROCEDURE DIVISION. PERFORM 500-LEE-ENTRADA THRU 500-LEE-ENTRADA-FIN . . 500-LEE-ENTRADA. READ ENTRADA . . 500-LEE-ENTRADA-FIN

UNTIL

WF-STATUS = 23

Ejemplo de PERFORM en LINEA ( in Line) PROCEDURE DIVISION. PERFORM TEST AFTER UNTIL COSTO > PRESUPUESTO MOVE 1.15 TO IVA COMPUTE TOTAL = COSTO * IVA ADD TOTAL TO COSTO END-PERFORM Observe que: En el caso de TEST AFTER, primero se ejecuta el proceso y despus se prueba la condicin. Si no se indica TEST AFTER, primero se prueba la condicin, y si es cierta, no se ejecuta el procedimiento. PERFORM VARYING PERFORM Nombre de Procedimiento [THRU Nombre de Procedimiento] VARYING Identificador-1
BelSolis

Pgina 26 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

FROM Valor inicial BY Incremento UNTIL Condicin PERFORM VARYING Identificador-1 FROM Valor inicial BY Incremento UNTIL Condicin Instruccin1 Instruccin2 ...... END-PERFORM Observe que: El procedimiento se ejecuta con el valor inicial del Identificador-1 la primera vez, despus se incremente (o disminuye) el valor de Identificador-1 segn incremento y se ejecuta la siguiente vez, hasta que se cumpla la condicin. Ejemplos de PERFORM VARYING.
PROCEDURE DIVISION. PERFORM 070-CUEMTA VARYING WI-SUMA FROM 1 BY 1 UNTIL WI-SUMA > 10 . . . 070-CUENTA. DISPLAY WI-SUMA . . . 070-CUENTA-FIN __________________________________________________________________ 1 2 3 4 5 6 7 8 9 10

PERFORM VARYING Ejemplo de SORT de BURBUJA.


IDENTIFICATION DIVISION. PROGRAM-ID BURBUJA. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 DESORDEN. 05 FILLER PIC X(12) VALUE '04ABRIL '. 05 FILLER PIC X(12) VALUE '06JUNIO '. 05 FILLER PIC X(12) VALUE '01ENERO '. 05 FILLER PIC X(12) VALUE '05MAYO '. 05 FILLER PIC X(12) VALUE '07JULIO '. 05 FILLER PIC X(12) VALUE '09SEPTIEMBRE'. 05 FILLER PIC X(12) VALUE '08AGOSTO '. 05 FILLER PIC X(12) VALUE '02FEBRERO '. 05 FILLER PIC X(12) VALUE '10OCTUBRE '. 05 FILLER PIC X(12) VALUE '12DICIEMBRE '. 05 FILLER PIC X(12) VALUE '03MARZO '. 05 FILLER PIC X(12) VALUE '11NOVIEMBRE '. 01 TABLA REDEFINES DESORDEN. 05 WT-MESES OCCURS 12 TIMES. 10 NUMERO PIC 9(02). 10 NOMBRE PIC X(10). 01 INDICES. 05 WI-I PIC S9(04) COMP. 05 WI-J PIC S9(04) COMP. 01 AUXILIARES. 05 WX-TEMPORAL PIC X(12) VALUE SPACES.

BelSolis

Pgina 27 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

PROCEDURE DIVISION. PERFORM VARYING WI-I FROM 1 BY 1 UNTIL WI-I > 12 PERFORM VARYING WI-J FROM WI-I BY 1 UNTIL WI-J > 12 IF NUMERO(WI-I) > NUMERO(WI-J) THEN MOVE WT-MESES(WI-I) TO WX-TEMPORAL MOVE WT-MESES(WI-J) TO WT-MESES(WI-I) MOVE WX-TEMPORAL TO WT-MESES(WI-J) END-IF END-PERFORM END-PERFORM. PERFORM VARYING WI-I FROM 1 BY 1 UNTIL WI-I > 12 DISPLAY WT-MESES(WI-I) END-PERFORM. STOP RUN.

Declaracin: IF
IF Condicin [THEN] Instruccin .... END-IF IF Condicin [THEN] Instruccin .... ELSE Instruccin .... END-IF

Observe que: Si la condicin es CIERTA, se ejecutan las instrucciones despus de la condicin. Si la condicin es FALSA se ejecutan las instrucciones despus de la palabra ELSE Si no hay ELSE y la condicin es FALSA se ejecutan las instrucciones despus de END-IF La palabra THEN es optativa. Ejemplo de IF sin ELSE
PROCEDURE DIVISION. IF WS-SUELDO IS NOT NUMERIC THEN MOVE ERROR EN SUELDO TO WL-MENSAJE WRITE RD-SALIDA FROM WL-MENSAJE END-IF * siguientes instrucciones

Ejemplo de IF con ELSE

PERFORM 500-LEE-ENTRADA. IF WF-STATUS = 0 MOVE WX-DATOS TO WX-PROCESO SET WS-LEIDO TO TRUE ELSE SET WS-ERROR TO TRUE MOVE ERROR EN LECTURA TO END-IF * siguientes instrucciones

WL-MENSAJE

Declaracin: CONTINUE CONTINUE Observe que: CONTINUE no ejecuta ninguna operacin No requiere de parmetros ni de operandos. Se usa para especificar ninguna operacin cuando es obligatoria una instruccin ejecutable. Ejemplos de CONTINUE:
IF WC-VENTAS >= WX-ANTERIOR THEN CONTINUE ELSE MOVE NO SUPERO ANTERIOR TO WL-MENSAJE MOVE 0 TO WX-COMISION

BelSolis

Pgina 28 de 46

MANUAL DE USUARIO
END-IF Siguiente instruccin

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Otro Ejemplo:

IF VENTAS-FRONTERA THEN IF WS-IVA-ESPECIAL THEN COMPUTE PAGO = COSTO * 1.06 MOVE PAGO ELSE CONTINUE END-IF Siguiente instruccin ELSE COMPUTE PAGO = COSTO * 1.15 MOVE PAGO TO WX-PAGO-EDITADO END-IF

TO WX-PAGO-EDITADO

Declaracin EVALUATE (1) Se utiliza para programar de una manera similar al CASE de programacin Estructurada. EVALUATE se usa como una alternativa de IF anidados. Formato 1. EVALUATE Identificador WHEN Valor-1 Instruccin ..... [WHEN OTHER Instruccin END-EVALUATE

.... ]

Se ve que cundo el valor de Identificador coincide con Valor-1, se ejecutan las instrucciones contenidas en la clusula WHEN Ejemplo de EVALUATE Bsico. EVALUATE SALARIO WHEN 3000 MOVE 0.18 WHEN 4000 MOVE 0.22 WHEN 5000 MOVE 0.30 WHEN OTHER MOVE 0.36 END-EVALUATE Declaracin EVALUATE EVALUATE Expresin WHEN

TO TO TO TO

ISR ISR ISR ISR (2)

Frase-1 Instruccin ..... [WHEN OTHER Instruccin END-EVALUATE

.... ]

Se observa que cundo el valor de la Expresin coincide con la Frase-1, se ejecutan las instrucciones contenidas en la clusula WHEN Ejemplos de EVALUATE Expresin.
a) EVALUATE WHEN EDAD > 20 TRUE MOVE MINIMO WHEN FALSE MOVE MAXIMO END-EVALUATE

TO TO

PAGO PAGO

BelSolis

Pgina 29 de 46

MANUAL DE USUARIO
b) EVALUATE WHEN

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

SALARIO + COMISIN 6000 THRU 10000 MOVE 0.30 TO ISR WHEN 10001 THRU 20000 MOVE 0.35 TO ISR WHEN GREATER THAN 20001 MOVE 0.40 TO ISR END-EVALUATE c) EVALUATE WHEN PUESTO = GERENTE AND SALARIO TRUE MOVE COMISION TO PAGO WHEN FALSE MOVE NOMINA TO PAGO END-EVALUATE > 20000

Declaracin EVALUATE
EVALUATE TRUE / FALSE WHEN Frase-1 Instruccin ..... END-EVALUATE

(3)

Observe que: EVALUATE TRUE Cundo el valor de la Frase es VERDADERO, se ejecutan las instrucciones contenidas en la clusula WHEN EVALUATE FALSE Cundo el valor de la Frase es FALSO, se ejecutan las instrucciones contenidas en la clusula WHEN Ejemplos de EVALUATE TRUE / FALSE.
a) EVALUATE TRUE WHEN SALARIO > PROMEDIO MOVE MINIMO TO PAGO WHEN SALARIO < PROMEDIO MOVE MAXIMO TO PAGO WHEN SALARIO = PROMEDIO MOVE 800 TO PAGO END-EVALUATE b) EVALUATE FALSE WHEN EIBCALEN = 0 PERFORM 080-COMMAREA-LLENA WHEN EIBRESP = NORMAL PERFORM 085-ERROR END-EVALUATE

Declaracin INITIALIZE
INITIALIZE Identificador-1 [ Indentificador-2] .... INITIALIZE Identificador-1 [ REPLACING clase [ DATA ] BY Identificador-2 ] .... Observe que: La declaracin INITIALIZE asigna a Datos o Grupos de Datos seleccinados, Valores predeterminados. Bsicamente es equivalente a MOVE. Las clases de Datos aceptables son : NUMERIC ALPHABETIC ALPHABETIC-LOWER (minsculas) ALPHABETIC-UPPER (maysculas)

BelSolis

Pgina 30 de 46

MANUAL DE USUARIO Ejemplos de INITIALIZE:


WORKING-STORAGE SECTION. 01 DATOS-C. 05 DATO-1 05 DATO-2 05 DATO-3 05 DATON-1 05 DATON-2 05 DATON-3 PROCEDURE DIVISION. INITIALIZE DATOS-C INITIALIZE DATOS-C PIC PIC PIC PIC PIC PIC

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

X(12). X(12). X(12). S9(04) COMP. S9(05) COMP-3. ZZ,ZZZ.99

REPLACING

NUMERIC

DATA

BY

Observe que: INITIALIZE mueve ceros a todos los campos Numricos y Espacio a todos los campos Alfanumricos. INITIALIZE frase REPLACING mueve 2 a todos los campos Numricos dejando Sin Cambios los campos Alfanumricos.

Declaracin INSPECT TALLYING


INSPECT Identificador-1 TALLYING Indentificador-2 FOR CHARACTERS BEFORE / AFTER [ INITIAL ] Identificador Observe que: La declaracin INSPECT TALLYING cuenta el nmero de Caracteres dentro de un campo USAGE DISPLAY. El Resultado de la cuenta se asigna al Identificador-2 que debe ser un campo numrico. Cuando se utiliza la frase BEFORE, se cuenta el nmero de caracteres ANTES de la localizacin del carcter marcado INICIAL Cuando se utiliza la frase AFTER, se cuenta el nmero de caracteres DESPUES de la localizacin del carcter marcado INICIAL Ejemplos de INSPECT TALLYING
IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREA-NUM 01 AREAS-WS. 05 WS-AREA-1 05 WS-AREA-2 05 WS-AREA-3 05 WS-CUENTA

PIC 9(08) VALUE 2 COMP. PIC X(10) VALUE 'ABC1234AAA'. PIC 9(07) VALUE 1235. PIC 9(05).99 VALUE 152.35. PIC S9(04) COMP.

PROCEDURE DIVISION. INSPECT WS-AREA-1 TALLYING WS-CUENTA FOR CHARACTERS BEFORE '3' DISPLAY WS-AREA-1 ' BEFORE 3 DISPLAY WS-CUENTA. INSPECT WS-AREA-1 TALLYING WS-CUENTA FOR CHARACTERS AFTER INITIAL '3' DISPLAY WS-AREA-1 ' AFTER 3' DISPLAY WS-CUENTA.

STOP RUN. __________________________________________________________________________ ABC1234AAA BEFORE 3 00005 ABC1234AAA AFTER 3 00004

Se observa que la palabra INITIAL es optativa.

Declaracin INSPECT TALLYING FOR ALL / LEADING


INSPECT
BelSolis

Identificador-1

TALLYING

Indentificador-2 Pgina 31 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

FOR ALL / LEADING Indentificador-3 AFTER [ INITIAL ] Identificador-4

/ Literal

Se ve que: La declaracin INSPECT TALLYING FOR ALL cuenta el numero de caracteres dentro de un campo USAGE DISPLAY. El Resultado de la cuenta se asigna al Identificador-2 que debe ser un campo numrico. Cuando se utiliza la frase FOR ALL, se cuenta el numero total de caracteres indicados en el Identificador-3. Cuando se utiliza la frase LEADING, se cuenta el numero de caracteres que forma el primer grupo de los caracteres solicitados.

Ejemplos de INSPECT TALLYING

IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREA-NUM PIC 9(08) VALUE 2 COMP. 01 AREAS-WS. 05 WS-AREA-1 PIC X(10) VALUE 'AAC1234AAA'. 05 WS-AREA-2 PIC 9(07) VALUE 1235. 05 WS-AREA-3 PIC 9(05).99 VALUE 152.35. 05 WS-CUENTA PIC S9(04) COMP. PROCEDURE DIVISION. INSPECT WS-AREA-1 TALLYING WS-CUENTA FOR ALL A DISPLAY WS-AREA-1 ' ALL A DISPLAY WS-CUENTA. INSPECT WS-AREA-1 TALLYING WS-CUENTA FOR LEADING A DISPLAY WS-AREA-1 ' LEADING A' DISPLAY WS-CUENTA. STOP RUN. ________________________________________________________________________ AAC1234AAA ALL A 00005 AAC1234AAA LEADING A 00002

Se observa que la frase AFTER INITIAL es optativa.

Declaracin INSPECT REPLACING


INSPECT Identificador-1 REPLACING CHARACTERS BY Indentificador-2 Se observa que INSPECT REPLACING reemplaza todos los caracteres por el carcter indicado en el Identificador-2. Ejemplos de INSPECT REPLACING
IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREA-NUM PIC 9(08) VALUE 2 COMP. 01 AREAS-WS. 05 WS-AREA-1 PIC X(10) VALUE 'AAC1234AAA'. 05 WS-AREA-2 PIC 9(07) VALUE 1235. 05 WS-AREA-3 PIC 9(05).99 VALUE 152.35. 05 WS-CUENTA PIC S9(04) COMP. 05 WS-LISTAS PIC X(01) VALUE L. PROCEDURE DIVISION. DISPLAY WS-AREA-1 INSPECT WS-AREA-1 REPLACING CHARACTER BY WS-LISTAS DISPLAY WS-AREA-1. STOP RUN. _______________________________________________________________________________ AAC1234AAA LLLLLLLLLL

BelSolis

Pgina 32 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ver que la frase BEFORE / AFTER INITIAL es optativa.

Declaracin INSPECT REPLACING


INSPECT Identificador-1 REPLACING ALL / LEADING / FIRST Indentificador-2 BY Identificador-3 Observe que: La declaracin INSPECT REPLACING frase ALL reemplaza todos los caracteres indicados por el Identificador-2 con los caracteres del Identificador-3. La declaracin INSPECT REPLACING frase LEADING reemplaza el primer grupo de caracteres indicados por el Identificador-2 con los caracteres del Identificador-3. La declaracin INSPECT REPLACING frase FIRST reemplaza el primer carcter indicado por el Identificador-2 con el carcter del Identificador-3. Ejemplos de INSPECT REPLACING
IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREA-NUM PIC 9(08) VALUE 2 COMP. 01 AREAS-WS. 05 WS-AREA-1 PIC X(10) VALUE 'AAC1234AAA'. 05 WS-AREA-1A PIC X(10) VALUE 'AAC1234AAA'. 05 WS-AREA-1B PIC X(10) VALUE 'AAC1234AAA'. 05 WS-AREA-1C PIC X(10) VALUE 'AAC1234AAA'. PROCEDURE DIVISION. DISPLAY WS-AREA-1 INSPECT WS-AREA-1 REPLACING CHARACTERS BY 'X' DISPLAY WS-AREA-1 ' REPLACING CHARACTERS BY' DISPLAY ' ' DISPLAY WS-AREA-1 INSPECT WS-AREA-1A REPLACING ALL 'A' BY 'Z' DISPLAY WS-AREA-1A ' REPLACING ALL' DISPLAY ' ' DISPLAY WS-AREA-1B INSPECT WS-AREA-1B REPLACING LEADING 'A' BY 'M' DISPLAY WS-AREA-1B ' REPLACING LEADING' DISPLAY ' ' DISPLAY WS-AREA-1C INSPECT WS-AREA-1C REPLACING FIRST 'A' BY 'L' DISPLAY WS-AREA-1C ' REPLACING FIRST'. STOP RUN. _________________________________________________________________________ AAC1234AAA XXXXXXXXXX REPLACING CHARACTERS BY AAC1234AAA ZZC1234ZZZ REPLACING ALL AAC1234AAA MMC1234AAA REPLACING LEADING AAC1234AAA LAC1234AAA REPLACING FIRST

Declaracin INSPECT CONVERTING


INSPECT Identificador-1 CONVERTING Indentificador-2 / Literal TO Identificador-3 Observe que: Ver que INSPECT CONVERTING convierte los caracteres de Identificador-2 en los caracteres del Identificador-3. Tambin, la longitud de Identificador-2 debe ser la misma que la longitud de Identificador-3.

BelSolis

Pgina 33 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplos de INSPECT CONVERTING IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREA-NUM PIC 9(08) VALUE 2 COMP. 01 AREAS-WS. 05 WS-AREA-1 PIC X(10) VALUE 'ABC1234AAA'. 05 WS-AREA-1A PIC X(10) VALUE 'ABC1234AAA'. PROCEDURE DIVISION. DISPLAY WS-AREA-1 INSPECT WS-AREA-1 CONVERTING 'ABC' TO 'XYZ' DISPLAY WS-AREA-1 ' CONVERTING ' DISPLAY ' ' DISPLAY WS-AREA-1A INSPECT WS-AREA-1A REPLACING ALL 'ABC' BY 'XYZ' DISPLAY WS-AREA-1A ' REPLACING '. STOP RUN. _______________________________________________________________________ ABC1234AAA XYZ1234XXX CONVERTING ABC1234AAA XYZ1234AAA REPLACING

Observe que: CONVERTING funciona por caracteres y que cambi las A del final por X, o sea que cambiara las A por X, las B por Y y las C por Z REPLACING funciona por grupos, y nicamente cambi el grupo ABC por XYZ

Declaracin ACCEPT
ACCEPT Identificador FROM DATE ACCEPT Identificador FROM DAY ACCEPT Identificador FROM DAY-OFF-WEEK ACCEPT Identificador FROM TIME Observar que ACCEPT Recibe informacin del sistema y la almacena en el rea indicada, Identificador-2. Ejemplos de ACCEPT IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREAS-WS. 05 WS-AREA-DATE 05 WS-AREA-DAY 05 WS-AREA-DOF 05 WS-AREA-TIME PROCEDURE DIVISION. ACCEPT WS-AREA-DATE ACCEPT WS-AREA-DAY ACCEPT WS-AREA-DOF ACCEPT WS-AREA-TIME DISPLAY DISPLAY DISPLAY DISPLAY WS-AREA-DATE WS-AREA-DAY WS-AREA-DOF WS-AREA-TIME

PIC PIC PIC PIC

X(06). X(05). X(01). X(08). DATE DAY DAY-OF-WEEK TIME

FROM FROM FROM FROM

BelSolis

Pgina 34 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

DISPLAY 'EJEMPLO DEL SABADO 11 DE MARZO DE 2000'. STOP RUN. ______________________________________________________________________ 000311 AAMMDD <- 2 BYTES Para el ao, 2 BYTES para el mes 2 para el da 00071 AADDD <- 2 BYTES para el ao, 3 BYTES para el da 6 1=Lunes2=Martes3=Miercoles4=Jueves5=Viernes6=Sabado7=Domingo 16112285 HHMMSSmi <- 2 para Hora 2 para Minuto 2 para Segundo 2 para milsimas EJEMPLO DEL SABADO 11 DE MARZO DE 2000 Observe que: La fecha de hoy es Sbado 11 de marzo de 2000 El formato de cada campo debe coincidir con el formato asignado por el sistema a las variables DATE, DAY, DAYOF-WEEK y TIME.

Declaracin DISPLAY
DISPLAY Identificador-1 Identificador-2 .... Observe que: Enva el contenido del Identificador-1, Identificador-2, etc. Al dispositivo estndar de salida SYSOUT. Los datos Numricos se convierten a formato externo.
Ejemplos de DISPLAY: IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREAS-WS. 05 WS-AREA-TXT 05 WS-AREA-999 05 WS-AREA-COM 05 WS-AREA-COM3 05 WS-AREA-COM4 05 WS-AREA-EDIT PROCEDURE DIVISION. MOVE WS-AREA-COM4 DISPLAY WS-AREA-TXT DISPLAY WS-AREA-999 DISPLAY WS-AREA-COM DISPLAY WS-AREA-COM3 DISPLAY WS-AREA-COM4 DISPLAY WS-AREA-EDIT

PIC X(06) VALUE 'ABCDEF'. PIC 9(06) VALUE 123456. PIC 9(05) VALUE 12345 COMP. PIC S9(05)V99 VALUE +125.30 COMP-3. PIC S9(05)V99 VALUE +125.30 COMP-4. PIC ZZ,ZZZ.99CR. TO ' ' ' ' ' ' WS-AREA-EDIT PIC X(06)' PIC 9(06)' PIC 9(05) COMP' PIC S9(05) COMP-3' PIC S9(05) COMP-4' WS-AREA-EDIT'

DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ________________________________________________________________________________ ABCDEF PIC X(06) 123456 PIC X(09) 0000012345 PIC 9(05) COMP +0012530 PIC S9(05) COMP-3 +0000012530 PIC S9(05) COMP-4 PIC ZZ,ZZZ.99CR

Declaracin STRING STRING Identificador-1 DELIMITED BY Identificador-2 .... INTO Identificador-N Ver que concatena varios Datos de Texto y guarda el resultado en uno Solo.

BelSolis

Pgina 35 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplos de STRING: IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREAS-WS. 05 WS-NOMBRE PIC X(06) 05 WS-INICIAL PIC X(01) 05 WS-APELLIDOP PIC X(06) 05 WS-APELLIDOM PIC X(06) 05 WS-NOM-COMPLETO PIC X(20). PROCEDURE DIVISION. STRING WS-NOMBRE DELIMITED BY ' ' DELIMITED BY WS-INICIAL DELIMITED BY ' ' DELIMITED BY WS-APELLIDOP DELIMITED BY ' ' DELIMITED BY WS-APELLIDOM DELIMITED BY INTO WS-NOM-COMPLETO

VALUE VALUE VALUE VALUE SPACES SIZE SPACES SIZE SPACES SIZE SPACES

'JOSE'. 'M'. 'PINO'. 'SUAREZ'.

DISPLAY WS-NOM-COMPLETO DISPLAY 'FIN DE PROGRAMA'. STOP RUN. _________________________________________________________________________________ JOSE M PINO SUARE FIN DE PROGRAMA

Se puede ver, si el campo de recepcin no es suficiente para recibir los datos estos quedan truncados.

Declaracin UNSTRING UNSTRING Identificador-1 DELIMITED BY Identificador-2 INTO Identificador-3 Ver que divide un solo campo de datos en varios campos.
Ejemplos de STRING IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 DIRECCIN PIC X(50) VALUE 'CALLE ALTAMIRA N 5/COL. PESCADITOS/APIZACO/TLX'. 01 CAM-SEPARADOS. 05 WS-CALLE PIC X(20). 05 WS-COLONIA PIC X(20). 05 WS-CIUDAD PIC X(20). 05 WS-ESTADO PIC X(03). PROCEDURE DIVISION. UNSTRING DIRECCIN DELIMITED BY '/' INTO WS-CALLE WS-COLONIA WS-CIUDAD WS-ESTADO END-UNSTRING DISPLAY DIRECCIN DISPLAY WS-CALLE DISPLAY WS-COLONIA DISPLAY WS-CIUDAD DISPLAY WS-ESTADO STOP RUN. ________________________________________________________________________________ CALLE ALTAMIRA N 5/COL. PESCADITOS/APIZACO/TLX CALLE ALTAMIRA N 5 COL. PESCADITOS APIZACO TLX

FUNCTION SIN, COS, TAN, ASIN, ACOS, ATAN FUNCTION nombre de la funcin (Parmetros)
BelSolis

Pgina 36 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Observe que: FUNCTION permite aprovechar las funciones intrnsecas del sistema. COBOL no permite funciones creadas por el usuario.
Ejemplos de FUNCTION
IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREAS. 05 WS-RESULTADO-EDIT PIC ZZZZZZ.99999-. 05 WC-PI PIC S9(03)V9999 VALUE 3.1416 COMP. PROCEDURE DIVISION. MOVE FUNCTION ACOS(1.0) TO WS-RESULTADO-EDIT DISPLAY 'ACOS 1 ' WS-RESULTADO-EDIT MOVE FUNCTION ASIN(1.0) TO WS-RESULTADO-EDIT DISPLAY 'ASIN 1 ' WS-RESULTADO-EDIT MOVE FUNCTION ATAN(1.0) TO WS-RESULTADO-EDIT DISPLAY 'ATAN 1 ' WS-RESULTADO-EDIT MOVE FUNCTION COS(WC-PI/2.0) TO WS-RESULTADO-EDIT PI/2 = 90 GRADS DISPLAY 'COS PI/2 ' WS-RESULTADO-EDIT MOVE FUNCTION SIN(WC-PI/2) TO WS-RESULTADO-EDIT PI/2 = 90 GRADS DISPLAY 'SIN PI/2 ' WS-RESULTADO-EDIT MOVE FUNCTION TAN(WC-PI/4) TO WS-RESULTADO-EDIT PI/4 = 45 GRADS DISPLAY 'TAN PI/4 ' WS-RESULTADO-EDIT DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ________________________________________________________________________________ ACOS 1 .00000 0 GRADOS EN RADIANES ASIN 1 1.57079 90 GRADOS EN RADIANES ATAN 1 .78539 45 GRADOS EN RADIANES COS PI/2 .00000 SIN PI/2 .99999 TAN PI/4 1.00000 FIN DE PROGRAMA

Observe que: Para las funciones Trigonomtricas COS, SIN, TAN, los argumentos debern darse en radianes. RADIANES = (GRADOS * 3.1416) / 180 GRADOS = (RADIANES * 180) / 3.1416 Para ACOS y ASIN, el valor del argumento deber estar entre +1 y -1

FUNCTION INTEGER, INTEGER-PART, LOG, LOG10, MOD, REM, SQRT, SUM, FACTORIAL
FUNCTION nombre de la funcin (Parmetros)

BelSolis

Pgina 37 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplos de LAS FUNCIONES NUMERICAS: IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 AREAS. 05 WS-RESULTADO-EDIT PIC ZZZZZZ.99999-. 05 WC-PI PIC S9(03)V9999 VALUE 3.1416 COMP. PROCEDURE DIVISION. MOVE FUNCTION INTEGER(-1.75) TO WS-RESULTADO-EDIT DISPLAY 'INTEGER 1.75- ' WS-RESULTADO-EDIT MOVE FUNCTION INTEGER-PART(1.75) TO WS-RESULTADO-EDIT DISPLAY 'INT-PART 1.75 ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION LOG(10) TO WS-RESULTADO-EDIT DISPLAY 'LOG E 10 ' WS-RESULTADO-EDIT MOVE FUNCTION LOG10(10) TO WS-RESULTADO-EDIT DISPLAY 'LOG 10 10 ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION MOD(30 7) TO WS-RESULTADO-EDIT DISPLAY 'MODULO 30 7 ' WS-RESULTADO-EDIT MOVE FUNCTION REM(30.9 7) TO WS-RESULTADO-EDIT DISPLAY 'REMAIN 30.9 7 ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION SQRT(2.0) TO WS-RESULTADO-EDIT DISPLAY 'RAIZ DE 2 ' WS-RESULTADO-EDIT MOVE FUNCTION SUM(10 20 30.9) TO WS-RESULTADO-EDIT DISPLAY 'SUMA 10 20 30.9' WS-RESULTADO-EDIT MOVE FUNCTION FACTORIAL(6) TO WS-RESULTADO-EDIT DISPLAY 'FACTORIAL 6 ' WS-RESULTADO-EDIT DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ________________________________________________________________________________ INTEGER 1.752.00000* El entero mayor no mayor que Argumento. INT-PART 1.75 1.00000 * Parte entera del Argumento. LOG E 10 2.30258 * Logaritmo Natural del Argumento. LOG 10 10 1.00000 * Logaritmo Base 10 del Argumento. MODULO 30 7 2.00000 * Argumento-1 MODULO Argumento-2. REMAIN 30.9 7 2.90000 * Residuo del Argumento-1 entre el Argumento-2. RAIZ DE 2 1.41421 * Raz Cuadrada del Argumento. SUMA 10 20 30.9 60.90000 * Suma de los Argumentos. FACTORIAL 6 720.00000 * Factorial del Argumento. FIN DE PROGRAMA

FUNCTION MEAN, MEDIAN, MIDRANGE, RANGE, VARIANCE, STANDARD-DEVIATION, RANDOM


FUNCTION nombre de la funcin (Parmetros)

BelSolis

Pgina 38 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplos de FUNCTION IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CAM-SEPARADOS. WS-RESULTADO-EDIT PIC ZZZZZZ.99999-. PROCEDURE DIVISION. MOVE FUNCTION MEAN(8 7.5 9 6 5 8.3 7.2 10 8 7) TO WS-RESULTADO-EDIT DISPLAY 'PROMEDIO ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION MEDIAN(8 7.5 9 6 5 8.3 7.2 10 8 7) TO WS-RESULTADO-EDIT DISPLAY 'MEDIANA ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION MIDRANGE(8 7.5 9 6 5 8.3 7.2 10 8 7) TO WS-RESULTADO-EDIT DISPLAY 'PROM. EXTREMOS ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION RANGE(8 7.5 9 6 5 8.3 7.2 10 8 7) TO WS-RESULTADO-EDIT DISPLAY 'RANGO ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION VARIANCE(8 7.5 9 6 5 8.3 7.2 10 8 7) TO WS-RESULTADO-EDIT DISPLAY 'VARIANZA ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION STANDARD-DEVIATION(8 7.5 9 6 5 8.3 7.2 10 8 7) TO WS-RESULTADO-EDIT DISPLAY 'DESVIACIN-STD ' WS-RESULTADO-EDIT DISPLAY ' ' MOVE FUNCTION RANDOM TO WS-RESULTADO-EDIT DISPLAY 'ALEATORIO ' WS-RESULTADO-EDIT STOP RUN. _______________________________________________________________________________ PROMEDIO 7.60000 * Promedio de la lista de argumentos MEDIANA PROMEDIO EXTREMOS RANGO VARIANZA DESVIACIN-STD ALEATORIO 7.75000 7.50000 5.00000 1.83800 1.35572 .47043 * Mediana de la lista de argumentos * Promedio del argumento mnimo y el mximo * Argumento mximo * * de la lista menos el mnimo

Varianza de la lista de argumentos Desviacin Estndar de la lista

* Genera un numero aleatorio entre 0 y 1

Declaracin FUNCTION

FUNCTION CURRENT-DATE FUNCTION INTEGER-OF-DATE (Fecha en forma de numero)

BelSolis

Pgina 39 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplos de FUNCTION CURRENT-DATE, INTEGER-OF-DATE, DATE-OF-INTEGER IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CAM-SEPARADOS. 05 WS-RESULTADO-TEXT PIC X(21). 05 WS-RESULTADO-NUME PIC S9(09) COMP. 05 WS-RESULTADO-NUM2 PIC S9(09) COMP. 05 WS-RESULTADO-ENTE PIC 99999999. 05 WS-RESULTADO-EDIT PIC ZZZZZZ.99999-. PROCEDURE DIVISION. MOVE FUNCTION CURRENT-DATE(1:8) TO WS-RESULTADO-ENTE DISPLAY 'CURRENT-DATE ' WS-RESULTADO-ENTE DISPLAY ' ' MOVE FUNCTION INTEGER-OF-DATE (20000313) TO WS-RESULTADO-NUM2 DISPLAY 'INT-OF-DATE ' WS-RESULTADO-NUM2 DISPLAY ' ' ADD 30 TO WS-RESULTADO-NUM2 DISPLAY 'HOY MAS 30 DIAS ' WS-RESULTADO-NUM2 DISPLAY ' ' MOVE FUNCTION DATE-OF-INTEGER (WS-RESULTADO-NUM2) TO WS-RESULTADO-ENTE DISPLAY 'DATE-OF-INT ' WS-RESULTADO-ENTE DISPLAY ' ' DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ______________________________________________________________________ CURRENT-DATE 20000313 * Fecha de Hoy PIC 99999999. INT-OF-DATE +0000145804 * Numrico de la Fecha de Hoy PIC S9(09) COMP. HOY MAS 30 DIAS +0000145834 * Numrico de Hoy ms 30 Das. DATE-OF-INT 20000412 * Fecha de hoy ms 30 Das PIC 99999999. FIN DE PROGRAMA

Funcin FUNCTION ORD / CHAR FUNCTION ORD (Carcter) FUNCTION CHAR (Entero) Ver que CHAR devuelve el carcter indicado por el entero, segn la secuencia EBCDIC Adems, ORD devuelve el nmero de cdigo correspondiente al carcter indicado, segn la secuencia EBCDIC
Ejemplos de FUNCTION CHAR, ORD IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 DATOS. 05 WS-CARACTER PIC X(01). 05 WS-ENTERO PIC 999. PROCEDURE DIVISION. PERFORM VARYING WS-ENTERO FROM 194 BY 1 UNTIL WS-ENTERO > 205 MOVE FUNCTION CHAR(WS-ENTERO) TO WS-CARCTER DISPLAY 'CARACTER ' WS-ENTERO ' ES: ' WS-CARCTER END-PERFORM MOVE FUNCTION ORD(A) TO WS-ENTERO DISPLAY CARCTER A ES CODIGO WS-ENTERO MOVE FUNCTION ORD(B) TO WS-ENTERO DISPLAY CARCTER B ES CODIGO WS-ENTERO DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ______________________________________________________________________ CODIGO 194 ES: CARCTER A CODIGO 195 ES: CARCTER B CODIGO 196 ES: CARCTER C CODIGO 197 ES: CARCTER D CODIGO 198 ES: CARCTER E CODIGO 199 ES: CARCTER F CODIGO 200 ES: CARCTER G CODIGO 201 ES: CARCTER H CODIGO 202 ES: CARCTER I CODIGO 203 ES: CARCTER CODIGO 204 ES: CARCTER CODIGO 205 ES: CARCTER CARCTER A ES CODIGO CARCTER B ES CODIGO FIN DE PROGRAMA 194 195

BelSolis

Pgina 40 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

FUNCTION UPPER-CASE/LOWER-CASE REVERSE/LENGTH


FUNCTION nombre de la funcin (Texto-1). Ver que FUNCTION LOWER-CASE Convierte a minsculas el texto indicado FUNCTION UPPER-CASE Convierte a MAYUSCULAS el texto indicado FUNCTION REVERSE Convierte a orden inverso el texto indicado FUNCTION LENGTH Devuelve la longitud del texto indicado
Ejemplos de FUNCTION UPPER-CASE IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CAM-SEPARADOS. 05 WS-TEXTO 05 WS-ENTERO LOWER-CASE REVERSE, LENGTH

PIC PIC

X(35). 9(02).

PROCEDURE DIVISION. MOVE FUNCTION LOWER-CASE('JUAN PEREZ GARCIA') TO WS-TEXTO DISPLAY WS-TEXTO MOVE FUNCTION UPPER-CASE('universidad de salamanca') TO WS-TEXTO DISPLAY WS-TEXTO MOVE FUNCTION REVERSE('universidad de salamanca') TO WS-TEXTO DISPLAY WS-TEXTO MOVE FUNCTION REVERSE('DABALE ARROZ A LA ZORRA EL ABAD') TO WS-TEXTO DISPLAY WS-TEXTO MOVE FUNCTION LENGTH('DABALE ARROZ A LA ZORRA EL ABAD') TO WS-ENTERO DISPLAY WS-ENTERO DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ____________________________________________________________________________ juan perez garcia UNIVERSIDAD DE SALAMANCA acnamalas ed dadisrevinu DABA LE ARROZ AL A ZORRA ELABAD 31 FIN DE PROGRAMA

Funcin FUNCTION NUMVAL / NUMVAL-C


FUNCTION NUMVAL (Texto-1 ) FUNCTION NUMVAL-C (Texto-1 Texto-2) Ver que FUNCTION NUMVAL devuelve el valor numrico de un texto para usarlo en clculos FUNCTION NUMVAL-C devuelve el valor numrico del Texto-1 para usarse en clculos, toma en consideracin el Texto-2 que puede contener el indicador de dinero (Por ejemplo Pt Pesetas DM Marcos Bs Bolivares), si se omite Texto-2 se usa el valor de Default $ para pesos o dlares.
Ejemplos de FUNCTION NUMVAL, NUMVAL-C IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CAM-SEPARADOS. 05 WS-NUMERICO COMP-1. 05 WS-EDITADO PIC ZZ,999.99. PROCEDURE DIVISION. MOVE FUNCTION NUMVAL('4,699.33') TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION NUMVAL-C('$6,288.35' '$') TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION NUMVAL-C('CALLE DE PINO 8') TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION NUMVAL-C('154.88 KM/H') TO WS-NUMERICO MOVE WS-NUMERICO TO WS-EDITADO DISPLAY WS-EDITADO COMPUTE WS-NUMERICO = FUNCTION SQRT(WS-NUMERICO) MOVE WS-NUMERICO TO WS-EDITADO DISPLAY WS-EDITADO

BelSolis

Pgina 41 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ______________________________________________________________________________ 4,699.33 Valor numrico del texto, incluye comas y punto decimal 6,288.35 Valor numrico del campo de texto con signo de pesos 008.00 Valor numrico de la direccin 154.88 Valor numrico de la velocidad 012.44 Raz cuadrada de la velocidad

Funcin FUNCTION MAX / MIN


FUNCTION MAX (Lista de argumentos ) FUNCTION MIN (Lista de argumentos ) Observe que: FUNCTION MAX devuelve el elemento MAXIMO de la lista de argumentos. El tipo de la funcin depende de los argumentos. (Si la lista es numrica, devuelve un valor numrico, si la lista es alfanumrica, devuelve un valor alfanumrico). FUNCTION MIN devuelve el elemento MINIMO de la lista de argumentos. El tipo de la funcin depende de los argumentos. (Si la lista es numrica, devuelve un valor numrico, si la lista es alfanumrica, devuelve un valor alfanumrico).
Ejemplos de FUNCTION MAX, MIN IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CAM-SEPARADOS. 05 WS-TEXTO PIC X(20). 05 WS-ENTERO PIC 9(06). 05 WS-NUMERIC COMP-2. 05 WS-EDITADO PIC ZZZ,ZZZ.ZZZ. PROCEDURE DIVISION. MOVE FUNCTION MAX('CATARINA' 'KATARINA' 'QATARINA') TO WS-TEXTO DISPLAY WS-TEXTO MOVE FUNCTION MIN('CATARINA' 'KATARINA' 'QATARINA') TO WS-TEXTO DISPLAY WS-TEXTO MOVE FUNCTION MAX(30 123 45 158 222 15 14 124 99) TO WS-ENTERO DISPLAY WS-ENTERO MOVE FUNCTION MIN(30 123 45 158 222 15 14 124 99) TO WS-ENTERO DISPLAY WS-ENTERO MOVE FUNCTION MAX(133.21 133.0012 208.99999 15.2) TO WS-NUMERIC MOVE WS-NUMERIC TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION MIN(133.21 133.0012 208.99999 15.2) TO WS-NUMERIC MOVE WS-NUMERIC TO WS-EDITADO DISPLAY WS-EDITADO STOP RUN. ________________________________________________________________________ QATARINA CATARINA 000222 000014 208.999 15.200

Funcin FUNCTION ORD-MAX / ORD-MIN


FUNCTION ORD-MAX (Lista de argumentos) FUNCTION ORD-MIN (Lista de argumentos) Observe que: FUNCTION ORD-MAX devuelve el ORDINAL Del elemento MAXIMO de la lista de argumentos. Devuelve un valor numrico. FUNCTION MIN devuelve el ORDINAL del elemento MINIMO de la lista de argumentos. Devuelve un valor numrico.

BelSolis

Pgina 42 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

Ejemplos de FUNCTION ORD-MAX, ORD-MIN IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CAM-SEPARADOS. 05 WS-EDITADO PIC ZZ. PROCEDURE DIVISION. MOVE FUNCTION ORD-MAX('CATARINA' 'KATARINA' 'QATARINA') TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION ORD-MIN('CATARINA' 'KATARINA' 'QATARINA') TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION ORD-MAX(30 123 45 158 222 15 14 124 99) TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION ORD-MIN(30 123 45 158 222 15 14 124 99) TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION ORD-MAX(133.21 133.0012 208.99999 15.2) TO WS-EDITADO DISPLAY WS-EDITADO MOVE FUNCTION ORD-MIN(133.21 133.0012 208.99999 15.2) TO WS-EDITADO DISPLAY WS-EDITADO DISPLAY 'FIN DE PROGRAMA'. STOP RUN. ________________________________________________________________________________ 3 Ordinal del elemento mximo (ES EL TERCERO) 1 Ordinal del elemento mnimo (ES EL PRIMERO) 5 Ordinal del elemento mximo (ES EL QUINTO) 7 Ordinal del elemento mnimo (ES EL SEPTIMO) 3 Ordinal del elemento mximo (ES EL TERCERO) 4 Ordinal del elemento mnimo (ES EL CUARTO)

Declaracin SEARCH VARYING


SEARCH Identificador de tabla indexada con INDEXED BY VARYING Nombre-de-ndice AT END Instrucciones-en-caso-de-que-no-se-localice ... WHEN Condicin-1 Instrucciones-en-caso-de-que-si-se-localice END-SEARCH Ver que SEARCH VARYING busca secuencialmente en una Tabla Indexada con INDEXED BY la informacin solicitada en la condicin-1. Si se cumple la condicin-1 se ejecutan las Instrucciones de la Frase WHEN. El Nombre-de-indice no se Declara en la WORKING-STORAGE SECTION.
Ejemplos de SEARCH VARYING IDENTIFICATION DIVISION. PROGRAM-ID BURBUJA. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 DESORDEN. 05 FILLER PIC X(12) VALUE '04ABRIL '. 05 FILLER PIC X(12) VALUE '06JUNIO '. 05 FILLER PIC X(12) VALUE '01ENERO '. 05 FILLER PIC X(12) VALUE '05MAYO '. 05 FILLER PIC X(12) VALUE '07JULIO '. 05 FILLER PIC X(12) VALUE '09SEPTIEMBRE'. 05 FILLER PIC X(12) VALUE '08AGOSTO '. 05 FILLER PIC X(12) VALUE '02FEBRERO '. 05 FILLER PIC X(12) VALUE '10OCTUBRE '. 05 FILLER PIC X(12) VALUE '12DICIEMBRE '. 05 FILLER PIC X(12) VALUE '03MARZO '. 05 FILLER PIC X(12) VALUE '11NOVIEMBRE '. 01 TABLA REDEFINES DESORDEN. 05 WT-MESES OCCURS 12 TIMES INDEXED BY INDICE. 10 NUMERO PIC 9(02). 10 NOMBRE PIC X(10). 01 AUXILIARES. 05 WX-RESULTADO PIC X(12) VALUE SPACES. 05 WX-MENSAJE PIC X(20) VALUE SPACES. 05 WX-BUSCADO PIC 9(02).

<- no se declara

BelSolis

Pgina 43 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

PROCEDURE DIVISION. MOVE 3 TO WX-BUSCADO SET INDICE TO 1 SEARCH WT-MESES <-- La bsqueda se hace sobre la tabla indexada VARYING INDICE AT END MOVE 'NO LOCALIZADO ' TO WX-MENSAJE WHEN NUMERO(INDICE) = WX-BUSCADO MOVE NOMBRE(INDICE) TO WX-RESULTADO END-SEARCH DISPLAY WX-BUSCADO WX-RESULTADO WX-MENSAJE. STOP RUN. ________________________________________________________________________________ MARZO

Declaracin SEARCH ALL


SEARCH ALL Identificador de tabla indexada con INDEXED BY AT END Instrucciones-en-caso-de-que-no-se-localice ... WHEN Condicin-1 Instrucciones-en-caso-de-que-si-se-localice END-SEARCH Observe que: SEARCH ALL ejecuta una bsqueda binaria en una Tabla ordenada por un campo e indexada con INDEXED BY. Buscando la informacin solicitada en la condicin-1. Si se cumple la condicin-1 se ejecutan las Instrucciones de la Frase WHEN. Si no se localiza la informacin, se ejecutan las instrucciones de la frase AT END.
Ejemplos de SEARCH ALL IDENTIFICATION DIVISION. PROGRAM-ID EJEMPLO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 DESORDEN. 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 05 FILLER PIC 01

X(12) X(12) X(12) X(12) X(12) X(12) X(12) X(12) X(12) X(12) X(12) X(12)

VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE

'04ABRIL '. '08AGOSTO '. '12DICIEMBRE '. '01ENERO '. '02FEBRERO '. '07JULIO '. la tabla esta '06JUNIO '.ordenada por nombre '03MARZO '. '05MAYO '. '11NOVIEMBRE '. '10OCTUBRE '. '09SEPTIEMBRE'.

TABLA REDEFINES DESORDEN. 05 WT-MESES OCCURS 12 TIMES ASCENDING KEY IS NOMBRE La tabla ordenada por NOMBRE INDEXED BY INDICE. El ndice no se declara en WS 10 NUMERO PIC 9(02). 10 NOMBRE PIC X(10). 01 AUXILIARES. 05 WX-RESULTADO PIC X(12) VALUE SPACES. 05 WX-MENSAJE PIC X(20) VALUE SPACES. 05 WX-BUSCADO PIC X(10). PROCEDURE DIVISION. MOVE 'FEBRERO ' TO WX-BUSCADO SEARCH ALL WT-MESES Se busca en la tabla que tiene el ndice AT END MOVE 'NO LOCALIZADO ' TO WX-MENSAJE WHEN NOMBRE(INDICE) = WX-BUSCADO MOVE NOMBRE(INDICE) TO WX-RESULTADO END-SEARCH DISPLAY WX-BUSCADO WX-RESULTADO NUMERO(INDICE) WX-MENSAJE. STOP RUN. ________________________________________________________________________________ FEBRERO FEBRERO 02

BelSolis

Pgina 44 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

TABLAS BIDIMENSIONALES
Una tabla bidimensional es un arreglo de datos en forma de columnas y renglones, parecido a una matriz matemtica. Por ejemplo: el ARRAY TABLA Columna 1 Elemento (1,1) Elemento (2,1) TABLA Columna 2 Elemento (1,2) Elemento (2,2) Columna 3 Elemento (1,3) Elemento (2,3) Columna 4 Elemento (1,4) Elemento (2,4)

Renglon (1) Renglon (2)

Se puede hacer en COBOL una estructura que represente una tabla de dos dimensiones:
01 WI-INDICES. 05 WI-I 05 WI-J 05 WI-VALOR PIC PIC PIC 9(03). 9(03). 9(03).

01 TABLA. 05 WT-RENGLON OCCURS 2 TIMES 10 WT-ELEMENTO PIC 9 (03) OCCURS Ejemplo llenar la tabla con numeros de 1 a 8 1 5 2 6 3 7 4 8

TIMES

MOVE 0 TO WI-VALOR PERFORM VARYING WI-I FROM 1 BY 1 UNTIL WI-I > 2 PERFORM VARYING WI-J FROM 1 BY 1 UNTIL WI-J > 4 ADD 1 TO WI-VALOR MOVE WI-VALOR TO WT-ELEMENTO (WI-I,WI-J) END-PERFORM END-PERFORM.

BelSolis

Pgina 45 de 46

MANUAL DE USUARIO

COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

CODIGOS DE ERROR
Son muchos los errores que se pueden producir en tiempo de ejecucin cuando trabajamos con archivos, a continuacin dar una explicacin de los mas comunes. Todos stos errores los podemos obtener si definimos FILE STATUS en la FILE-CONTROL, y actuar consecuentemente, por ejemplo yo siempre cuando abro los archivos al principio de cada programa compruebo que el error sea 00, es decir que todo est bien para continuar, sino automaticamente saco una ventanita con el error que se ha producido y el nombre del archivo para que mis usuarios me lo comuniquen y poder solucionarlo, pero no dejo que se siga ejecutando el programa, con lo que se evitarn problemas posteriores que podran resultar peores. De todas formas una vez que est el programa verificado y comprobado, y que todos los archivos se corresponden con su descripcin en la FD, los errores que nos puede dar son los relativos a claves duplicadas o inexistentes, o a errores del sistema. Los errores se representan como 2 digitos para el error que pueden ir seguidos de una coma y otros 2 dgitos para indicar la naturaleza del error.
ERROR 00 10 22 23 24 30 34 35 39 41 42 43 47 48 49 90 91 92 93 94 98 EXPLICACION Operacin satisfactoria, todo bien. Cuando se ha llegado al final del archivo y se quiere seguir leyendo. Se intenta copiar un registro con una clave ya existente. Cuando se hace un acceso directo a un registro inexistente. No hay espacio en disco para realizar la operacin. Es un error grave de entrada/salida, suele ser ajeno a COBOL y mas concreto en cuanto a configuracin del sistema operativo sobre el que se est ejecutando, para solucionarlo deberemos prestar atencin a los dos dgitos seguientes al error. Igual que el 24 por falta de espacio en disco. El archivo al que hace referencia no existe. La organizacin del archivo que se quiere abrir no coincide con su organizacin real interna. Suele pasar cuando se modifica una FD y el archivo continua siendo el mismo. Cuando intentamos abrir un archivo que ya est abierto. Si intentamos cerrar un archivo que no esta abierto. Cuando se quiere borrar o reescribir un registro en un archivo abierto con acceso secuencial. Se quiere realizar alguna operacin que no corresponde con el modo de acceder al archivo. Si queremos hacer un READ o un START en un archivo que no ha sido abierto como INPUT o como I-O. Igual que el anterior, pero para el caso de querer escribir en un archivo que no esta abierto o no est abierto como I-O, OUTPUT o EXTEND. Cuando queremos borrar o reescribir en un archivo que no ha sido abierto como I-O o el archivo no est abierto. Cuando COBOL recibe un mensaje irreconocible, suele estar ocasionado por incomp atibilidad entre los accesos a los archivos, su forma de apertura y su modo de acceso. Igual que el 42. Cuando intentamos leer, escribir, borrar, reescribir sobre un archivo no abierto. El archivo est en conflicto con otro usuario. Igual que el 39, tiene muchisimas vertientes dependiendo de los dos digitos siguientes que acompaan al error. Echate a temblar (perdonad por la expresin), grave error interno en la estructura del archivo, generalmente se suelen provocar cuando hay un corte electrico o una salida brusca del programa y algn archivo indexado se ha quedado abierto, lo que suele ocurrir es problema de correspondencia entre claves y datos, se recomienda hacerle un recovery (RM/COBOL) o el que corresponda a cada compilador para rehacer las claves. Si despus de todo sigue dando errores .......? En algunos casos, es posible que ste error se deba a un problema fsico del disco, en ese caso tambin ser conveniente copiarlo en otro sitio "fsico". Al borrar, leer o reescribir un registro que est siendo bloqueado por otro usuario.

99

A pesar de todos stos errores con algunos de ellos podriamos seguir trabajando, pero siempre es mejor corregirlos antes de que pasen a mayores. Para evitar bloqueos en los registros cuando trabajamos con varios usuarios accediendo a los mismos registros, es convenientoe tener en cuenta los modos de apertura de los archivos, ya que abrindolos en INPUT nunca habr problema de bloqueo.

BelSolis

Pgina 46 de 46

Das könnte Ihnen auch gefallen