0% encontró este documento útil (0 votos)
52 vistas50 páginas

Guía Completa sobre COBOL y su Sintaxis

Cargado por

ezcupe
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
52 vistas50 páginas

Guía Completa sobre COBOL y su Sintaxis

Cargado por

ezcupe
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd

MANUAL DE COBOL

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 ([Link]. TSO, CICS)

PROG
FUENTE MODULO
COMPILADO
EN EJECUTABLE EN
R
COBOL LENGUAJE DE
DE
COBOL MAQUINA

TAREA QUE
EJECUTOR
EJECUTA LA
DE
APLICACIÓN
PROGRAMA

RESUMEN DE DECLARACIONES DE COBOL.


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

COLUMNA USO EN COBOL


01 – 06 NUMERO SECUENCIAL
07 AREA DE INDICADORES
08 – 11 AREA A
12 – 72 AREA B

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.

1
MANUAL DE COBOL
 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.

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

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 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.
Se usa para escribir las instrucciones que dirigen el proceso de la aplicación.

2
MANUAL DE COBOL
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:
 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.

3
MANUAL DE COBOL
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.

PROGRAMA COBOL JOB


ENVIRONMENT DIVISION. //BECLAS01 JOB (1,2),’LUIS’,
INPUT-OUTPUT SECTION. CLASS=A,MSGLEVEL=(1,1)
FILE-CONTROL //PASO1 EXEC PGM=BE001
SELECT FD-ENTRADA ASSIGN //ENTRADA DD DSN=ARCHIVO,EMPLEADO,
TO ENTRADA DISP=SHR
//SALIDA DD DSN=[Link],
SELECT FD-REPORTE ASSIGN TO DISP=SHR
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 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
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.

4
MANUAL DE COBOL
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.
 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

5
MANUAL DE COBOL
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 ([Link]. 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.

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:

6
MANUAL DE COBOL
 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
 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

7
MANUAL DE COBOL
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:

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)

8
MANUAL DE COBOL
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.
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.

9
MANUAL DE COBOL
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:
 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

10
MANUAL DE COBOL
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.

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

11
MANUAL DE COBOL

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 ]
[ 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,

12
MANUAL DE COBOL
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
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

13
MANUAL DE COBOL
 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.
 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 ]

14
MANUAL DE COBOL
[ 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


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

15
MANUAL DE COBOL

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 ]

Observe que:
 La declaración REWRITE modifica los registros existentes en el archivo INDEXED
 El archivo debe estar abierto I-O

16
MANUAL DE COBOL
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.

17
MANUAL DE COBOL
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

En caso de usar campos numéricos:

18
MANUAL DE COBOL
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.

19
MANUAL DE COBOL

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

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.

20
MANUAL DE COBOL
Ejemplos de MULTIPLY:
MULTIPLY 12 BY 14 PRODUCTO
DISPLAY PRODUCTO

MULTIPLY COSTO BY IVA IMPUESTO


DISPLAY IMPUESTO
____________________________________________
00168
150.00

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.

21
MANUAL DE COBOL

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

22
MANUAL DE COBOL
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’.

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

23
MANUAL DE COBOL

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

24
MANUAL DE COBOL
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
.
.
.
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

25
MANUAL DE COBOL
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
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

26
MANUAL DE COBOL
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.

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:
27
MANUAL DE COBOL
 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
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.

28
MANUAL DE COBOL

Formato 1.
EVALUATE Identificador
WHEN Valor-1
Instrucción
.....
[WHEN OTHER Instrucción .... ]
END-EVALUATE

Observe 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

Observe 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

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

29
MANUAL DE COBOL
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)

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

30
MANUAL DE COBOL
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

Observe que:
 La palabra INITIAL es optativa.

Declaración INSPECT TALLYING FOR ALL / LEADING


31
MANUAL DE COBOL
INSPECT Identificador-1 TALLYING Indentificador-2
FOR ALL / LEADING Indentificador-3 / Literal
AFTER [ INITIAL ] Identificador-4

Observe 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

Observe que:
 La frase AFTER INITIAL es optativa.

Declaración INSPECT REPLACING


INSPECT Identificador-1
REPLACING CHARACTERS BY Indentificador-2

Observe que:
 La declaración INSPECT REPLACING reemplaza todos los caracteres por el carácter indicado en el
Identificador-2.

32
MANUAL DE COBOL
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

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

33
MANUAL DE COBOL
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.
01AREAS-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:
 La declaración INSPECT CONVERTING convierte los caracteres de Identificador-2 en los caracteres del
Identificador-3.
 La longitud de Identificador-2 debe ser la misma que la longitud de Identificador-3.

34
MANUAL DE COBOL
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

Observe 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

