Top Banner
MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO/ISPF, ERRORES, CHANGEMAN, CONTROL-M BELEN SOLIS MARCIAL Página 1 de 46 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
46

Manual Cobol Basico 2011

Oct 27, 2014

Download

Documents

Karina Hm
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Manual Cobol Basico 2011

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

BELEN SOLIS MARCIAL Página 1 de 46

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

Page 2: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 2 de 46

QUE ES EL COBOL?

El COBOL (Common Bussines Oriented Language) es un lenguaje de programación para uso de computadoras.

Se utiliza como el lenguaje estándar para aplicaciones administrativas tanto en grandes instalaciones (MAINFRAMES)

como en pequeñas (PCs).

A través de los años, 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 implementación actual, responde a las

necesidades de los nuevos programas.

Para ejecutar una aplicación 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 ejecución del programa según el ambiente de trabajo (P.ej. TSO, CICS)

RESUMEN DE DECLARACIONES DE COBOL.

1. Las declaraciones COBOL deben escribirse en “Formato COBOL”, según la siguiente tabla:

C O L U M N A USO EN COBOL

01 – 06 NUMERO SECUENCIAL

07 AREA DE INDICADORES

08 – 11 AREA A

12 – 72 AREA B

PROG FUENTE EN COBOL

COMPILADOR DE COBOL

MODULO EJECUTABLE EN LENGUAJE DE MAQUINA

EJECUTOR DE PROGRAMA

TAREA QUE EJECUTA LA APLICACIÓN

Page 3: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 3 de 46

El número de secuencia se genera automáticamente con el editor. Por lo tanto se deja vacío el espacio

de

la columna 1 a la 06.

En el área de indicadores se puede poner:

Un guión “-“ Para indicar continuación.

Un asterisco “*” Para indicar comentario (Se ignora todo el renglón)

En el área A se deben escribir:

Los encabezados de Sección y los encabezados de División.

Los nombres de Párrafo.

El encabezado END PROGRAM

Los indicadores de nivel FD y SD

Los números de nivel 01 y 77

En el área B se deben escribir:

Declaraciones, sentencias, cláusulas y, entradas.

Los renglones que sean continuación de uno anterior.

C O N T I N U A C I O N E S

Cualquier sentencia, cláusula, frase puede continuar en el siguiente renglón, pero la continuación debe empezar a

escribirse en el área B.

Si se pone un guión en el área de indicadores, se supone que el ultimo carácter de la línea anterior va seguido de un

espacio.

Si NO se pone un guión en el área de indicadores, el primer carácter que no sea espacio de la continuación sigue

inmediatamente al ultimo carácter que no sea espacio de la línea anterior.

En el caso de continuaciones de literales NO-NUMERICAS

- Cuando no se cierran las comillas del renglón anterior, todos los espacios hasta la columna 72 se toman como

parte de la literal.

- El renglón de continuación debe tener un guión en la columna 7, y el primer carácter 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-CONTINUACIÓN PIC X(30) VALUE ‘ABC

- ‘DEFGHIJKLMNOPQRSTUVWXYZ’

01 WX-CAMPO-CON ESPACIOS PIC X(33) VALUE ‘1

- ‘2 3 4 5 6 7 8 9 10 11’.

El carácter de continuación va en col 7, en WX-CAMPO-CON-CONTINUACIÓN, no hay espacio antes de col 72.

D I V I S I O N E S 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 información externa de los archivos en el párrafo 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 ejecución del

programa.

4. PROCEDURE DIVISION.

Page 4: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 4 de 46

Se usa para escribir las instrucciones que dirigen el proceso de la aplicación.

EJEMPLO DE UN PROGRAMA EN COBOL:

5 10 15 20 25 30 35 60 65 70 72

...!....|....!....|....!....|....!.. / / ....|....!....|..

IDENTIFICATION DIVISION.

PROGRAM-ID EJEMPLO.

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

AREA-WS.

05 WS-MENSAJE-INICIAL PIC X(20)

VALUE ‘HOLA MUNDO’.

05 WS-MENSAJE-FINAL PIC X(10) VALUE ‘ADIOS’.

PROCEDURE DIVISION.

DISPLAY WS-MENSAJE-INICIAL

DISPLAY WS-MENSAJE-FINAL

STOP RUN.

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 párrafo es el nombre del programa.

AUTHOR.

En este párrafo 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 60 65 70 72

....!....|....!....|....!....|....!.. / / ....|....!....|..

IDENTIFICATION DIVISION.

PROGRAM-ID. BE001.

AUTHOR. LUIS ANTONIO SALINAS.

REMARKS.

*

********** **********

*** ***

*** SISTEMA : EMPLEADOS ***

*** ***

*** PROGRAMA: BE001 TIPO PROGRAMA: BATCH ***

*** ***

*** OBJETIVO: REALIZA UN REPORTE DE ARCHIVO ***

*** SECUENCIAL ***

*** ***

*** FECHA DE CREACIÓN 24 DE OCTUBRE DE 2000 ***

*** FECHA DE CAMBIOS 28 DE DICIEMBRE DE 2000 ***

*** ***

********** **********

*

Observe que:

Page 5: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 5 de 46

El texto a continuación del párrafo REMARKS se considera como comentarios y termina con el nombre de la siguiente

división; ENVIRONMENT DIVISION.

Los párrafos de esta división son optativos, pero, los que estén presentes, deberán aparecer en este orden.

ENVIRONMENT DIVISION. La ENVIRONMENT DIVISION es la segunda división de un programa COBOL, y se utiliza para establecer las relaciones

entre el programa de aplicación 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 relación entre los datos del programa COBOL y las tarjetas DD del JOB que ejecutara el programa.

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 TO SALIDA

ORGANIZATION IS SEQUENTIAL

FILE STATUS IS WF-STATUS.

Observe que:

Los nombres de División, Sección y Párrafo se escriben a partir de la columna 8 (Margen A)

Las cláusulas 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 código 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 estarán disponibles para el

programa hasta que se abran los archivos.

WORKING-STORAGE SECTION

PROGRAMA COBOL

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL

SELECT FD-ENTRADA

ASSIGN TO ENTRADA

SELECT FD-REPORTE ASSIGN

TO SALIDA.

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

Page 6: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 6 de 46

Define los datos que no son parte de los archivos.

LINKAGE SECTION

Define los datos que estarán disponibles en ESTE programa, provenientes de OTRO programa.

