Guía Completa sobre COBOL y su Sintaxis
Guía Completa sobre COBOL y su Sintaxis
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.
PROG
FUENTE MODULO
COMPILADO
EN EJECUTABLE EN
R
COBOL LENGUAJE DE
DE
COBOL MAQUINA
TAREA QUE
EJECUTOR
EJECUTA LA
DE
APLICACIÓN
PROGRAMA
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.
1
MANUAL DE COBOL
El encabezado END PROGRAM
Los indicadores de nivel FD y SD
Los números de nivel 01 y 77
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’
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.
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.
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:
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 ]
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
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)
CLÁUSULA USAGE
Se utiliza para especificar el formato en el cual se almacenaran los datos.
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.
Ejemplos de VALUE
5 10 15 20 25 30 35 40 45 50 55 60 65 7072
....!....|....!....|....!....|....!....|....!....|....!....|....!....|..
02 IVA.
04 IVA-GENERAL PIC 9(04) VALUE 15.
04 IVA-ESPECIAL PIC 9(04) VALUE 6.
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.
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.
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.
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.
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).
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.
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.
*
********** **********
*** ***
*** 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).
PROCEDURE DIVISION.
OPEN INPUT ENTRADA
OPEN OUTPUT SALIDA
OPEN I-O PERSONAL
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
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”
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
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”
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.
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.
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.
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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.
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
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.
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.
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.
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.
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 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.
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
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
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
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
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
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.
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
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.
STOP RUN.
__________________________________________________________________________
ABC1234AAA BEFORE 3
00005
ABC1234AAA AFTER 3
00004
Observe que:
La palabra INITIAL es optativa.
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.
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.
STOP RUN.
________________________________________________________________________
AAC1234AAA ALL A
00005
AAC1234AAA LEADING A
00002
Observe que:
La frase AFTER INITIAL es optativa.
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.
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
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
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'
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
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
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
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
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.
FIN DE PROGRAMA
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
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
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
43
MANUAL DE COBOL
MOVE FUNCTION REVERSE('universidad de salamanca') TO
WS-TEXTO
DISPLAY WS-TEXTO
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
44
MANUAL DE COBOL
DISPLAY 'FIN DE PROGRAMA'.
STOP RUN.
______________________________________________________________________________
4,699.33 Valor numérico del texto, incluye comas y punto decimal
45
MANUAL DE COBOL
STOP RUN.
________________________________________________________________________
QATARINA
CATARINA
000222
000014
208.999
15.200
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.
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.
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
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.
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.
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
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.
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