35
MANUAL DE COBOL
DISPLAY WS-AREA-DATE
DISPLAY WS-AREA-DAY
DISPLAY WS-AREA-DOF
DISPLAY WS-AREA-TIME

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

36
MANUAL DE COBOL
DELIMITED BY Identificador-2 ....
INTO Identificador-N

Observe que:
 Concatena varios Datos de Texto y guarda el resultado en uno Solo.

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

Observe que:
 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

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

37
MANUAL DE COBOL
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)

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.

38
MANUAL DE COBOL
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)

39
MANUAL DE COBOL
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)

40
MANUAL DE COBOL
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)

41
MANUAL DE COBOL
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)
Observe que:
 CHAR devuelve el carácter indicado por el entero, según la secuencia EBCDIC
 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.

42
MANUAL DE COBOL
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

FUNCTION UPPER-CASE/LOWER-CASE REVERSE/LENGTH


FUNCTION nombre de la función (Texto-1).

Observe 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

43
MANUAL DE COBOL
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)
Observe 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

44
MANUAL DE COBOL
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,[Link].
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

45
MANUAL DE COBOL
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.

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

46
MANUAL DE COBOL
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

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

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:

47
MANUAL DE COBOL
 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

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)

48
MANUAL DE COBOL
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.

CODIGOS DE RETORNO DE ARCHIVOS VSAM


COBOL/370 OS/VS COBOL DESCRIPCIÒN
STATUS KEYS STATUS KEYS
00 00 Terminación Correcta
02 02 Clave Duplicada y se Especifico DUPLICATES (OK).
04 00 La Longitud del Registro es errónea (OK).
05 00 Archivo Optativo no esta Presente (OK).
10 10 Fin de Archivo, no hay Registro Siguiente (OK).
14 Indefinido En READ Secuencial el Nº de Registro es Grande.
20 20 Clave Invalida para Archivo VSAM o RELATIVE.
21 21 Error de Secuencia para Archivo VSAM o RELATIVE.
22 22 Clave Duplicada para Archivo VSAM (ERROR).
23 23 Registro No Localizado para Archivo VSAM.
24 24 Intento Escribir más allá del Limite del FILE.
30 30 Error Permanente.
35 93,96 Archivo (No Optativo), no Presente.
37 90 Intento Abrir Archivo que no esta en MSD STORAGE
39 95 Conflicto de Atributos Falla de OPEN.
41 92 Intentó Abrir un Archivo Abierto.
42 92 Intento Cerrar un Archivo que no esta Abierto.
43 92 REWRITE sin READ.
46 92 Intentó Leer y no hay Siguiente Registro.
47 92 Lee un Archivo que no esta OPEN INPUT o I-O.
48 92 WRITE un Archivo que no está OPEN OUTPUT o I-O.
49 92 REWRITE, DELETE un Archivo que no está OPEN I-O.
90 90 Otros ERRORES.
91 91 Error de PASSWORD de Archivo VSAM.
93 93 Recurso VSAM no Disponible.
94 94 No hay Indicador de Posición VSAM (CMPR2).
95 95 Información de Archivo VSAM Incompleta o Invalida.
96 96 No hay Identificación de Archivo VSAM(No hay DD).
97 97 Ejecución de OPEN OK Integridad de Archivo Verificado

CODIGOS DE RETORNO DE ARCHIVOS QSAM

49
MANUAL DE COBOL
COBOL / 370 OS / VS COBOL DESCRIPCIÓN
STATUS KEYS STATUS KEYS
00 00 Terminación Normal
04 Indefinido Longitud del Registro Errónea (OK) solo 370
05 Indefinido Archivo Optativo no esta Presente (OK).
07 Indefinido No hay REWND/REEL para Arch. De Carrete
10 10 Fin de Archivo no hay Registro Siguiente OK
30 30 Error Permanente.
34 34 Error Permanente, violación Limite de FILE
35 93,96 Archivo (No Optativo), no Presente.
37 93 Conflicto en Tipo de Dispositivo.
38 92 Error en OPEN para un Archivo WITH LOCK
39 95 Conflicto de Atributos Falla OPEN FILE.
41 92 OPEN sobre un Archivo Abierto.
42 92 CLOSE sobre un Archivo no Abierto.
43 92 REWRITE sin un READ previo.
44 92 REWRITE sobre un Reg. de Diferente Tamaño.
46 92 READ Secuencial y no hay Reg. Siguiente.
47 92 READ de un Archivo no Abierto INPUT I-O
48 92 WRITE en un Archivo no Abierto OUTPUT I-O
49 92 DELETE o REWRITE en Archivo no Abierto I-O
90 90 Otros Errores
92 92 Error Lógico
96 96 No hay Identificación de Archivo; (no hay DD)

50

También podría gustarte