Las secciones de DATA DIVISION son optativas, pero, las que estén presentes, deberán presentarse en este orden.

Dentro de la DATA DIVISION, los datos se describen según el procedimiento de niveles. Los números de nivel del 01 al

49 describen la jerarquía de los datos, entre mas alto el numero, menor es la jerarquía del dato.

Algunos números de nivel son especiales:

Nivel 66 Debe contener la cláusula RENAMES

Nivel 77 Se usa para definir datos elementales (No están subdivididos).

Nivel 88 Se usa para establecer nombres-condición asociados a la cláusula VALUE.

La descripción de las áreas de datos puede requerir de varias cláusulas:

DESCRIPCIÓN DE DATOS

Numero de nivel

Nombre de dato | [ FILLER ]

[ cláusula REDEFINES ]

[ cláusula BLANK WHEN ZERO ]

[ cláusula JUSTIFIED ]

[ cláusula OCCURS ]

[ cláusula PICTURE ]

[ cláusula SIGN ]

[ cláusula USAGE ]

[ cláusula 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 sección o de un

párrafo.

Los datos que no requieran nombre pueden llevar la palabra FILLER o nada

CLÁUSULA PICTURE Supongamos una estructura de datos como la siguiente:

REGISTRO-EMPLEADO

NOMBRE-EMPLEADO DATOS-EMPLEADO

APELLIDOS NOMBRE CLAVE-EMPLEADO PUESTO-EMPL

La cláusula PICTURE se usa para definir el tipo y tamaño de un dato elemental, o sea de un dato que no esta subdividido.

5 10 15 20 25 30 35 60 65 70 72

....!....|....!....|....!....|....!.. / / ....|....!....|..

01 REGISTRO-EMPLEADO.

05 NOMBRE-EMPLEADO.

10 APELLIDO PICTURE X(20).

10 NOMBRE PICTURE X(20).

05 DATOS-EMPLEADO.

10 CLAVE-EMPLEADO PICTURE X(18).

10 PUESTO-EMPL PICTURE 9(08).

Observe que:

Todas las descripciones terminan con un punto.

El nivel 01 esta en la región A.

Page 7: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 7 de 46

Solo los elementos de nivel mas bajo (datos elementales) tienen el descriptor de tamaño (cláusula PICTURE).

Los números de nivel no necesariamente deben ser consecutivos.

La palabra PICTURE puede abreviarse PIC.

Los paréntesis indican repetición de un carácter en la cláusula; por ejemplo:

PICTURE 9999999 y PICTURE 9(07) son equivalentes.

La longitud máxima de un string de PICTURE es de 30 caracteres.

CLÁUSULA 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 representación de doble byte (DBCS).

INDEX Ocupan 4 bytes se usan para índices en SEARCH.

POINTER Ocupan 4 bytes, se usan para señaladores.

PROCEDURE-POINTER 8 bytes. Para usarse en rutinas de recuperación.

BINARY Datos numéricos para usarse en operaciones aritméticas

PACKED-DECIMAL Guarda números decimales hasta 18 dígitos

COMPUTATIONAL Datos numéricos para usarse en operaciones aritméticas

COMPUTATIONAL-1 (COMP-1) Núm. punto flotante hasta 27 dígitos. 4 Bytes No lleva PIC

COMPUTATIONAL-2 (COMP-2) Núm. punto flotante hasta 54 dígitos. 8 Bytes No lleva PIC

COMPUTATIONAL-3 (COMP-3) Igual que PACKED-DECIMAL

COMPUTATIONAL-4 (COMP-4) Datos numéricos para operaciones aritméticas

COMPUTATIONAL-5 (COMP-5) Datos numéricos enteros de una palabra

INTERNAMENTE LOS DATOS SE GUARDAN:

DISPLAY

Los datos se guardan en formato de carácter: Un carácter ocupa un byte (8 bits).

COMPUTATIONAL-1

Los datos se guardan como valores de punto flotante en media palabra (4 Bytes) también se llama Single Precisión, sirve

para números de hasta 27 dígitos, el signo va en el primer bit del byte izquierdo, El tamaño es fijo de media palabra. No se

pone cláusula PICTURE.

COMPUTATIONAL-2

Los datos se guardan como valores de punto flotante en una palabra (8 Bytes) también se llama Double Precisión, sirve para

números de hasta 54 dígitos, el signo va en el primer bit del Byte izquierdo, el tamaño es fijo de una palabra. No se pone

cláusula PICTURE.

PACKED-DECIMAL o COMPUTATIONAL-3

Los datos se guardan en decimal empacado, o sea dos dígitos decimales en cada Byte, EL Byte de la derecha contiene un

dígito y el signo del numero, el tamaño es variable según el numero. La cláusula PIC indica el tamaño, 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 números de 1 a 4 dígitos.

Una Palabra (4 Bytes) para números de 5 a 9 dígitos.

Doble Palabra (8 Bytes) para números de 10 a 18 dígitos.

CLÁUSULA USAGE Se utiliza para especificar el formato en el cual se almacenaran los datos.

Page 8: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 8 de 46

EJEMPLOS DE CLÁUSULA 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 tamaño fijo, no llevan cláusula PICTURE

Los datos guardados COMP-3 y COMP-4 se almacenan en un tamaño variable.

CLÁUSULA 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-condición.

En LINKAGE SECTION solo se usa VALUE para nombres-condición.

La cláusula VALUE es obligatoria para declarar nombres-condición.

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 PIC X(01).

88 CASADO VALUE ‘C’.

88 SOLTERO VALUE ‘S’.

88 DIVORCIADO 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 numéricos deben estar dentro del rango de la cláusula PICTURE

Page 9: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 9 de 46

Las cláusulas VALUE en los datos con nombres-condición son obligatorias

Las literales alfanuméricas deben ser del tamaño indicado por la cláusula PICTURE, de otro modo, ocurrirá un error de

nivel E (truncación).

REDEFINICIONES La redefinición 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 números de nivel de nombre-dato-1 y nombre-dato-2 son iguales.

La entrada de redefinición va inmediatamente después de la definición del área, o sea, no se definen otras áreas y

después se redefine una área anterior.

Los datos redefinidos no contienen la cláusula VALUE (La primera definición si puede llevar VALUE).

Todas las definiciones de un área están siempre en vigencia, o sea, se puede utilizar cualquier definición de los datos en

un momento dado.

DEFINICIÓN DE ARCHIVOS

Los archivos que se usan en COBOL, se definen en el párrafo FILE-CONTROL de la ENVIRONMENT DIVISION.

El párrafo FILE-CONTROL debe contener una entrada para cada archivo que se vaya a utilizar en el programa.

Ejemplo de definición de archivos:

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT ENTRADA ASSIGN TO EMPLEADOS.

SELECT SALIDA ASSIGN TO REPORTE.

Por cada definición de archivos en el párrafo 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 básicos de organización de archivos:

Page 10: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 10 de 46

Organización secuencial (SEQUENTIAL); Los registros vienen secuencialmente o sea uno tras de otro, en el orden en que

se guardaron en el archivo.

Organización indexada (INDEXED); Los registros están 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 declaración sirve para archivos secuenciales y archivos VSAM que se manejaran secuencialmente.

El párrafo 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 80.

RG-ENTRADA.

05 NUM-EMP PIC 9(06).

05 NOMBRE PIC X(10).

05 APELLI PIC X(10).

05 INICIA PIC X(01).

05 DEPTO PIC X(04).

05 SUELDO PIC 9(05)V99.

05 FILLER PIC 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 posición de cada registro esta determinada por directorios o índices mantenidos por el

sistema y basados en Claves contenidas dentro del registro lógico.

El acceso SEQUENTIAL de un archivo INDEXED significa que los registros se accesarán secuencialmente en orden

ascendente según su clave.

Page 11: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 11 de 46

El acceso RANDOM de un archivo INDEXED significa que los registros se accesarán 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, según el formato de la operación de entrada-salida.

El párrafo 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 80.

RG-PERSONAL.

05 NUM-EMP-V PIC 9(06).

05 NOMBRE-V PIC X(10).

05 APELLI-V PIC X(10).

05 INICIA-V PIC X(01).

05 DEPTO-V PIC X(04).

05 SUELDO-V PIC 9(05)V99.

05 FILLER PIC 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 definición FD en la FILE SECTION.

Por Ejemplo: DATA DIVISION.

FILE SECTION.

FD PERSONAL

RECORD CONTAINS 80 CHARACTERS

RECORDING MODE F.

01 RG-PERSONAL.

05 NUM-EMP-C PIC 9(06).

05 NOMBRE-C PIC X(10).

05 APELLI-C PIC X(10).

05 INICIA-C PIC X(01).

05 DEPTO-C PIC X(04).

05 SUELDO-C PIC 9(05)V99.

05 FILLER PIC X(42).

01 RG-VENTAS.

05 NUM-EMP-V PIC 9(06).

05 VENDEDOR PIC X(21).

05 FECHA PIC X(10).

05 FILLER PIC X(43).

Observe que:

Page 12: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 12 de 46

Cada archivo debe tener un nombre único en el programa.

Puede haber varias descripciones de registro para un archivo, que funcionan como una redefinición del registro.

La cláusula RECORDING MODE es optativa.

PROCEDURE DIVISION La PROCEDURE DIVISION es la cuarta división de un programa COBOL, y se utiliza para indicar y describir las

instrucciones que ejecutara la aplicación.

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 según la lógica del diseño de la aplicación.

Generalmente las instrucciones se agrupan en párrafos. Un párrafo empieza con nombre de párrafo que se escribe en el

margen A y termina con un punto.

El párrafo termina con la ultima instrucción 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 declaración OPEN (OPEN Statement).

Observe que:

La declaración 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.

Page 13: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 13 de 46

Ejemplo de OPEN ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT ENTRADA ASSIGN TO EMPLEADOS.

SELECT SALIDA ASSIGN TO REPORTE.

SELECT PERSONAL ASSIGN TO ARCHVSAM

Por cada definición de archivos en el párrafo 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 ]

Page 14: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 14 de 46

[ AT END ... ]

[ NOT AT END ..... ]

[ END-READ ]

Observe que:

Para un acceso SEQUENTIAL, la declaración 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 declaración READ, se debe abrir el archivo para INPUT

Al terminar la ejecución de la declaración READ, se devuelve un código de respuesta en la variable declarada FILE

STATUS en este caso WF-STATUS

el código 0 (cero) significa “operación terminada correctamente”

el código 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 declaración 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 declaración START con objeto de posicionar la

lectura. En este caso, la declaración 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

Page 15: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 15 de 46

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 declaración READ, se debe abrir el archivo INDEXED como INPUT o I-O.

Antes de ejecutar la declaración READ se debe poner la clave en el área declarada RECORD KEY si se usa acceso

RANDOM

Al terminar la ejecución de la declaración READ, se devuelve un código de respuesta en la variable declarada FILE

STATUS en este caso WF-STATUS

el código 0 (cero) significa “operación terminada correctamente”

el código 23 significa ”Registro no localizado”

Lectura usando START–READ 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 declaración START con objeto de posicionar la

lectura. En este caso, la declaración 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 WL-MENSAJE

END-IF

END-IF

.

.

.

READ PERSONAL NEXT

Observe que:

Antes de ejecutar la declaración READ, se debe abrir el archivo INDEXED como INPUT o I-O.

Page 16: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 16 de 46

Antes de ejecutar la Primera lectura, se debe posicionar el inicio de la lectura con la declaración START poniendo la

clave en el área declarada RECORD KEY. Las siguientes lecturas no requieren START.

Al terminar la ejecución de la declaración START, se devuelve un código de respuesta en la variable declarada FILE

STATUS en este caso WF-STATUS

el código 0 (cero) significa “operación terminada correctamente”

el código 23 significa ”Registro no localizado”

La declaración 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 declaración WRITE inserta nuevos registros dentro del archivo SEQUENTIAL.

La declaración 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 declaración WRITE escribe en el archivo, el contenido del registro FD.

Antes de ejecutar la declaración WRITE, se mueve al registro FD la información que se desea escribir.

WRITE para un archivo INDEXED

Page 17: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 17 de 46

WRITE nombre del registro FD

[ FROM nombre de área ]

[ INVALID KEY ]

[ NOT INVALID KEY ]

[ END-WRITE ]

Observe que:

La declaración WRITE inserta nuevos registros en el archivo INDEXED

La declaración 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 declaración WRITE escribe en el archivo, el contenido del registro FD

Antes de ejecutar la declaración WRITE, se mueve al registro FD la información 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 declaración REWRITE modifica los registros existentes en el archivo INDEXED

Además, el archivo debe estar abierto I-O

Page 18: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 18 de 46

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 declaración 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 declaración DELETE elimina (Borra) registros existentes en archivos INDEXED o RELATIVE

El archivo debe estar abierto I-O

Antes de ejecutar la declaración DELETE, se mueve al Area declarada RECORD KEY, la clave del registro que se va

a Borrar.

Page 19: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 19 de 46

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 OPERACIÓN’ 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.

Declaración MOVE MOVE Identificador-1 TO Identificador-2 . . .

MOVE Literal TO Identificador-2 . . .

Observe que:

La declaración 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 TO RD-PERSONAL

MOVE WC-CLAVE TO NUM-EMP-V

MOVE SPACES TO WX-MJE-1 WX-MJE-2 WX-MJE-3

MOVE WX-ENTERO TO WX-TEXTO

MOVE ALL ‘*’ TO WX-MJE-4

Page 20: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 20 de 46

En caso de usar campos numéricos: 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 numéricos pueden copiarse a otro campo numérico.

El punto virtual (PIC 9(05)V99) se toma en cuenta para cálculos, pero no se escribe.

Un numero entero, puede copiarse (MOVE) a un campo de texto

Declaración 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 después de la palabra TO.

La palabra ROUNDED indica que el resultado se redondeara al entero más próximo.

Ejemplos de ADD: ADD 12 14 25 TO SUMA

DISPLAY SUMA

ADD SALARIO COMISION TO SUELDO-TOTAL

DISPLAY SUELDO-TOTAL

_____________________________________________

00051

12500.50

Existe otro formato de ADD ADD IdentificadorS-1 IdentifcadorS-2 ... [TO] IdentificadorS-n

GIVING IdentificadorR-1 [ROUNDED] IdentificadorR-2 . . .

Todos los identificadores o literales antes de la palabra GIVING, se suman y la suma reemplaza a cada uno de los

identificadores después de la palabra GIVING.

La palabra ROUNDED indica que el resultado se redondeara al entero mas próximo.

Ejemplos de ADD: ADD 12 14 25 TO SUMA GIVING TOTAL

ADD SALARIO COMISION GIVING SUELDO-TOTAL

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

DISPLAY TOTAL-A TOTAL-B

--------------------------------------------------------------

14256.80 14256.80

Page 21: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 21 de 46

Declaración 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 después el resultado se resta de cada uno

de los identificadores después de la palabra FROM.

La palabra ROUNDED indica que el resultado se redondeara al entero más próximo.

Ejemplos de SUBTRACT: MOVE 70 TO SUMA

SUBTRACT 12 14 25 FROM SUMA

DISPLAY 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 después

de la palabra FROM, a continuación el resultado reemplaza a cada uno de los identificadores después de la palabra

GIVING.

La palabra ROUNDED indica que el resultado se redondeara al entero más próximo.

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

Declaración 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 próximo.

Ejemplos de MULTIPLY: MULTIPLY 12 BY 14 PRODUCTO

DISPLAY PRODUCTO

MULTIPLY COSTO BY IVA IMPUESTO

DISPLAY IMPUESTO

____________________________________________

00168

150.00

Page 22: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 22 de 46

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 continuación el resultado reemplaza a

cada uno de los identificadores después de la palabra GIVING.

La palabra ROUNDED indica que el resultado se redondeara al entero mas próximo.

Ejemplos de MULTIPLY: MULTIPLY 12 BY 14 GIVING TOTAL

MULTIPLY SALARIO BY COMISION GIVING PAGO

MULTIPLY VENTA BY 1.15 GIVING PAGO-IVA ROUNDED

MULTIPLY WS-VENT1 BY FACTOR GIVING TOTAL-A TOTAL-B

DISPLAY TOTAL-A TOTAL-B

____________________________________________________________

158000.00 158000.00

Declaración 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 próximo.

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 IdentifcadorD-2

GIVING IdentificadorC-1 [ROUNDED] IdentificadorC-2 . . .

El valor del primer Identificador o literal se divide entre el IdentificadorD-2 y a continuación el resultado reemplaza a

cada uno de los identificadores después de la palabra GIVING.

La palabra ROUNDED indica que el resultado se redondeara al entero más próximo.

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 IdentifcadorD-2

Page 23: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 23 de 46

GIVING IdentificadorC-1 [ROUNDED]

REMAINDER IdentificadorR-1

El valor del primer Identificador o literal se divide entre el IdentificadorD-2 y a continuación el resultado reemplaza al

identificador después de la palabra GIVING.

Pone el residuo en IdentificadorR-1

Declaración COMPUTE COMPUTE IdentificadorR-1 [ROUNDED] IdentifcadorR-2 ...

= Expresión Aritmética

Observe que:

IdentificadorR-1, IdentificadorR-2, etc. Pueden ser campos numéricos o campos numéricos Editados.

Primero se calcula el valor de la expresión aritmética y después el resultado reemplaza al valor de cada uno de los

Identificadores antes de IGUAL.

En lugar del símbolo IGUAL se puede utilizar la palabra EQUAL.

Los operadores Aritméticos son:

+ (suma)

- (resta)

* (multiplicación)

/ (división)

** (exponenciación)

La palabra ROUNDED indica que el resultado se redondeara al entero más próximo.

Ejemplos de COMPUTE: COMPUTE VALOR-TOTAL ROUNDED = COSTO * 1.15

DISPLAY VALOR-TOTAL

COMPUTE

COSTO EQUAL CANTIDAD - DESCUENTO

END-COMPUTE

DISPLAY COSTO

______________________________________________________

1800

14.50

Declaración SET TO TRUE SET IdentificadorC-1 IdentifcadorC-2 ...

TO TRUE

A veces se requiere poner directamente en TRUE una variable de condición, la declaración SET TO TRUE pone en

VERDADERO una o varas variables de condición.

IdentificadorC-1, IdentificadorC-2, etc. Deben ser nombres de condición.

La declaración 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 condición

88 SOLTERO VALUE ‘S’. Se definen a nivel 88

88 DIVORCIADO VALUE ‘D’.

Page 24: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 24 de 46

Al definir las variables anteriores, todas las variables de condición tienen valor FALSE pues ESTADO-CIVIL tiene

espacios y no coincide con ninguna de ellas.

.

.

.

PROCEDURE DIVISION.

SET SOLTERO TO TRUE

.

.

.

SET CASADO TO TRUE

.

.

.

SET DIVORCIADO TO 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 condición, se ponen en FALSE las otras variables asociadas.

SET únicamente pone en TRUE el nombre de condición, no puede poner en FALSE

Declaración PERFORM

La declaración PERFORM se utiliza para transferir el control del programa hacia uno o más procedimientos y después,

regresar el control a la siguiente declaración 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 Básico.

PERFORM con la Frase TIMES.

PERFORM con la Frase UNTIL.

PERFORM con la Frase VARYING.

PERFORM Básico PERFORM Nombre de Procedimiento

[THRU Nombre de Procedimiento]

Page 25: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 25 de 46

PERFORM

Instrucción1

Instrucción2

......

END-PERFORM

Observe que:

El procedimiento indicado por el PERFORM Básico, se ejecuta solo una vez, y después el control pasa a la siguiente

declaración ejecutable.

En el caso de PERFORM Instrucciones, el grupo de Instrucciones debe terminar con la palabra END-PERFORM.

Ejemplo de PERFORM nombre de Párrafo. 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

Instrucción1

Instrucción2

......

END-PERFORM

Observe que:

El procedimiento indicado por el PERFORM TIMES, se ejecuta el número de veces especificado por Numero y al

terminar, el control pasa a la siguiente instrucción o declaración ejecutable.

El número debe de ser un Entero positivo, si es cero o negativo, el control pasa a la siguiente instrucción.

Ejemplo de PERFORM nombre de Párrafo. PROCEDURE DIVISION.

PERFORM 500-LEE-ENTRADA

THRU 500-LEE-ENTRADA-FIN 10 TIMES

.

.

.

Page 26: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 26 de 46

500-LEE-ENTRADA.

READ ENTRADA

.

.

.

500-LEE-ENTRADA-FIN

Ejemplo de PERFORM en LINEA ( in Line) PROCEDURE DIVISION.

PERFORM 3 TIMES

MOVE 1.15 TO IVA

COMPUTE TOTAL = COSTO * IVA

ADD TOTAL TO COSTO

END-PERFORM

PERFORM UNTIL PERFORM Nombre de Procedimiento

[THRU Nombre de Procedimiento]

UNTIL Condición

PERFORM UNTIL Condición

Instrucción1

Instrucción2

......

END-PERFORM

Observe que:

Si la condición es cierta en el momento en el que empieza el PERFORM, el procedimiento no se Ejecuta, y pasa a la

siguiente Instrucción.

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 UNTIL WF-STATUS = 23

.

.

500-LEE-ENTRADA.

READ ENTRADA

.

.

500-LEE-ENTRADA-FIN

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 después se prueba la condición.

Si no se indica TEST AFTER, primero se prueba la condición, y si es cierta, no se ejecuta el procedimiento.

PERFORM VARYING PERFORM Nombre de Procedimiento

[THRU Nombre de Procedimiento]

VARYING Identificador-1

Page 27: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 27 de 46

FROM Valor inicial BY Incremento

UNTIL Condición

PERFORM VARYING Identificador-1

FROM Valor inicial BY Incremento UNTIL Condición

Instrucción1

Instrucción2

......

END-PERFORM

Observe que:

El procedimiento se ejecuta con el valor inicial del Identificador-1 la primera vez, después se incremente (o disminuye)

el valor de Identificador-1 según incremento y se ejecuta la siguiente vez, hasta que se cumpla la condición.

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.

Page 28: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 28 de 46

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.

Declaración: IF IF Condición [THEN]

Instrucción

....

END-IF

IF Condición [THEN]

Instrucción

....

ELSE

Instrucción

....

END-IF

Observe que:

Si la condición es CIERTA, se ejecutan las instrucciones después de la condición.

Si la condición es FALSA se ejecutan las instrucciones después de la palabra ELSE

Si no hay ELSE y la condición es FALSA se ejecutan las instrucciones después 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 WL-MENSAJE

END-IF

* siguientes instrucciones

Declaración: CONTINUE CONTINUE

Observe que:

CONTINUE no ejecuta ninguna operación

No requiere de parámetros ni de operandos.

Se usa para especificar „ninguna operación‟ cuando es obligatoria una instrucción ejecutable.

Ejemplos de CONTINUE: IF WC-VENTAS >= WX-ANTERIOR THEN CONTINUE

ELSE

MOVE ‘NO SUPERO ANTERIOR’ TO WL-MENSAJE

MOVE 0 TO WX-COMISION

Page 29: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 29 de 46

END-IF

Siguiente instrucción

Otro Ejemplo: IF VENTAS-FRONTERA THEN

IF WS-IVA-ESPECIAL THEN

COMPUTE PAGO = COSTO * 1.06

MOVE PAGO TO WX-PAGO-EDITADO

ELSE

CONTINUE

END-IF

Siguiente instrucción

ELSE

COMPUTE PAGO = COSTO * 1.15

MOVE PAGO TO WX-PAGO-EDITADO

END-IF

Declaración EVALUATE (1)

Se utiliza para programar de una manera similar al CASE de programación Estructurada.

EVALUATE se usa como una alternativa de IF anidados.

Formato 1. EVALUATE Identificador

WHEN Valor-1

Instrucción

.....

[WHEN OTHER Instrucción .... ]

END-EVALUATE

Se ve que cuándo el valor de Identificador coincide con Valor-1, se ejecutan las instrucciones contenidas en la cláusula

WHEN

Ejemplo de EVALUATE Básico. EVALUATE SALARIO

WHEN 3000

MOVE 0.18 TO ISR

WHEN 4000

MOVE 0.22 TO ISR

WHEN 5000

MOVE 0.30 TO ISR

WHEN OTHER

MOVE 0.36 TO ISR

END-EVALUATE

Declaración EVALUATE (2) EVALUATE Expresión

WHEN Frase-1

Instrucción

.....

[WHEN OTHER Instrucción .... ]

END-EVALUATE

Se observa que cuándo el valor de la Expresión coincide con la Frase-1, se ejecutan las instrucciones contenidas en la

cláusula WHEN

Ejemplos de EVALUATE Expresión. a) EVALUATE EDAD > 20

WHEN TRUE

MOVE MINIMO TO PAGO

WHEN FALSE

MOVE MAXIMO TO PAGO

END-EVALUATE

Page 30: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 30 de 46

b) EVALUATE SALARIO + COMISIÓN

WHEN 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 PUESTO = ‘GERENTE’ AND SALARIO > 20000

WHEN TRUE

MOVE COMISION TO PAGO

WHEN FALSE

MOVE NOMINA TO PAGO

END-EVALUATE

Declaración EVALUATE (3) EVALUATE TRUE / FALSE

WHEN Frase-1

Instrucción

.....

END-EVALUATE

Observe que:

EVALUATE TRUE Cuándo el valor de la Frase es VERDADERO, se ejecutan las instrucciones contenidas en la

cláusula WHEN

EVALUATE FALSE Cuándo el valor de la Frase es FALSO, se ejecutan las instrucciones contenidas en la cláusula

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

Declaración INITIALIZE INITIALIZE Identificador-1 [ Indentificador-2] ....

INITIALIZE Identificador-1

[ REPLACING clase [ DATA ] BY Identificador-2 ] ....

Observe que:

La declaración INITIALIZE asigna a Datos o Grupos de Datos selecciónados, Valores predeterminados. Básicamente

es equivalente a MOVE.

Las clases de Datos aceptables son :

NUMERIC

ALPHABETIC

ALPHABETIC-LOWER (minúsculas)

ALPHABETIC-UPPER (mayúsculas)

Page 31: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 31 de 46

Ejemplos de INITIALIZE: WORKING-STORAGE SECTION.

01 DATOS-C.

05 DATO-1 PIC X(12).

05 DATO-2 PIC X(12).

05 DATO-3 PIC X(12).

05 DATON-1 PIC S9(04) COMP.

05 DATON-2 PIC S9(05) COMP-3.

05 DATON-3 PIC ZZ,ZZZ.99

PROCEDURE DIVISION.

INITIALIZE DATOS-C

INITIALIZE DATOS-C REPLACING NUMERIC DATA BY 2

Observe que:

INITIALIZE mueve ceros a todos los campos Numéricos y Espacio a todos los campos Alfanuméricos.

INITIALIZE frase REPLACING mueve 2 a todos los campos Numéricos dejando Sin Cambios los campos

Alfanuméricos.

Declaración INSPECT TALLYING INSPECT Identificador-1 TALLYING Indentificador-2

FOR CHARACTERS BEFORE / AFTER

[ INITIAL ] Identificador

Observe que:

La declaración INSPECT TALLYING cuenta el número de Caracteres dentro de un campo USAGE DISPLAY.

El Resultado de la cuenta se asigna al Identificador-2 que debe ser un campo numérico.

Cuando se utiliza la frase BEFORE, se cuenta el número de caracteres ANTES de la localización del carácter marcado

INICIAL

Cuando se utiliza la frase AFTER, se cuenta el número de caracteres DESPUES de la localización del carácter marcado

INICIAL

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 'ABC1234AAA'.

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

Declaración INSPECT TALLYING FOR ALL / LEADING INSPECT Identificador-1 TALLYING Indentificador-2

Page 32: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 32 de 46

FOR ALL / LEADING Indentificador-3 / Literal

AFTER [ INITIAL ] Identificador-4

Se ve que:

La declaración 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 numérico.

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.

Declaración INSPECT REPLACING INSPECT Identificador-1

REPLACING CHARACTERS BY Indentificador-2

Se observa que INSPECT REPLACING reemplaza todos los caracteres por el carácter 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

Page 33: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 33 de 46

Ver que la frase BEFORE / AFTER INITIAL es optativa.

Declaración INSPECT REPLACING INSPECT Identificador-1

REPLACING ALL / LEADING / FIRST Indentificador-2

BY Identificador-3

Observe que:

La declaración INSPECT REPLACING frase ALL reemplaza todos los caracteres indicados por el Identificador-2 con

los caracteres del Identificador-3.

La declaración INSPECT REPLACING frase LEADING reemplaza el primer grupo de caracteres indicados por el

Identificador-2 con los caracteres del Identificador-3.

La declaración INSPECT REPLACING frase FIRST reemplaza el primer carácter indicado por el Identificador-2 con

el carácter 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

Declaración 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.

También, la longitud de Identificador-2 debe ser la misma que la longitud de Identificador-3.

Page 34: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 34 de 46

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 cambiaría 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‟

Declaración ACCEPT ACCEPT Identificador FROM DATE

ACCEPT Identificador FROM DAY

ACCEPT Identificador FROM DAY-OFF-WEEK

ACCEPT Identificador FROM TIME

Observar que ACCEPT Recibe información 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 PIC X(06).

05 WS-AREA-DAY PIC X(05).

05 WS-AREA-DOF PIC X(01).

05 WS-AREA-TIME PIC X(08).

PROCEDURE DIVISION.

ACCEPT WS-AREA-DATE FROM DATE

ACCEPT WS-AREA-DAY FROM DAY

ACCEPT WS-AREA-DOF FROM DAY-OF-WEEK

ACCEPT WS-AREA-TIME FROM TIME

DISPLAY WS-AREA-DATE

DISPLAY WS-AREA-DAY

DISPLAY WS-AREA-DOF

DISPLAY WS-AREA-TIME

Page 35: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 35 de 46

DISPLAY 'EJEMPLO DEL SABADO 11 DE MARZO DE 2000'.

STOP RUN.

______________________________________________________________________

000311 AAMMDD <- 2 BYTES Para el año, 2 BYTES para el mes 2 para el día

00071 AADDD <- 2 BYTES para el año, 3 BYTES para el día

6 1=Lunes2=Martes3=Miercoles4=Jueves5=Viernes6=Sabado7=Domingo

16112285 HHMMSSmi <- 2 para Hora 2 para Minuto 2 para Segundo 2 para milésimas

EJEMPLO DEL SABADO 11 DE MARZO DE 2000

Observe que:

La fecha de hoy es Sábado 11 de marzo de 2000

El formato de cada campo debe coincidir con el formato asignado por el sistema a las variables DATE, DAY, DAY-

OF-WEEK y TIME.

Declaración DISPLAY DISPLAY Identificador-1 Identificador-2 ....

Observe que:

Envía el contenido del Identificador-1, Identificador-2, etc. Al dispositivo estándar de salida SYSOUT.

Los datos Numéricos 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 PIC X(06) VALUE 'ABCDEF'.

05 WS-AREA-999 PIC 9(06) VALUE 123456.

05 WS-AREA-COM PIC 9(05) VALUE 12345 COMP.

05 WS-AREA-COM3 PIC S9(05)V99 VALUE +125.30 COMP-3.

05 WS-AREA-COM4 PIC S9(05)V99 VALUE +125.30 COMP-4.

05 WS-AREA-EDIT PIC ZZ,ZZZ.99CR.

PROCEDURE DIVISION.

MOVE WS-AREA-COM4 TO WS-AREA-EDIT

DISPLAY WS-AREA-TXT ' PIC X(06)'

DISPLAY WS-AREA-999 ' PIC 9(06)'

DISPLAY WS-AREA-COM ' PIC 9(05) COMP'

DISPLAY WS-AREA-COM3 ' PIC S9(05) COMP-3'

DISPLAY WS-AREA-COM4 ' PIC S9(05) COMP-4'

DISPLAY WS-AREA-EDIT ' 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

Declaración 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.

Page 36: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 36 de 46

Ejemplos de STRING: IDENTIFICATION DIVISION.

PROGRAM-ID EJEMPLO.

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 AREAS-WS.

05 WS-NOMBRE PIC X(06) VALUE 'JOSE'.

05 WS-INICIAL PIC X(01) VALUE 'M'.

05 WS-APELLIDOP PIC X(06) VALUE 'PINO'.

05 WS-APELLIDOM PIC X(06) VALUE 'SUAREZ'.

05 WS-NOM-COMPLETO PIC X(20).

PROCEDURE DIVISION.

STRING WS-NOMBRE DELIMITED BY SPACES

' ' DELIMITED BY SIZE

WS-INICIAL DELIMITED BY SPACES

' ' DELIMITED BY SIZE

WS-APELLIDOP DELIMITED BY SPACES

' ' DELIMITED BY SIZE

WS-APELLIDOM DELIMITED BY SPACES

INTO WS-NOM-COMPLETO

DISPLAY WS-NOM-COMPLETO

DISPLAY 'FIN DE PROGRAMA'.

STOP RUN.

_________________________________________________________________________________

JOSE M PINO SUARE

FIN DE PROGRAMA

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

Declaración 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 DIRECCIÓN 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 DIRECCIÓN DELIMITED BY '/'

INTO WS-CALLE

WS-COLONIA

WS-CIUDAD

WS-ESTADO

END-UNSTRING

DISPLAY DIRECCIÓN

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 función (Parámetros)

Page 37: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 37 de 46

Observe que:

FUNCTION permite aprovechar las funciones intrínsecas 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 Trigonométricas COS, SIN, TAN, los argumentos deberán 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 función (Parámetros)

Page 38: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 38 de 46

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.75- 2.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 * Raíz 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 función (Parámetros)

Page 39: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 39 de 46

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 'DESVIACIÓN-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 7.75000 * Mediana de la lista de argumentos

PROMEDIO EXTREMOS 7.50000 * Promedio del argumento mínimo y el máximo

RANGO 5.00000 * Argumento máximo de la lista menos el mínimo

VARIANZA 1.83800 * Varianza de la lista de argumentos

DESVIACIÓN-STD 1.35572 * Desviación Estándar de la lista

ALEATORIO .47043 * Genera un numero aleatorio entre 0 y 1

Declaración FUNCTION

FUNCTION CURRENT-DATE

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

Page 40: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 40 de 46

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 * Numérico de la Fecha de Hoy PIC S9(09) COMP.

HOY MAS 30 DIAS +0000145834 * Numérico de Hoy más 30 Días.

DATE-OF-INT 20000412 * Fecha de hoy más 30 Días PIC 99999999.

FIN DE PROGRAMA

Función FUNCTION ORD / CHAR FUNCTION ORD (Carácter)

FUNCTION CHAR (Entero)

Ver que CHAR devuelve el carácter indicado por el entero, según la secuencia EBCDIC

Además, ORD devuelve el número de código correspondiente al carácter indicado, según 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-CARÁCTER

DISPLAY 'CARACTER ' WS-ENTERO ' ES: ' WS-CARÁCTER

END-PERFORM

MOVE FUNCTION ORD(‘A’) TO WS-ENTERO

DISPLAY ‘CARÁCTER A ES CODIGO ’ WS-ENTERO

MOVE FUNCTION ORD(‘B’) TO WS-ENTERO

DISPLAY ‘CARÁCTER B ES CODIGO ’ WS-ENTERO

DISPLAY 'FIN DE PROGRAMA'.

STOP RUN.

______________________________________________________________________

CODIGO 194 ES: CARÁCTER A

CODIGO 195 ES: CARÁCTER B

CODIGO 196 ES: CARÁCTER C

CODIGO 197 ES: CARÁCTER D

CODIGO 198 ES: CARÁCTER E

CODIGO 199 ES: CARÁCTER F

CODIGO 200 ES: CARÁCTER G

CODIGO 201 ES: CARÁCTER H

CODIGO 202 ES: CARÁCTER I

CODIGO 203 ES: CARÁCTER è

CODIGO 204 ES: CARÁCTER “

CODIGO 205 ES: CARÁCTER ”

CARÁCTER A ES CODIGO 194

CARÁCTER B ES CODIGO 195

FIN DE PROGRAMA

Page 41: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 41 de 46

FUNCTION UPPER-CASE/LOWER-CASE REVERSE/LENGTH FUNCTION nombre de la función (Texto-1).

Ver que FUNCTION LOWER-CASE Convierte a minúsculas 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 LOWER-CASE REVERSE, LENGTH

IDENTIFICATION DIVISION.

PROGRAM-ID EJEMPLO.

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 CAM-SEPARADOS.

05 WS-TEXTO PIC X(35).

05 WS-ENTERO PIC 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

Función FUNCTION NUMVAL / NUMVAL-C FUNCTION NUMVAL (Texto-1 )

FUNCTION NUMVAL-C (Texto-1 Texto-2)

Ver que FUNCTION NUMVAL devuelve el valor numérico de un texto para usarlo en cálculos

FUNCTION NUMVAL-C devuelve el valor numérico del Texto-1 para usarse en cálculos, toma en consideración 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 dólares.

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

Page 42: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 42 de 46

DISPLAY 'FIN DE PROGRAMA'.

STOP RUN.

______________________________________________________________________________

4,699.33 Valor numérico del texto, incluye comas y punto decimal

6,288.35 Valor numérico del campo de texto con signo de pesos

008.00 Valor numérico de la dirección

154.88 Valor numérico de la velocidad

012.44 Raíz cuadrada de la velocidad

Función 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 función depende de los

argumentos. (Si la lista es numérica, devuelve un valor numérico, si la lista es alfanumérica, devuelve un valor

alfanumérico).

FUNCTION MIN devuelve el elemento MINIMO de la lista de argumentos. El tipo de la función depende de los

argumentos. (Si la lista es numérica, devuelve un valor numérico, si la lista es alfanumérica, devuelve un valor

alfanumérico).

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

Función 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

numérico.

FUNCTION MIN devuelve el ORDINAL del elemento MINIMO de la lista de argumentos. Devuelve un valor

numérico.

Page 43: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 43 de 46

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 máximo (ES EL TERCERO)

1 Ordinal del elemento mínimo (ES EL PRIMERO)

5 Ordinal del elemento máximo (ES EL QUINTO)

7 Ordinal del elemento mínimo (ES EL SEPTIMO)

3 Ordinal del elemento máximo (ES EL TERCERO)

4 Ordinal del elemento mínimo (ES EL CUARTO)

Declaración 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 Condición-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 información

solicitada en la condición-1. Si se cumple la condición-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. <- no se declara

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

Page 44: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 44 de 46

PROCEDURE DIVISION.

MOVE 3 TO WX-BUSCADO

SET INDICE TO 1

SEARCH WT-MESES <-- La búsqueda 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

Declaración SEARCH ALL SEARCH

ALL Identificador de tabla indexada con INDEXED BY

AT END Instrucciones-en-caso-de-que-no-se-localice ...

WHEN Condición-1 Instrucciones-en-caso-de-que-si-se-localice

END-SEARCH

Observe que:

SEARCH ALL ejecuta una búsqueda binaria en una Tabla ordenada por un campo e indexada con INDEXED BY.

Buscando la información solicitada en la condición-1. Si se cumple la condición-1 se ejecutan las Instrucciones de la

Frase WHEN.

Si no se localiza la información, 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 X(12) VALUE '04ABRIL '.

05 FILLER PIC X(12) VALUE '08AGOSTO '.

05 FILLER PIC X(12) VALUE '12DICIEMBRE '.

05 FILLER PIC X(12) VALUE '01ENERO '.

05 FILLER PIC X(12) VALUE '02FEBRERO '.

05 FILLER PIC X(12) VALUE '07JULIO '. la tabla esta

05 FILLER PIC X(12) VALUE '06JUNIO '.ordenada por nombre

05 FILLER PIC X(12) VALUE '03MARZO '.

05 FILLER PIC X(12) VALUE '05MAYO '.

05 FILLER PIC X(12) VALUE '11NOVIEMBRE '.

05 FILLER PIC X(12) VALUE '10OCTUBRE '.

05 FILLER PIC X(12) VALUE '09SEPTIEMBRE'.

01 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

Page 45: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 45 de 46

TABLAS BIDIMENSIONALES Una tabla bidimensional es un arreglo de datos en forma de columnas y renglones, parecido a una matriz matemática.

Por ejemplo: el ARRAY TABLA

TABLA

Columna 1 Columna 2 Columna 3 Columna 4

Renglon (1) Elemento (1,1) Elemento (1,2) Elemento (1,3) Elemento (1,4)

Renglon (2) Elemento (2,1) Elemento (2,2) Elemento (2,3) Elemento (2,4)

Se puede hacer en COBOL una estructura que represente una tabla de dos dimensiones:

01 WI-INDICES.

05 WI-I PIC 9(03).

05 WI-J PIC 9(03).

05 WI-VALOR PIC 9(03).

01 TABLA.

05 WT-RENGLON OCCURS 2 TIMES

10 WT-ELEMENTO PIC 9 (03) OCCURS 4 TIMES

Ejemplo llenar la tabla con numeros de 1 a 8

1 2 3 4

5 6 7 8

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.

Page 46: Manual Cobol Basico 2011

MANUAL DE USUARIO COBOL, CICS, DB2, JCL, TSO, ERRORES, CHANGEMAN, CONTROL-M

BelSolis Página 46 de 46

CODIGOS DE ERROR

Son muchos los errores que se pueden producir en tiempo de ejecución cuando trabajamos con

archivos, a continuación daré una explicación 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 evitarán problemas posteriores que podrían resultar peores. De todas formas una vez

que está el programa verificado y comprobado, y que todos los archivos se corresponden con

su descripción 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 dígitos para indicar la naturaleza del error.

ERROR EXPLICACION

00 Operación satisfactoria, todo bien.

10 Cuando se ha llegado al final del archivo y se quiere seguir leyendo.

22 Se intenta copiar un registro con una clave ya existente.

23 Cuando se hace un acceso directo a un registro inexistente.

24 No hay espacio en disco para realizar la operación.

30 Es un error grave de entrada/salida, suele ser ajeno a COBOL y mas concreto en cuanto a

configuración del sistema operativo sobre el que se está ejecutando, para solucionarlo deberemos

prestar atención a los dos dígitos seguientes al error.

34 Igual que el 24 por falta de espacio en disco.

35 El archivo al que hace referencia no existe.

39 La organización del archivo que se quiere abrir no coincide con su organización real interna.

Suele pasar cuando se modifica una FD y el archivo continua siendo el mismo.

41 Cuando intentamos abrir un archivo que ya está abierto.

42 Si intentamos cerrar un archivo que no esta abierto.

43 Cuando se quiere borrar o reescribir un registro en un archivo abierto con acceso secuencial.

47 Se quiere realizar alguna operación 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.

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

49 Cuando queremos borrar o reescribir en un archivo que no ha sido abierto como I-O o el archivo

no está abierto.

90 Cuando COBOL recibe un mensaje irreconocible, suele estar ocasionado por incompatibilidad entre

los accesos a los archivos, su forma de apertura y su modo de acceso.

91 Igual que el 42.

92 Cuando intentamos leer, escribir, borrar, reescribir sobre un archivo no abierto.

93 El archivo está en conflicto con otro usuario.

94 Igual que el 39, tiene muchisimas vertientes dependiendo de los dos digitos siguientes que

acompañan al error.

98 Echate a temblar (perdonad por la expresión), grave error interno en la estructura del archivo,

generalmente se suelen provocar cuando hay un corte electrico o una salida brusca del programa y

algún 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 después de todo sigue dando errores

.......?

En algunos casos, es posible que éste error se deba a un problema físico del disco, en ese caso

también será conveniente copiarlo en otro sitio "físico".

99 Al borrar, leer o reescribir un registro que está siendo bloqueado por otro usuario.

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 abriéndolos en INPUT nunca habrá problema de bloqueo.