0% encontró este documento útil (0 votos)
622 vistas

C Modulo 2 Cobol

El documento proporciona una introducción al lenguaje de programación COBOL, incluyendo su historia, estructura, elementos del lenguaje como palabras reservadas y nombres creados por el programador, y tipos de literales. Se explican las cuatro divisiones principales de un programa COBOL y conceptos como tablas, ficheros y subprogramas.
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)
622 vistas

C Modulo 2 Cobol

El documento proporciona una introducción al lenguaje de programación COBOL, incluyendo su historia, estructura, elementos del lenguaje como palabras reservadas y nombres creados por el programador, y tipos de literales. Se explican las cuatro divisiones principales de un programa COBOL y conceptos como tablas, ficheros y subprogramas.
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
Está en la página 1/ 92

CURSO DE FORMACION EN

COBOL – CICS – TSO - VTAM

INDICE GENERAL

MODULO II: PROGRAMACION COBOL – CICS – DB2


CAPITULO 1: LENGUAJE COBOL

1. LENGUAJE COBOL 3
INTRODUCCION 3
Evolución 3

2. PROGRAMACION COBOL 4

ESTRUCTURA 4
Elementos de lenguaje 5
Juego de caracteres 5
Palabras reservadas 6
Nombres creados por el programador 7
Literales y constantes figurativas
HOJA DE CODIFICACION 10
CONSEJOS PARA HACER PROGRAMAS CLAROS Y ALINEADOS 11
NORMAS A SEGUIR PARA UN BUEN ENTENDIMIENTO DE LOS 13
FORMATOS

3. DIVISIONES EN COBOL 15

LAS CUATRO DIVISIONES 15


FORMATOS DE LAS DIVISIONES 15
IDENTIFICATION DIVISION 16
ENVIRONMENT DIVISION 16
Estructura de la division 16
Configuration section 17
Input output section 17
DATA DIVISION 18
File section 18
Working-storage 20
Sintaxis de la descripción de datos 20
PROCEDURE DIVISION 32
Secciones 34
Sentencias 34

4. TRATAMIENTO DE LAS TABLAS 79

5. FICHEROS 86

6. SUBPROGRAMAS 89

CAPITULO 1: PROGRAMACION COBOL Página 1 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CAPITULO 1: PROGRAMACION COBOL Página 2 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

MODULO II
PROGRAMACION COBOL/CICS/DB2

CAPITULO 1
LENGUAJE COBOL

REALIZADO POR ARV CHILE S.A. POR ENCARGO DE ACME CHILE S.A.
ENERO A MARZO DE 2002
SANTIAGO - CHILE

CAPITULO 1: PROGRAMACION COBOL Página 3 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

1. LENGUAJE COBOL

INTRODUCCION
La palabra COBOL es la abreviatura de Common Business Oriented Language
(Lenguaje Común Orientado a Negocios).

El COBOL es un lenguaje de alto nivel que como su propio nombre indica esta dirigido
a problemas de gestión. Por ello está diseñado para el manejo de gran volumen de
información a los que se podrán aplicar pequeñas operaciones aritméticas para su
tratamiento.

Al ser un lenguaje de alto nivel, su comprensión es muy sencilla ya que su similitud con
el inglés nos permite, aún sin tener grandes conocimientos de COBOL, comprender
fácilmente la finalidad de un programa escrito en este lenguaje.

Este lenguaje se describió por primera vez en un informe dirigido a la Conferencia


sobre Lenguajes de Sistema de Proceso de Datos (CODASYL: Conference of Date
Systems Languages).

EVOLUCION

1.959 - VERSION PRELIMINAR.

1.961 - COBOL-61.

1.969 - VERSION ESTANDAR. ANSI (American National Standard Institute).

1.974 - VERSION (74) DEL COBOL ANSI.

1.985 - ULTIMA VERSION DEL COBOL ANSI.

CAPITULO 1: PROGRAMACION COBOL Página 4 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

2. PROGRAMACION COBOL

ESTRUCTURA

Todo programa COBOL tiene una estructura obligatoria que se debe seguir, la cual
consta de 4 divisiones, cada una de las cuales tiene una misión especifica dentro del
programa. Estas divisiones son las siguientes:

 IDENTIFICATION DIVISION

 ENVIRONMENT DIVISION

 DATA DIVISION

 PROCEDURE DIVISION

El nombre de estas divisiones es fijo y su colocación en el programa siempre deben


seguir el mismo orden.

Cada una de ellas a su vez esta dividida en varias secciones, las cuales serán
opcionales dependiendo de la finalidad de nuestro programa y que ya iremos viendo
más detenidamente en capítulos posteriores.

CAPITULO 1: PROGRAMACION COBOL Página 5 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ELEMENTOS DEL LENGUAJE

JUEGO DE CARACTERES

Al igual que en otros lenguajes, para crear un programa en COBOL debemos ceñirnos
a una serie de reglas sintácticas.

Para la edición de un programa, el COBOL nos permite utilizar el siguiente juego de


caracteres:

Caracteres Alfabéticos:

Blanco y letras de la A a la Z (mayúsculas y minúsculas).

Caracteres Numéricos:

Dígitos del 0 al 9.

Caracteres Especiales:

*/+-$'".,;=<>()

Una secuencia de caracteres forman una PALABRA.

Los caracteres permitidos para formar una palabra COBOL son:

LETRAS DE LA A a la Z (Mayúsculas y minúsculos)

DIGITOS DEL 0 AL 9

CARACTER - (GUION)

PALABRAS RESERVADAS

Son las palabras que utiliza el COBOL para cada una de sus funciones especificas,
son palabras escritas en inglés y no se podrán utilizar para otra cosa distinta a la que le
tiene asignado el compilador.

EJ. SELECT, ASSIGN, PROCEDURE....

NOMBRES CREADOS POR EL PROGRAMADOR

Serán aquellos nombres creados por el programador para su uso, e irán destinados
generalmente para nombrar variables utilizadas en el programa en cuestión.

En la formacion de nombres de variables de cualquier tipo:

No se pueden utilizar más de 30 caracteres.

Como mínimo debe existir un carácter alfabético.

El guión " - " no puede ir ni al principio ni al final del nombre creado, ni haber más de un
guión consecutivo.

Los nombres creados por el usuario o programador pueden dividirse en:

CAPITULO 1: PROGRAMACION COBOL Página 6 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

NOMBRES DE DATOS:

Son nombres de registros, ficheros, campos, o informes y campos auxiliares.

Ejemplo:
FD$$FICHER
LABEL RECORDS STANDARD
BLOCK CONTAINS 10.

01 RFICHER.
05 NOMBRE PIC X(20).
05 DNI PIC X(10).
*
WORKING-STORAGE SECTION.
77 CONTADOR PIC X(4).

FICHER, RFICHER, NOMBRE, DNI Y CONTADOR son nombres de datos.

NOMBRES DE CONDICION:

Son aquellos a los que se les asocia valores particulares.


05 ESTADO PIC X.
88 SOLTERO VALUE `S'.
88 CASADO VALUE `C'.

NOMBRES ESPECIALES:

Son especificados en la ENVIRONMENT DIVISION y dentro del párrafo SPECIAL-


NAMES.

Su función es cambiar de nombre o valor a elementos que tienen un nombre stándard


en COBOL.
Ejemplo:

SPECIAL NAMES.
DECIMAL-POINT IS COMMA.

Se cambia la utilización del punto decimal anglosajón a la coma latina.

NOMBRES DE PROCEDIMIENTOS, PARRAFOS Y SECCIONES:

Se especifican en PROCEDURE DIVISION. Su utilidad es la de programar referencias


para un grupo determinado de sentencias.
Ejemplo:

PROCEDURE DIVISION.
ABRIR.
OPEN INPUT FICHER
OUTPUT SALIDA.

CAPITULO 1: PROGRAMACION COBOL Página 7 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Los nombres de procedimiento forman una excepción a la regla de formación de


palabras COBOL, ya que éstos pueden empezar con un número.

LITERALES Y CONSTANTES FIGURATIVAS

El concepto de literal sustituye en COBOL al de constante en otros lenguajes de


programación.

Hay dos tipos de literales:

NUMERICOS

NO NUMERICOS

LITERALES NUMERICOS:

Se dividen en:

Literales de coma fija

Literales de coma flotante

A) DE COMA FIJA:

Están compuestos de los dígitos 0 a 9, un signo + o - y un punto decimal


opcionalmente.

Sus reglas de formación son:

Pueden contener hasta 18 digitos y un punto decimal

El signo (si lleva) irá en el extremo izquierdo

El punto decimal no podrá ir en el extremo derecho

Ejemplo:+12, -24, 123.85 20.1624

B) DE COMA FLOTANTE:

Son usados para evitar la restricción de 18 dígitos de los literales de coma fija. Están
compuestos de una mantisa, un exponente y opcionalmente un signo.
Ejemplo:-2E+5

CAPITULO 1: PROGRAMACION COBOL Página 8 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LITERALES NO NUMERICOS:

Se forman con cualquier carácter COBOL encerrado entre comillas.


Ejemplo:"LA FECHA SERA DD/MM/AA"
Las barras al ir encerradas entre comillas pierden su valor. Cualquier palabra
reservada, puede encerrarse entre comillas, pues pierden también su valor.

CONSTANTES FIGURATIVAS

Son palabras reservadas que tienen un valor preasignado. Estas son:

ZERO, ZEROS, ZEROES Representa la aparición de unos o más 0. Pueden


emplearse como valor numérico o no numérico.

SPACE, SPACES Representan uno o más espacios.

QUOTE, QUOTES Una o varias comillas.

HIGH-VALUE, HIGH-VALUES Asignan el más alto valor del código en el que se


esté trabajando.

LOW-VALUE, LOW-VALUES Asignan el más bajo valor.

ALL LIT-NO-NUMERICO Representa la aparición del literal no numérico.

SIMBOLOS

Hay tres tipos de símbolos:

ARITMETICOS:

+ SUMA

- RESTA

* MULTIPLICACION

/ DIVISION

** EXPONENCIACION

CONDICIONALES:

= IGUAL A

> MAYOR A

< MENOR A

CAPITULO 1: PROGRAMACION COBOL Página 9 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

PUNTUACION:

. PUNTO, FINALIZA UNA SENTENCIA

, COMA, SEPARA OPERANDOS

; PUNTO Y COMA, SEPARA CLAUSULAS

' APOSTROFE, ENCIERRA LITERALES NO NUMERICOS

() PARENTESIS, ENCIERRA INDICES Y EXPRESIONES

REGLAS DE PUNTUACION:

* Los signos aritméticos = + - * / deben de ir precedidos y seguidos de un blanco.

* El paréntesis izquierdo no debe de ir seguido de un espacio pero si precedido.

* El paréntesis derecho no debe ir precedido de un blanco pero si seguido.

* Los símbolos de puntuación . , ; deben de ir seguidos al menos de un blanco.

HOJA DE CODIFICACION

Para poder codificar nuestro programa y facilitar la edición del mismo, ciñéndonos a las
reglas sintácticas que nos obliga seguir el COBOL, se utiliza una hoja standard
denominada HOJA DE CODIFICACION COBOL.

La hoja de codificación es una hoja cuadriculada que consta de 25 líneas, cada una de
ellas dividida en 80 columnas.

-- Columnas 1 a la 6 --

En estas columnas se indica lo que se denomina el número de secuencia o numero de


linea, el cual es opcional.

-- Columna 7 --

Esta línea es utilizada para indicar la continuación de un literal demasiado largo que no
cupo en la linea anterior, para ello colocaremos en esta columna un guión "-".

También esta columna se utilizará para indicar que la línea en la que estamos es una
línea de comentario, para lo que colocaremos un asterisco "*".

CAPITULO 1: PROGRAMACION COBOL Página 10 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

-- Columnas 8 a la 11 --

Este conjunto de columnas es lo que definimos como MARGEN A. Este márgen se


utiliza paras alinear las partes de mayor entidad del programa como son:

Los nombres de División


Los nombres de Sección
Los nombres de Párrafo
Las inscripciones del nivel FD

Este márgen también se utiliza para alinear los números de nivel superior de las
variables declaradas en la Data como son los 01 y 77.

-- Columnas 12 a la 72 --

Es lo que denominamos el MARGEN B y en el irán :

Las Sentencias.
Los números inferiores de nivel de las variables definidas en la Data.

-- Columnas 73 a la 80 --

Estas columnas son ignoradas por el compilador. Suelen ser utilizadas por el
programador para identificar las lineas de programación o para poner cualquier tipo de
comentario.

CONSEJOS PARA HACER PROGRAMAS CLAROS Y ALINEADOS

1. Separar con una linea en blanco, poniendo un asterisco en la columna 7 en los


siguientes casos:

Antes de los distintos niveles 01 en la WORKING-STORAGE SECTION.


Ejemplo:
01 CLIENTE.
05 NOMBRE PIC X(15).
05 APELLIDOS PIC X(30).
*
01 PRODUCTO.
05 DENOMINACION PIC X(20).
05 CANTIDAD PIC 9(5).

CAPITULO 1: PROGRAMACION COBOL Página 11 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En la PROCEDURE DIVISION cuando hay una agrupación de sentencias iguales.


Ejemplo:

MOVE 'PEPE' TO NOMBRE.


MOVE 'GARCIA PEREZ' TO APELLIDOS.
MOVE 'IBM/PS-30' TO DENOMINACION.
MOVE 20 TO CANTIDAD.
*
WRITE REG-IMPRESION FROM CLIENTE.
WRITE REG-IMPRESION FROM CANTIDAD.

2. Alinear todos los elementos de nuestro programa que tengan una función similar.

Ejemplo: En la DATA DIVISION (NUMERO DE NIVEL, PIC, VALUE)


01 EMPRESA.
05 NOMBRE PIC X(20).
05 DIRECCION PIC X(40).
05 LOCALIDAD PIC X(20).
05 NIF PIC 9(10) VALUE ZEROES.
05 FABRICACION PIC X(15) VALUE SPACES.

Ejemplos:

En la PROCEDURE DIVISION
MOVE 'PEPE' TO NOMBRE
MOVE 'GARCIA PEREZ' TO APELLIDOS
MOVE 'IBM/PS-30' TO DENOMINACION
MOVE 20 TO CANTIDAD.

OPEN INPUT FICHERO-1 FICHERO-2


OUTPUT IMPRESION IMPRESION-2.

3. A la hora de definir variables, agrupar aquellas que tengan funcion similar.

Ejemplos:
01 SWITCHES.
05 SW-1 PIC X VALUE SPACES.
05 SW-2 PIC X VALUE SPACES.
05 SW-3 PIC 9 VALUE ZERO.
05 SW-4 PIC 9 VALUE 1.
05 SW-5 PIC 9 VALUE 2.
05 SW-6 PIC 99 VALUE ZEROES.
*
01 ACUMULADORES.
05 ACUM-1 PIC 9(4) VALUE ZEROES.
05 ACUM-2 PIC 9(5) VALUE ZEROES.
05 ACUM-3 PIC 9(4) VALUE ZEROES.

CAPITULO 1: PROGRAMACION COBOL Página 12 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

4. En la PROCEDURE DIVISION escalonar las sentencias que no quepan en una


misma linea o escalonar aquellas sentencias anidadas.

Ejemplo:
PERFORM LECTURA-DE-FICHERO-MAESTRO
UNTIL CODIGO-CLIENTE-SUCURSAL EQUAL "PEDROSO"
OR FINAL-FICHERO EQUAL 'SI'.

Ejemplo:
IF NUMERO-CLIENTE = 1
IF CANTIDAD-SALDO NOT = 0
PERFORM COMPUTAR-RESULTADOS
ELSE
DISPLAY "ERROR EN EL SALDO"
END-IF
ELSE
DISPLAY "CLIENTE ERRONEO"
END-IF.

5. Documentar el programa. Mediante lineas de comentario aclarar la función de cada


una de las partes que componen un programa.

Ejemplos:

En la DATA DIVISION
*************************************************************
* * * * * DESCRIPCION DEL FICHERO MAESTRO * * * * *
***********************************************************
01 REG-MAESTRO.
05 CODIGO-SUCURSAL PIC 9(4).
05 NUMERO-CUENTA PIC 9(8).
05 NOM-CLIENTE PIC X(20).
05 APELL-CLIENTE PIC X(30).

Ejemplos:

En la PROCEDURE DIVISION
***************************************************************
** * * OPERACIONES DE BALANCE FICHERO MAESTRO * * **
***************************************************************

BALANCE.
MOVE SALDO-CLI TO ACUM-1.
MOVE SALDO-AUX TO ACUM-2.
*
COMPUTE SALDO-AUX = ACUM-1 * ACUM-2 / 12.

CAPITULO 1: PROGRAMACION COBOL Página 13 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

NORMAS A SEGUIR PARA UN BUEN ENTENDIMIENTO DE LOS FORMATOS

En los siguientes capítulos iremos viendo los formatos de todas las divisiones, sus
secciones y las sentencias que las forman.
Ejemplo:

MULTIPLY identificador-1 BY {identificador-2}


literal-1

[ON SIZE ERROR instruccion-imperativa-1]


[NOT ON SIZE ERROR instruccion-imperativa-2]
[END-MULTIPLY]

Para que dichos formatos nos queden claros tenemos que tener en cuenta las
siguientes normas:

1./ [ ] CORCHETES.

Las palabras incluidas entre corchetes pueden ser incluidas o excluidas de la


instrucción.
[ON SIZE ERROR instrucción-imperativa-1]

2./ { } LLAVES.

Las palabras incluídas entre llaves son distintas opciones que tiene una sentencia. Se
tendrá que escoger una de ellas excluyendo las demás.

 Ejemplo:

MULTIPLY identificador-1
literal-1

3./ MAYUSCULAS.

Son las palabras reservadas del COBOL. Las palabras reservadas que están
subrayadas y no están entre corchetes y llaves son obligatorias en la sentencia. Las no
subrayadas son opcionales.

Ejemplo:
MULTIPLY

4./ MINUSCULAS.

Aparecerán siempre en minúsculas las variables y los literales numéricos y no


numéricos.

Ejemplo:
identificador-1

CAPITULO 1: PROGRAMACION COBOL Página 14 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

5./ PUNTOS SUSPENSIVOS

Nos indica que el contenido que hay entre corchetes o llaves puede repetirse un cierto
número de veces.

3. DIVISIONES EN COBOL
LAS CUATRO DIVISIONES

Como ya hemos indicado, un programa COBOL consta de 4 divisiones obligatorias,


cada una de las cuales están a su vez formada por, secciones unas y por párrafos
otras.

Cada división tiene una misión específica dentro del programa, y aunque en un
programa no sea necesaria la utilización de una de estas divisiones, ésta se deberá
poner:

Ejemplo:
IDENTIFICATION DIVISION. PROGRAM-ID. SUNION.
* En la Environment como vemos
* no se utiliza ninguna seccion

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.
01 VARIABLE PIC X(20) VALUE "SUNION S.A".

PROCEDURE DIVISION.
INICIO.
DISPLAY VARIABLE
STOP RUN.

FORMATO DE LAS DIVISIONES


IDENTIFICATION DIVISION.
PROGRAM-ID. nombre-programa.
[AUTHOR. comentario ...]
[INSTALLATION. comentario ...]
[DATE-WRITTEN. comentario ...]
[DATE-COMPILED. comentario ...]
[SECURITY. comentario ...]
[REMARKS. comentario ...]

ENVIRONMENT DIVISION.
[CONFIGURATION SECTION.]
[SOURCE-COMPUTER. nombre computadora.]
[OBJECT-COMPUTER. nombre computadora.]
[SPECIAL-NAMES.]
[INPUT-OUTPUT SECTION.]
[FILE-CONTROL.]
[I-O CONTROL.]

CAPITULO 1: PROGRAMACION COBOL Página 15 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

DATA DIVISION.
[FILE SECTION.]
[WORKING-STORAGE SECTION.]
[LINKAGE SECTION.]
[REPORT SECTION.]

PROCEDURE DIVISION.
[DECLARATIVES.
{SECTION nombre seccion.}
END DECLARATIVES.]
{nombre de sección.}
{nombre de párrafo.}

IDENTIFICATION DIVISION

Su función consiste en proporcionar información acerca del programa, quién lo


escribió, cuándo y donde fue escrito, cuándo se compiló e informaciones de seguridad.

El único párrafo obligatorio es el PROGRAM-ID seguido del nombre del programa.


Este nombre lo utiliza el compilador para reconocer al programa.

El resto de los párrafos son opcionales y meramente informativas.

El párrafo DATE-COMPILED, si está presente, será utilizado por el compilador para


grabar la fecha real de la última compilación que se realizó al programa.

IDENTIFICATION DIVISION.
PROGRAM-ID. EJEMPLO.
AUTHOR. JOSEDU.
INSTALLATION. SUNION CORPORATION.
DATE-WRITTEN. 2 DE ENERO DE 1991.
DATE-COMPILED.
SECURITY. ESTE PROGRAMA QUEDA RESTRINGIDO AL PERSONAL DEL DEPARTAMENTO
DE GRANDES SISTEMAS.
REMARKS. CUIDADITO CON TOCARLO.

ENVIRONMENT DIVISION

Su función consiste en ofrecer información sobre las características físicas del


ordenador sobre el que se efectua la compilación y ejecución del programa, así como
la descripción de todos los periféricos y dispositivos de entrada/salida que son
utilizados en la ejecución de nuestro programa.

ESTRUCTURA DE LA DIVISION :
ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

SOURCE-COMPUTER. nombre de computadora.


OBJECT-COMPUTER. nombre de computadora.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.

CAPITULO 1: PROGRAMACION COBOL Página 16 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FILE-CONTROL.
SELECT nombre-fichero ASSIGN TO nombre-externo.
SELECT nombre-fichero ASSIGN TO nombre-externo
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.

La ENVIRONMENT DIVISION se divide en dos secciones:


CONFIGURATION SECTION
INPUT-OUTPUT SECTION

CONFIGURATION SECTION

SOURCE-COMPUTER

Identifica el ordenador donde se produce la compilación.

OBJECT-COMPUTER

Identifica el ordenador donde será ejecutado el programa

SPECIAL-NAMES

En este párrafo podremos asignar cambios en los nombres utilizados por el COBOL
para identificar los dispositivos de entrada/salida.

Podemos tambien cambiar la puntuación decimal, mediante la sentencia:


DECIMAL-POINT IS COMMA

INPUT-OUTPUT SECTION

FILE-CONTROL

En este párrafo se asignan nombres físicos a cada uno de los ficheros lógicos del
programa, así como los dispositivos con los que están relacionados. También se
definirán los métodos de acceso y la organización de nuestros ficheros.

SELECT nombre-fichero ASSIGN TO nombre-externo.


SELECT nombre-fichero ASSIGN TO nombre-externo
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.

Como regla sintáctica de este párrafo indicaremos la obligación de poner un punto para
finalizar cada una de las SELECT que lo componga.

CAPITULO 1: PROGRAMACION COBOL Página 17 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

DATA DIVISION

Identifica cada fichero, sus registros, y las áreas de trabajo que van a ser usadas en la
PROCEDURE DIVISION.

Consta de cuatro secciones:


FILE SECTION
WORKING-STORAGE SECTION.
LINKAGE-SECTION.
REPORT-SECTION.

DATA DIVISION.

FILE-SECTION.
[descripcion de ficheros].
[descripcion de registros].
WORKING-STORAGE SECTION.
[descripcion de variables].
LINKAGE-SECTION.
REPORT-SECTION.

FILE SECTION (SECCION DE FICHEROS)

En esta sección se describen los ficheros a utilizar en el programa referidos en la


SELECT de la ENVIRONMENT DIVISION, especificando:

El nombre del fichero


El nombre asignado al registro del fichero
La estructura jerárquica de los campos de datos del registro (puede definirse
opcionalmente en la WORKING).
El tamaño del campo y el tipo de datos en cada campo de almacenamiento del
registro.

FD nombre-fichero
CHARACTERES
BLOCK CONTAINS [entero-1 TO] entero-2
RECORDS

RECORD CONTAINS [entero-3 TO] entero-4 CHARACTERS

RECORD IS STANDARD
LABEL
RECORDS ARE OMITTED

RECORD IS nombre-de-datos-3
DATA
RECORDS ARE nombre-de-datos-4

CAPITULO 1: PROGRAMACION COBOL Página 18 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CLAUSULA LABEL RECORDS

Indica la existencia o ausencia al SO de etiquetas para los ficheros.

LABEL RECORDS-STANDARD. El fichero tiene etiquetas estándar y serán


revisadas por el SO

LABEL RECORDS OMITTED. Significa ausencia de etiquetas como en el caso de


impresión.

CLAUSULA BLOCK CONTAINS

Indica el número de registros lógicos incluídos en un registro físico (bloque).

CLAUSULA RECORD CONTAINS

Especifica el número de caracteres que contine el registro.

CLAUSULA DATA RECORD

Su función es la de dar nombre a cada registro del fichero.

Sólo es obligatorio FD.

La entrada de descripción de ficheros comienza con FD en el MARGEN A y debe


haber una por cada fichero que aparezca en la ENVIRONMENT DIVISION.

El resto de las entradas se escribirán en el MARGEN B.

Hay un punto único al final de la FD.

A continuación de la información de la FD, cada fichero debe tener al menos el nivel 01


de la entrada de descripción de registro.
FD FICHERO-DE-ALUMNOS
BLOCK CONTAINS 100 RECORDS
RECORD CONTAINS 98 CHARACTERS
LABEL RECORDS ARE STANDARD
DATA RECORD IS DIRECC-ALUMNO.
01 DIRECC-ALUMNO.
05 NOMBRE-ALUMNO.
10 NOMBRE PIC X(10).
10 APELLIDOS PIC X(30).
05 DIRECCION.
10 NOMBRE-CALLE PIC X(30).
10 NUMERO PIC 9(3).
05 CIUDAD.
10 POBLACION PIC X(20).
10 CODIGO-POSTAL PIC X(5).

CAPITULO 1: PROGRAMACION COBOL Página 19 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

WORKING-STORAGE SECTION (SECCION DE ALMACENAMIENTO DE TRABAJO)

Esta sección de la DATA DIVISION permite al programador definir áreas de


almacenamiento de datos en memoria principal que requiere el programa.

La descripción de los datos es similar a la sección de ficheros con las siguientes


diferencias:

Los campos no forman parte de registros lógicos, no hay FD.


Hay un nuevo número de NIVEL (77) para definir campos de almacenamiento.
Se utiliza la cláusula VALUE para dar un valor inicial al campo de almacenamiento.
Ejemplo:
WORKING-STORAGE SECTION.

77 INDICE-TABLA-MATERIAS PIC 9(4).


77 PERTENENCIA-ASOC PIC XX.

01 LINEA-SALIDA.
05 ID-ALUMNO PIC X(5).
05 FILLER PIC X(3) VALUE SPACES.
05 NOM-ALUMNO PIC X(20).
05 FILLER PIC X(4) VALUE SPACES.
05 MEDIA PIC 9(2).99 VALUE ZERO.

SINTAXIS DE LA DESCRIPCION DE DATOS

La descripción de datos en la sección de ficheros consiste en detallar los campos del


fichero.
nombre-datos-1 [REDEFINES nombre-datos-2]
NUMERO-DE-NIVEL
FILLER

PICTURE
IS cadena de caracteres
PIC

DISPLAY

COMPUTATIONAL
[USAGE IS] COMP

COMPUTATIONAL-3
COMP-3

[BLANK WHEN ZERO]

JUSTIFIED
RIGHT
JUST

[OCCURS entero TIMES]

CAPITULO 1: PROGRAMACION COBOL Página 20 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CLAUSULA REDEFINES

Su función es dotar a una zona ya definida de memoria con una nueva definición en
cuanto a tipo y orden de datos. Tiene una importancia primordial en la definición de
tablas con las cláusulas OCCURS y VALUE.
Ejemplo:
05 CODIGO PIC X(6).
05 COD1 REDEFINES CODIGO.
10 COD21 PIC X(4).
10 COD22 PIC X(2).

CLAUSULA USAGE

Sirve para indicar la forma en que se representarán los datos en memoria.

CLAUSULA JUSTIFIED

Es para cambiar el ajuste de un movimiento de campos alfanuméricos a la derecha de


éstos, en vez de a la izquierda.

CLAUSULA PICTURE

Esta cláusula sirve par definir el tipo y la longitud del campo. Su formato es:
PICTURE
[IS] tira-de-caracteres.
PIC

Consideramos cada uno de los caracteres PICTURE que se pueden usar para escribir
los campos de datos que se definen en la Data Division.

Los caracteres que pueden formar la tira de caracteres pueden ser:


9, A, X, S, V, P
junto a los llamados de edición: $, (.), Z, (,), *, CR, DB, 0, B, +, -.

El tamaño del campo del item se indica por el número de caracteres escritos
sucesivamente en la cláusula PIC.

Caracter 9: Indica que una posición de memoria sólo contiene cualquiera de los
dígitos del 0 al 9.
Ejemplo:

05 cantidad-vendida PIC 9(6)


05 indice PIC 9(2)

CAPITULO 1: PROGRAMACION COBOL Página 21 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Caracter A: Indica que sólo contiene caracteres alfabéticos y espacios en


blanco, excluyendo caracteres numéricos y símbolos especiales.
Ejemplo:

05 nombre PIC A(10)


05 título PIC A(20)

Caracter X: Indica las posiciones alfanuméricas que contiene un campo. Pueden


incluir caracteres alfabéticos, caracteres numéricos y símbolos especiales.
Ejemplo:

05 nombre PIC X(10)


05 apellido PIC X(20)

Caracter S: Indica que el campo tiene signo operacional. En COBOL, todos los
campos se consideran positivos a no ser que se utilice este caracter. Sólo se puede
usar un caracter S y debe ser el primer caracter de la izquierda.
Ejemplo:

05 Importe PIC S9(6)V99

Se almacenará 12345678 pero representa 123456,78

Caracter V: Indica la posición de un punto decimal <supuesto>.

<supuesto> significa que no ocupa lugar en memoria pero que habrá que tenerlo en
cuenta a la hora de realizar operaciones aritméticas.
Ejemplo:

05 importe PIC 9(6)V99

Se almacenará 12345678 pero representa 123456,78.

Caracter P: Se utiliza junto con el carácter V. Se utiliza para indicar la posición


de un 0 que no ocupa espacio en memoria.
Ejemplo:

05 impuesto PIC VP(2)9(2)

Se almacenará 23 pero representa 0,0023

CAPITULO 1: PROGRAMACION COBOL Página 22 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Y EL CAMPO EN EL CAMPO SE
SI LA PICTURE ES Y LA CLASE ES (TIPO)
MEMORIA ES UTILIZA CONO
XXXX AAAA AAAA ALFANUMERICO
AAAA FFBB9 FFBB ALFABETICO
9V99 679 6,79 NUMERICO
9AA99 2MM4389 2MM43 ALFANUMERICO
VP(2)99 55DE 0,0055 NUMERICO
99P(4) 10 100000 NUMERICO
AX(3) LL23 LL23 ALFANUMERICO
S9(4) (+)1234 (+)1234 NUMERICO
S9(2)V99 (-)1234 12,34 NUMERICO

NOTA IMPORTANTE:

En toda operación aritmética que se haga en un programa COBOL, los operandos


serán literales numéricos o campos con PICTURE NUMERICA. En un campo
numérico, su PICTURE, sólo podrá estar formada por los caracteres 9, V, S y P.

CARACTERES DE EDICION

Estos se utilizan para definir campos que van a ser escritos mediante impresora.

Caracter $:

Escribe el signo pesos en la salida. Este se cuenta en el tamaño del campo,


agregándole una posición más a la longitud del campo.
Ejemplo:
05 CANTIDAD PIC $99V99
Representado en memoria 2513 y por impresora $25.13

Caracter punto decimal:

Este caracter separa los dígitos decimales de los enteros de un campo cuando es
editado. No puede haber más de un punto decimal dentro de una misma PIC, como
tampoco usarlo en conjunto con V.

Caracter coma:

Separa los enteros cuando se edita el contenido de un campo.

CAPITULO 1: PROGRAMACION COBOL Página 23 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Caracter Z:

Reemplaza los ceros no significativos, por blancos.


Ejemplo:

Contenido Salida

05 RESULTADO PIC Z99 25 b25


05 RESULTADO PIC ZZZ.ZZZ 0,0 bbbbbbb

Caracter (-):

Un signo negativo asociado a un valor siempre se representa en el almacenamiento en


el extremo izquierdo del campo.

Si el campo asociado es positivo y sin signo se imprimirá un blanco en lugar del signo,
de lo contrario si el valor del campo es negativo aparecerá el signo de - cuando se
edita el campo es negativo.

Caracter (+):

Un signo negativo asociado a un valor, siempre se representa en el almacenamiento en


el extremo izquierdo del campo.

Si el campo asociado es negativo aparecerá un signo de menos, de lo contrario, si el


valor del campo es positivo sin signo, aparece el signo de mas al editar el campo.
Ejemplo:

VALOR EDICION
05 número PIC 9(3)+ 252 252+
05 número PIC -9(2)V9 -351 -35.1

Caracteres DB:

CR significa crédito, DB significa débito. Se escriben a la derecha de un campo en la


cláusula PIC y aparecen solamente cuando el campo es negativo, el signo no aparece.
Ejemplos:

VALOR EDICION
05 número PIC 9(4)CR 140 0140bb
05 número PIC 9(4)DB -325 0325DB

Caracter B:

Sirve para insertar espacios en blancos en los lugares donde aparece B.

CAPITULO 1: PROGRAMACION COBOL Página 24 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Caracter 0:

Sirve para insertar 0 en los lugares donde aparece éste caracter.

Veremos unos ejemplos de utilización de los caracteres:


PICTURE CONTENIDO EDICION
$$,$$$.99- -234567 $2,345.67-
ZZZ.9+ -7637 763.7-
++,++9 0000 bbb+0
$*,***.99 1234567 $2,345.67
PP99 28 0028
+9(3)P(4) 123 +1230000
$ZZ,ZZZ.00 01574 $b1,574.00
$$$,$$$.00 00003 bbbbb$3.00

CLAUSULA VALUE

Esta cláusula es usada para inicializar los campos de la WORKING STORAGE


SECTION.

Veremos 2 formatos correspondientes a la VALUE.

FORMATO 1:
literal numeric
VALUE IS constante figurativa
literal no numeric

De esta forma se inicializan campos de la memoria antes de ejecutar el programa.

Ejemplos:
WORKING-STORAGE SECTION.
01 CONTADORES.
05 CONT-LDN PIC 99 VALUE ZEROS.
05 CONT-PAG PIC 9(4) VALUE ZEROS.
*
77 TOT-BRUTO PIC 9(7) VALUE ZEROS.
*
01 CABEC-1.
05 FILLER PIC X(50) VALUE SPACES.
05 FILLER PIC X(32) VALUE 'SUNION'.
05 FILLER PIC X(50) VALUE SPACES.
*
01 CABEC-2.
05 FILLER PIC X(50) VALUE SPACES.
05 FILLER PIC X(32) VALUE ALL "=".
05 FILLER PIC X(50) VALUE SPACES.

La cláusula VALUE con la función de inicializar campos sólo puede ser utilizada en
campos elementales.

CAPITULO 1: PROGRAMACION COBOL Página 25 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FORMATO 2:

VALUE IS literal-0
88 nombre-condición VALUE IS literal-1 THRU literal-2
VALUES ARE literal-3 THROUGH literal-4

Un campo elemental puede tener asociado uno o varios valores posibles. Estos valores
los definimos mediante el nivel 88, escrito a continuación de la definición del campo
elemental.

EJEMPLOS:
05 CAMPO A PIC 9(2)
88 TORNILLOS VALUE 01.
88 ARANDELAS VALUE 02.
88 TUERCAS VALUE 03 THRU 05

A diferencia del formato anterior, éste puede aparecer dentro de la descripción de un


registro en la File Section como muestra el ejemplo a continuación:
FILE SECTION

FD FICHERO-A

01 REG-FICHERO-A
05 NOMBRE PIC X(20)
05 APELLIDO PIC X(30)
05 ESTADO-CLIENTE PIC X
88 NUEVO VALUE 'A'
88 VIEJO VALUE 'V'
88 JEFE VALUE 'J' THRU 'm'.

CLAUSULA JUSTIFIED

Con esta cláusula indicamos que la alineación del campo que lo acompaña a la
derecha.

Su formato es:
JUSTIFIED
RIGHT
JUST

Esta opción se usa únicamente con campos elementales alfabéticos y alfanuméricos y


no puede utilizarse con la cláusula VALUE.

Ejemplo:
05 MEMORIA PIC X (4) VALUE 'mx' JUST RIGHT

CAPITULO 1: PROGRAMACION COBOL Página 26 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CLAUSULA USAGE

Sirve para indicar la forma en la que se van a representar los datos en memoria.

FORMATO:
COMPUTATIONAL-3 ó COMP-3
[USAGE IS] COMP
DISPLAY
INDEX

Display es la condición que se da por defecto. La declaración se hace en la Data


Division con la cláusula USAGE.

a. DISPLAY: Con este modo un dato se representa en el sistema de códigos


EBCDIC ó ASCII, donde cada carácter alfanumérico ocupa 1 Byte de memoria.

b. COMPUTATIONAL O COMP (equivalentes):

Hace que el valor del campo se represente en binario puro; ocupa 8 bits de memoria.

c. COMPUTATIONAL-3 O COMP-3

Es similar al computacional en que la CPU puede realizar operaciones aritméticas con


ambos tipos de números.

En este caso el campo se almacena en decimal empaquetado en 4 bits.

d. OPCION INDEX

Lo utilizamos cuando hacemos referencia a un índice que pertenece a una tabla. En el


capítulo sobre tablas en COBOL se detalla su uso.

Ejemplos:

01 GRUPO-CAMPOS
05 CAMPO-1 PIC 99V99 USAGE COMP
05 CAMPO-2 PIC X(5) USAGE DISPLAY
05 CAMPO-3 PIC ZZV99

NOTA: Exceptuando el comando Display, las demás opciones se deben describir


en campos con PICTURE de tipo numérico.

CAPITULO 1: PROGRAMACION COBOL Página 27 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CLAUSULA REDEFINES

Permite acceder a la zona de memoria previamente definida cambiando la


configuración de los campos que la compone o su nombre.

Su formato es:
número-de-nivel nombre-de-datos REDEFINES nombre-de-datos-2

Ejemplos:
05 nombre-cliente PIC X(20)
05 apellido-cliente PIC X(20)
05 dirección
10 calle PIC X(20)
10 número PIC 9(2)
10 código-postal PIC 9(5)
05 direc-red redefines Dirección PIC X(27)
..
..
..
05 código-cliente PIC X(4)
05 RCOD-cliente redefines código-cliente
10 num-cli PIC 99
10 dep-cli PIC xx

Condiciones en las que no podemos usarla:

A nivel 01, ni a nivel 77


Los nombres de datos a redefinir deben tener el mismo número de nivel.
El número de nivel de los nombres de datos a redefinir no pueden ser ni 66 ni 88

En el capítulo dedicado al manejo de tablas se explicará el método de definición de


tablas con el uso de la cláusula REDEFINES.

CLAUSULA RENAMES

Permite la capacidad de reagrupar los Items de datos elementales.

Su formato es:
66 nombre de dato-1 RENAMES nombre-de-dato-2 (THRU nombre-de-
dato-3)

CAPITULO 1: PROGRAMACION COBOL Página 28 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:

05 nombre-cliente
10 nombre PIC X(10)
10 inicial PIC X(2)
10 apellido PIC x(15)

05 TOTALES
10 bruto PIC 9(6)V99
10 neto PIC 9(6)V99
10 impuestos PIC 9(6)v99

66 ULTIMO-PAGO RENAMES APELLIDO THRU NETO

Es muy parecida a la cláusula Redefines con la diferencia de que la RENAME no


permite modificar la PICTURE del campo o de los campos.

Condiciones en las que no podemos usarla:

1) Nombre de datos-2 no puede estar en nivel 01, 77 ú 88


1) No se pueden usar Renames anidadas
2) Pueden escribirse varias cláusulas Renames pero deben ir al final de cada
registro lógico.

CLAUSULA OCCURS

Con esta cláusula se pueden conformar tablas, usándola en la Data Division, donde el
número asociado indica la cantidad de veces que se repite el elmento en la tabla.

Veremos 3 formatos:

FORMATO 1:

OCCURS entero (times)


Ejemplo:

01 TABLA-SUELDOS
05 SUELDO PIC 9(6)V99 OCCURS 12 TIMES

Nos referimos a cada uno de los elementos mediante SUELDO(I) donde I es un


subíndice, numérico que indica la posición del elemento de la tabla.

El subíndice para este ejemplo varía entre 1 y 12 inclusive.

CAPITULO 1: PROGRAMACION COBOL Página 29 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FORMATO 2:
OCCURS (ENTERO-1 TO) ENTERO-2 TIMES DEPENDING ON NOMBRE-DATO-1

Se puede usar cuando la cantidad de elementos que conformarán la tabla es variable,


su longitud depende del contenido de una variable (nombre-dato-1) definidas
previamente.
Ejemplo:

77 mes PIC 9(2)


01 tabla
05 tabla-sueldos
10 sueldos PIC 9(6)V99 OCCURS 1 TO 12 times
Depending on mes

Como mínimo va a tener un elemento y como máximo 12 elementos pero el que fija el
número exacto de elementos es el campo mes.

FORMATO 3:

OCCURS [entero-1 TO] entero-2 TIMES [DEPENDING ON nombre-datos-3]

ASCENDING
KEY is nombre-datos 2 [nombre-datos-3]...
DESCENDING

[INDEXED BY nombre-indice-1 nombre-indice-2]....

Esta cláusula se utiliza para localizar un elemento en la tabla junto a la cláusula


SEARCH.

Esta no clasifica la tabla sino que se limita a indicar el campo por el que está
clasificada la tabla añadiendo el ASCENDING o DESCENDING que indica como están
ordenados los elementos de la tabla para uno o más campos (ver capítulo de tablas).

Ejemplo:
01 TABLA-CODIGOS.
05 NUM-CODIGOS PIC 9(5) COMP.
05 DESCRIP-CODIGOS OCCURRS 1 TO 50 TIMES
DEPENDING ON NUM-CODIGOS
DESCENDING KEY IS CODIGO
INDEXED BY INDICE.
05 CODIGO PIC X(3).
05 NOTAS PIC X(35).

CAPITULO 1: PROGRAMACION COBOL Página 30 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CLAUSULA BLANK

Esta cláusula hace que un elemento se complete con espacios en blancos en donde
figuran ceros.

Formato:
BLANK WHEN ZERO

Esta cláusula puede ser simulada con una PICTURE con caracteres 'Z'.

Un dato en esta cláusula es considerado como editado, por lo que tiene que ser
USAGE DISPLAY.

Ejemplo:

05 sueldo $$,$$$.99 Blank when ZERO

Colocará blancos en lugar de 0 no significativos.

IDENTIFICADORES CON NOMBRES DUPLICADOS: CALIFICACION

Es un nombre de datos de nivel jerárquico mayor que el nombre que califican.

Me permite tener uno o más campos de igual nombre pero calificados por nombres de
datos distintos.
Ejemplo:

05 nombres-jefes
10 nombre PIC X(20)
10 apellido PIC X(30)

05 nombres-empleados
10 nombre PIC X(10)
10 apellido PIC X(20)

Vemos que definimos 2 campos que se llaman igual.

La técnica que hay de diferenciarlos se llama calificación, consiste en utilizar las


palabras OF o IN al referenciarnos a un campo.

Ejemplo:
MOVE nombre OF nombres-empleados TO ...
MOVE apellido OF nombres-jefe TO apellido OF nombres-empleados

CAPITULO 1: PROGRAMACION COBOL Página 31 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LINKAGE SECTION

Esta sección se utiliza cuando vamos a trabajar con subprogramas. Su función es


indicar que datos pasarán entre el programa y los subprogramas.

Ejemplo: Dentro de un programa llamador


LINKAGE SECTION

01 A PIC X
01 B PIC 9
01 C PIC XX

PROCEDURE DIVISION

CALL 'SUBPRO' USING A, B, C

Su estructura y organización son similares a la WORKING-STORAGE SECTION con la


diferencia de que no está permitida la cláusula VALUE, sólo para los posibles nombres
de condición (nivel 88).

Del mismo modo existirá una sección LINKAGE en el subprograma <SUBPRO> donde
definiremos los campos que recibe del programa que lo llamo.

Subprograma <subpro>
LINKAGE SECTION

01 X PIC X.
01 Y PIC 9.
01 Z PIC XX.

PROCEDURE DIVISION USING X, Y, Z


Donde:
A corresponde a X
B corresponde a Y
C corresponde a Z

Observamos que no es obligatorio que le llamen igual pero si su tipo y cargo deben
corresponderse.

PROCEDURE DIVISION

FORMATO:
PROCEDURE DIVISION.
[DECLARATIVES.
{SECTION nombre seccion.}
END DECLARATIVES.]
{nombre de sección.}
{nombre de párrafo.}

CAPITULO 1: PROGRAMACION COBOL Página 32 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FUNCION:

Una vez declaradas en las divisiones anteriormente citadas todas las herramientas que
vamos a utilizar en nuestro programa, llámense ficheros, variables de trabajo etc..., nos
queda la división que dentro del programa se encarga de lo que se denomina
PROCESO.

En un PROCESO normalmente nos podemos encontrar:

a. Tratamiento de ficheros (Lecturas, Actualizaciones, Borrados, etc...).


b. Tratamiento de cadenas de caracteres.
c. Operaciones aritméticas, transferencia de datos, etc.

ELEMENTOS QUE LA FORMAN:

En la PROCEDURE nos encontramos con 3 elementos que se repetirán durante toda


la división y son:

PARRAFOS
SECCIONES
SENTENCIAS
Se denomina párrafo a un conjunto de sentencias a las cuales se les asigna un nombre
con el que poder referenciarlas.

Ejemplo:
INICIO.
PERFORM ABRIR-FICHEROS
PERFORM ESCRIBIR-FICHERO
PERFORM CERRAR-FICHEROS.
FINAL1.
STOP RUN.
*
* ---- Párrafo ABRIR-FICHEROS
*
ABRIR-FICHEROS.
OPEN INPUT FICHERO-1
OUTPUT FICHERO-2.
*
* ---- Párrafo ESCRIBIR-FICHERO
*
ESCRIBIR-FICHERO.
READ FICHERO-1.
WRITE FICHERO-2 FROM FICHERO-1.
*
* ---- Párrafo CERRAR-FICHEROS
*
CERRAR-FICHEROS.
CLOSE FICHERO-1 FICHERO-2.

CAPITULO 1: PROGRAMACION COBOL Página 33 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Con los párrafos tenemos que seguir unas normas sintácticas:

El nombre de un párrafo nunca deberá ser igual a una palabra reservada del COBOL.
Después del nombre del párrafo siempre debe ir un punto.
Al finalizar el grupo de sentencias que formen el párrafo, este se cerrará con un punto.

SECCIONES

Se denomina sección a un grupo de párrafos al que se le asigna un nombre para poder


ser referenciado. Dicho nombre irá seguido de la palabra SECTION.

Ejemplo:
INICIO-SECTION.
INICIO.
OPEN INPUT REG-MAESTRO.
FINALES.
CLOSE REG-MAESTRO.
STOP RUN.

Las secciones en la procedure no son obligatorias y tampoco son muy utilizadas.

SENTENCIAS

Están formadas por palabras reservadas del COBOL y palabras creadas por el
programador.

Ejemplo:
MOVE 3500 TO TOTAL-PESETAS.

Dada la gran cantidad de sentencias o instrucciones que aparecen en esta división, las
vamos a agrupar dependiendo de su utilidad:

INSTRUCCIONES DE ENTRADA/SALIDA.
INSTRUCCIONES DE TRANSFERECIA DE DATOS.
INSTRUCCIONES DE PARADA.
INSTRUCCIONES ARITMETICAS.
INSTRUCCIONES CONDICIONALES.
INSTRUCCIONES DE TRATAMIENTO DE CADENAS DE CARACTERES.
INSTRUCCIONES DE BIFURCACION.
INSTRUCCIONES QUE MANIPULAN EL TEXTO FUENTE

CAPITULO 1: PROGRAMACION COBOL Página 34 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INSTRUCCIONES DE ENTRADA/SALIDA

INSTRUCCION OPEN

FUNCION:

Instrucción que nos permite abrir los ficheros para su posterior tratamiento.

FORMATO:
OPEN INPUT nombre-archivo-1 [WITH NO REWIND] ...
OUTPUT nombre-archivo-2 [WITH NO REWIND] ...
I-O nombre-archivo-3 ...
EXTEND nombre-archivo-4 ...

La instrucción OPEN realiza las siguientes funciones:

Abre el fichero.
Comprueba, si la tuviera, la etiqueta asignada al fichero.
Posiciona el puntero en el primer registro.

Hay que tener en cuenta que la instrucción OPEN posiciona el puntero en el primer
registro, pero no lo carga en memoria para su tratamiento, para ello tendremos que
utilizar otras instrucciones que veremos más adelante.

Existen 4 formas de abrir un fichero:

INPUT:

Abre el fichero para sólo lectura.

Ejemplo:

Sentencia:
OPEN INPUT FICH-1.
Resultado:

FICH-1
0001 BANESTO <- puntero
0002 CENTRAL
0003 HISPANO
.
.
.

CAPITULO 1: PROGRAMACION COBOL Página 35 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

OUTPUT:

Abre el fichero para sólo escritura.

Ejemplo:

Sentencia:
OPEN OUTPUT FICH-1
Resultado:

FICH-1
0001 BANESTO <- puntero
0002 CENTRAL
0003 HISPANO

Con esta opción del OPEN, al escribir posteriormente en el fichero, machacamos la


información que tuvieramos almacenada.

I-O:

Abre el fichero para lectura-escritura (sólo ficheros relativos e indexados).

EXTEND:

Abre el fichero para escritura, pero posicionándo el puntero a continuación del último
registro del fichero (secuenciales).

Ejemplo:

Sentencia:
OPEN EXTEND FICH-1
Resultado:

FICH-1
0001 BANESTO
0002 CENTRAL
0003 HISPANO
<-- puntero

En esta opción, conservamos la información contenida en el fichero.

CAPITULO 1: PROGRAMACION COBOL Página 36 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplos:

Valor inicial:
FD FICH-1 LABEL RECORD STANDARD.

01 REG-FICH-1 PIC X(20)

Sentencias:
OPEN EXTEND FICH-1.
MOVE `0004POPULAR' TO REG-FICH-1.
WRITE REG-FICH-1.
CLOSE FICH-1

Resultado:

FICH-1.
0001 BANESTO
0002 CENTRAL
0003 HISPANO
0004 POPULAR

Con un sólo OPEN podemos abrir más de un fichero.

Ejemplo:
OPEN INPUT FICHERO-1 FICHERO-2
OUTPUT IMPRESO-1 IMPRESO-2.

INSTRUCCION READ

FUNCION:

Carga en memoria central, un registro para su proceso.

FORMATO:

Tiene 3 formatos:

FORMATO 1:

Para ficheros secuenciales (o relativos e indexados tratados secuencialmente).


READ nombre-archivo-1 [NEXT] RECORD [INTO identificador-1]
[AT END instrucción-imperativa-1]
(COBOL-85) [NOT AT END instrucción-imperativa-2]
(COBOL-85) [END-READ]

CAPITULO 1: PROGRAMACION COBOL Página 37 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FORMATO 2:

Para ficheros relativos.


READ nombre-archivo-1 RECORD [INTO identificador-1]
[INVALID KEY instrucción-imperativa-1]
(COBOL-85) [NOT INVALID KEY instrucción-imperativa-2]
(COBOL-85) [END-READ]

FORMATO 3:

Para ficheros indexados.


READ nombre-archivo-1 RECORD [INTO identificador-1]
[KEY IS nombre-dato-1]
[INVALID KEY instrucción-imperativa-1]
(COBOL-85) [NOT INVALID KEY instrucción-imperativa-2]
(COBOL-85) [END-READ]

En este apartado sólo explicaremos el READ para secuenciales puros. Las demás
opciones las explicaremos en el capítulo de FICHEROS.

En la sentencia READ hay que tener presente lo siguiente:

No se podrá realizar una READ si anteriormente no hemos abierto el fichero.


Sólo se podrá realizar una READ en fichero abierto para lectura.
La instrucción READ carga los campos del registro donde apunte el puntero en
memoria y coloca el puntero en el siguiente registro.

Ejemplo:

Valores del fichero de entrada :

FICH-1

memoria-central

BANESTO

BANESTO

CENTRAL

Instrucción:

READ FICH-1

Resultado:

memoria-central

CAPITULO 1: PROGRAMACION COBOL Página 38 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FICH-1

POPULAR

BANESTO
POPULAR
CENTRAL <- Puntero

AT END

Cuando la instrucción READ lee el registro con la marca de final de fichero, se ejecuta
la instrucción que va después de AT END.

INTO

Los datos leídos por la instrucción READ se almacenan en 1 variable o reg-de-trabajo.

Esta opción es muy útil para conservar los datos originales mientras trabaja con los
depositados en la variable de trabajo.

Ejemplos:

Valores iniciales:
FD FICH-1 LABEL RECORD STANDARD.
01 REG-FICH-1 PIC X(80).

WORKING-STORAGE SECTION.
01 REG-TRABAJO PIC X(80).

Sentencia:
PROCEDURE
OPEN INPUT FICH-1
READ FICH-1 INTO REG-TRABAJO

Resultado:
REG-FICH-1 = `BANESTO'
REG-TRABAJO = `BANESTO'

CAPITULO 1: PROGRAMACION COBOL Página 39 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INSTRUCCION WRITE

FUNCION:

Instrucción de salida. Graba información en un fichero abierto en modo de OUTPUT.

FORMATO:

Esta instrucción tiene 2 formatos:

FORMATO 1:

Para grabación de registros en ficheros secuenciales en cinta o disco.

WRITE nombre-registro-1 [FROM identificador-1]

FORMATO 2:

1) Para impresoras:
WRITE nombre-registro-1 [FROM identificador-1]

identificador-2 LINE
BEFORE Entero-1 LINES
ADVANCING nombre-nemotécnico
AFTER PAGE

END-OF-PAGE
AT instrucción imperativa
EOP

END-OF-PAGE
(COBOL 85) NOT AT instrucción-imperativa-2
EOP

(COBOL 85) [END-WRITE]

3) Para ficheros relativos e indexados.


WRITE nombre-registro-1 [FROM identificador-1]
[INVALID KEY instrucción-imperativa-1]
(COBOL-85) [NOT INVALID KEY instrucción-imperativa-2]
(COBOL-85) [END-WRITE]

Este formato se explicará más adelante en le capítulo de ficheros.

El primer formato es el utilizado para grabar datos en un fichero secuencial abierto


anteriormente en modo OUTPUT.

CAPITULO 1: PROGRAMACION COBOL Página 40 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Para grabar un registro en un fichero podemos utilizar 2 formas:

1.- Moviendo los datos al registro


MOVE CAMPO-A TO REG-1

y luego escribiendo
WRITE REG-1

2.- Haciéndolo simultáneamente


WRITE REG-1 FROM CAMPO-A

El segundo formato es el utilizado para sacar listados por impresoras.

La 1ª parte del formato es igual a la anteriormente explicada y funciona de la misma


manera.

La 2ª parte está formada por palabras reservadas que nos permitan "comunicarnos"
con la impresora para controlar nuestro listado.

BEFORE identificador LINE


ADVANCING
AFTER Entero LINES

Control de líneas. Con esta utilidad de la sentencia controlamos los saltos de línea.
WRITE LIS-1 FROM CAMPO-A AFTER ADVANCING 4 LINES.

Esta sentencia lo que haría sería mandar campo-A a imprimir después [AFTER] de
saltar la impresora 4 líneas.

Con la palabra BEFORE, primero se escribe y después se avanzan las líneas


deseadas.

CAPITULO 1: PROGRAMACION COBOL Página 41 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ADVANCING PAGE

Como su traducción indica, provoca un salto de página, antes o después de la


impresión (AFTER ó BEFORE).

END-OF-PAGE
AT Instrucción Imperativa
EOP

Controla el final de página, por el nº de líneas escrito y las características del fichero
que hemos descrito en la FD y ejecuta la instrucción que le pongamos a continuación.

Ejemplo:
WRITE REG-A FROM CAMPO-A AFTER 2 LINES
AT EOP PERFORM CABECERAS.

CLOSE0

FUNCION:

Cerrar ficheros.

FORMATO:
REEL
CLOSE nombre-archivo WITH NO REWIND
UNIT LOCK

La sentencia CLOSE cierra ficheros, independientemente de la forma en que éstos


fueron abiertos (INPUT,OUTPUT).

La ejecutaremos siempre sobre archivos abiertos anteriormente con una OPEN, porque
en caso contrario nos daría un error al intentar cerrar un fichero que no está abierto.

REEL

Para archivos en cinta magnética que ocupen más de un carrete.

NO REWIND

Cuando cerramos en ficheros en cinta, automáticamente la cinta se rebobina hasta que


las cabezas lectoras localizan el principio del fichero.

Al poner NO REWIND, el rebobinado no se efectúa.

CAPITULO 1: PROGRAMACION COBOL Página 42 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LOCK

Es una forma de proteger la cinta, la cual no se podrá utilizar hasta que el operador no
la desproteja, pulsando una tecla posicionando de nuevo las cabezas de lectura sobre
la cinta.

Ejemplo:
OPEN INPUT FICH-1 FICH-2
OUTPUT LIST-1.
........
CLOSE FICH-1 FICH-2 LIST-1.

INSTRUCCION ACCEPT

FUNCION:

Introduce información en posiciones de la memoria central desde cualquier dispositivo


de entrada, normalmente el teclado.

FORMATO 1:
ACCEPT identificador-1

FORMATO 2:
ACCEPT identificador-2 FROM DATE
DAY
DAY-OF-WEEK
TIME

ACCEPT identificador-1

Aceptamos datos desde teclado que se almacenarán en el identificador-1.

Trabajando en un microordenador y con ciertos compiladores, esta instrucción tiene un


conjunto de palabras reservadas que lo complementan, como son:

literal-1
LINE
variable-1

Posiciona el cursor en una línea de la Pantalla.

literal-2
POSITION
variable-2

Posiciona el cursor en una columna determinada de la pantalla.

CAPITULO 1: PROGRAMACION COBOL Página 43 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LOW

Acepta los datos en baja luminosidad.

HIGH

Acepta los datos en alta luminosidad.

TAB

Cuando hemos rellenado el campo entero, debemos de dar a <┘ para pasar a otro
campo.

PROMPT literal

Nos señala en pantalla la longitud del campo mediante el literal que pongamos en la
PROMPT.

OFF

A la hora de realizar el ACCEPT no se visualizan los datos que se introducen.

[NO] BEEP

Pitido que nos avisa cuando hemos llenado el campo receptor.

Ejemplo:

Sentencia

ACCEPT CAMPO-A LINE 10 POSITION 15 LOW NO BEEP.

Resultado

Se nos posicionaría el cursor en la línea 10, columna 15, los datos introducidos
apareceran en baja luminosidad y no sonaría el pitido al rellenar el CAMPO-A.

DATE
DAY
ACCEPT identificador-2 FROM DAY-OF-WEEK
TIME

Recoge desde el sistema el dato que le pedimos y lo almacena en el identificador-2.

CAPITULO 1: PROGRAMACION COBOL Página 44 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:

Valor inicial:

Fecha del sistema 911231

01 CAMPO-A
05 AA PIC XX.
05 MM PIC XX.
05 DD PIC XX.

Sentencia

ACCEPT CAMPO-A FROM DATE

Resultado

AA = `91'

MM = `12'

DD = `31'

INSTRUCCION DISPLAY

FUNCION:

Imprime en Pantalla el contenido de una variable.

FORMATO:
identificador-1
DISPLAY ...
literal-1

El número de literales e identificador que se pueden utilizar en una sola instrucción


DISPLAY depende del compilador que estemos utilizando.

Ejemplo:
Valores iniciales
CAMPO-A = `PEPE'
CAMPO-B = `MANOLO'
CAMPO-C = `JUAN'

Instrucción
DISPLAY CAMPO-A ', ' CAMPO-B ' Y ' CAMPO-C

Resultado:
PEPE, MANOLO Y JUAN

CAPITULO 1: PROGRAMACION COBOL Página 45 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Al igual que el ACCEPT, trabajando en MICRO, tenemos una serie de palabras que
complementan la instrucción DISPLAY.

LINE, POSITION, LOW, HIGH, funcionan igual que en el ACCEPT.

BLINK

Nos muestra el contenido de una variable de forma parpadeante.

REVERSE

Muestra la variable en video-inverso.

Ejemplo:

DISPLAY CAMPO-A LINE 12 POSITION 15 BLINK REVERSE

INSTRUCCIONES DE TRANSFERENCIA DE DATOS

Las instrucciones de transferencia de datos son aquellas que nos permiten tranferir
valores entre las variables que tenemos en nuestro programa. La forma más común
para transferir datos es la utilización del verbo MOVE, pero existen otras formas
distintas de transferir datos como son:

Cláusula VALUE en la WORKING-STORAGE SECTION cuando inicializamos una


variable.
La instrucción COMPUTE al transferir el resultado de una expresión aritmética a una
variable determinada.
La opción GIVING en todas las Instrucciones aritméticas.
La opción FROM de la instrucción WRITE y la opción INTO de la instrucción READ.

A la hora de transferir datos tenemos que tener dos cosas muy en cuenta:

LA LONGITUD DE LOS CAMPOS

Si intentamos transferir datos de una variable a una más pequeña existirá lo que
denominamos truncamiento de datos, ya sea por la izquierda o por la derecha,
dependiendo de la naturaleza de los campos.

CAPITULO 1: PROGRAMACION COBOL Página 46 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

LA NATURALEZA DE LOS CAMPOS:


Para que la instrucción de transferencia se ejecute con normalidad tenemos que tener
mucho cuidado con las pictures de las variables que utilizamos:

NATURALEZA DEL CAMPO RECEPTOR


NATURALEZA Alfanumérico Numérico Entero
CAMPO Alfanumérico Numérico no entero
EMISOR Alfabético Editado Numérico Editado
Alfabético SI SI NO
Alfanumérico SI SI NO
Alfanumérico editado SI SI NO
Numérico entero NO SI SI
Numérico no entero NO SI SI
Numérico editado NO SI SI

INSTRUCCION MOVE

FUNCION:

Transfiere datos entre dos o más variables.

FORMATO:

Esta instrucción dispone de dos formatos distintos:

FORMATO A:
identif-1
MOVE TO {identif-2} [identif-3] ...
literal-1

Este formato transfiere los datos del identif-1 o del literal-1 al identif-2 y al identif-3 etc.

Cuando finaliza la sentencia, las tres variables identif-1, identif-2 e identif-3 contendrán
los mismos datos.

Ejemplo:
Valores Iniciales:

01 CAMPO-A PIC X(5) VALUE 'JULIA'.


01 CAMPO-B PIC X(6) VALUE 'PALOMA'.

Sentencia:
MOVE CAMPO-A TO CAMPO-B

Resultado:
CAMPO-A = 'JULIA'
CAMPO-B = 'JULIA '

CAPITULO 1: PROGRAMACION COBOL Página 47 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

La sentencia MOVE permite transferir datos simultáneamente a más de una variable.

MOVE CAMPO-A TO CAMPO-B CAMPO-C CAMPO-D

FORMATO B:
CORRESPONDING
MOVE identificador-1 TO identififcador-2
CORR

Transfiere los datos de los campos elementales que forman el identificador-1 a los
campos elementales del identificador-2 que tengan igual nombre.

Ejemplo:
Valores iniciales:

01 CAMPO-A.
05 A PIC X(7) VALUE 'PRIMERO'.
05 B PIC X(7) VALUE 'SEGUNDO'.
05 C PIC X(7) VALUE 'TERCERO'.

01 CAMPO-B.
05 B PIC X(7) VALUE SPACES.
05 D PIC X(7) VALUE SPACES.
05 A PIC X(7) VALUE SPACES.

Sentencia:
MOVE CORRESPONDING CAMPO-A TO CAMPO-B

Resultado:
B OF CAMPO-B = 'SEGUNDO'
D OF CAMPO-B = ' '
A OF CAMPO-B = 'PRIMERO'

INSTRUCCION SET

FUNCION:

Esta instrucción nos permite activar nombres-de-condición.

FORMATO:
SET nombre-de-condicion TO TRUE

En la versión 85 se ha intentado aprovechar al máximo la funcionalidad de los nombres


de condición.

En la version 74, para variar el estado de un nombre de condición se le transfería


mediante una MOVE el valor deseado.

CAPITULO 1: PROGRAMACION COBOL Página 48 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo: Valores iniciales:


01 ESTADO-FICHERO PIC XX.
88 FINAL-FICHERO VALUE 'SI'.
88 NO-FINAL-FICHERO VALUE 'NO'.

Sentencia:

READ FICHERO AT END MOVE 'SI' TO ESTADO-FICHERO.


IF FINAL-FICHERO
CLOSE FICHERO.

Resultado:(cuando llegamos al final del fichero)

FINAL-FICHERO = 'SI'

Con el verbo SET se simplifica la operación 'activando' los nombres de condición de la


siguiente forma:

Ejemplo:

Valores iniciales:
01 ESTADO-FICHERO PIC XX.
88 FINAL-FICHERO VALUE 'SI'.
88 NO-FINAL-FICHERO VALUE 'NO'.

Sentencia:
READ FICHERO AT END SET FIN-FICHERO TO TRUE.
IF FINAL-FICHERO
CLOSE FICHERO.

Resultado:(cuando llegamos al final del fichero)

FINAL-FICHERO = 'SI'

INSTRUCCIONES DE PARADA

FUNCION:

Detiene temporal o definitivamente el programa en ejecución.

FORMATO:
RUN
STOP
literal-1

STOP RUN

Siguiendo en secuencia el programa, la sentencia STOP RUN debe de ser la última


instrucción del programa, ya que con ella finaliza la ejecución del mismo.

CAPITULO 1: PROGRAMACION COBOL Página 49 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:
PROCEDURE DIVISION.

INICIO.
OPEN ......
.
.
.
STOP RUN.

STOP literal:

STOP con un literal provoca dos acciones:

Despliega el literal en pantalla.


Parará la ejecución del programa temporalmente hasta que el usuario pulse una tecla
determinada, ejecutándose a continuación la siguiente sentencia al STOP.
Ejemplo:
PROCEDURE DIVISION.
INICIO.
OPEN ......
.
.
.
.
STOP 'PARADA DEL PROGRAMA'
PERFORM SEGUIR
.
.
.
STOP RUN.

CAPITULO 1: PROGRAMACION COBOL Página 50 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INSTRUCCIONES ARITMETICAS

Son aquellas instrucciones con las que el COBOL nos permite realizar operaciones
simples como son sumar, restar, multiplicar, etc..

Toda instrucción aritmética esta formada por un verbo aritmético, palabras reservadas
del COBOL (que son comunes a todas las sentencia como son : TO, INTO, FROM
etc...) y variables o literales numéricos.

SENTENCIA ADD

FUNCION:

La sentencia ADD nos permite sumar 2 o mas variables y/o literales y el resultado
almacenarlo en una variable.

FORMATO:

Esta sentencia tiene 3 formatos distintos :

FORMATO A:
identificador-1
ADD TO identificador-2 [ROUNDED]...
literal-1

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-ADD]

Suma el contenido del identificador-1 al contenido del identificador-2 alamcenando el


resultado en este último.

Ejemplo:

Valores iniciales:
CAMPO-A = 15 CAMPO-B = 45

Sentencia:
ADD CAMPO-A TO CAMPO-B

Resultado:
CAMPO-A = 15 CAMPO-B = 60

El verbo ROUNDED lo utilizaremos cuando queramos redondear el resultado de


nuestra suma. Con este verbo el redondeo se hace automáticamente y funciona de la
siguiente manera:

CAPITULO 1: PROGRAMACION COBOL Página 51 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Supongamos que tenemos definido los campos:


01 CAMPO-SUM PIC 9V99
01 CAMPO-1 PIC 9V999

el valor de nuestros campos es el siguiente:


CAMPO-1 = 1,126 CAMPO-SUM = 2,06
Con el verbo ROUNDED
ADD CAMPO-1 TO CAMPO-SUM ROUNDED

El resultado de la suma es 3,186 y experimenta un redondeo de 0,005 quedando en


3,191. Al tener CAMPO-SUM una picture de 2 decimales, el tercer decimal se trunca,
quedando como resultado definitivo 3,19.

El verbo ON SIZE ERROR lo utilizamos para controlar aquellas sumas que desborden
nuestro campo de resultado, lo cual ocasionaría un truncamiento.

Ejemplo:

Valores iniciales:
01 CAMPO-1 PIC 99.
01 CAMPO-2 PIC 9.

CAMPO-1 = 14 CAMPO-2 = 4

Sentencia:

ADD CAMPO-1 TO CAMPO-2


ON SIZE ERROR
DISPLAY '--ERROR!! TRUCAMIENTO EN CAMPO-2'.

El resultado de la suma sería 18, pero al tener CAMPO-2 una picture de 9, se perdería
el dígito de la izquierda, quedando como resultado de la suma 8, lo que equivaldría a
un dato falso.

ON SIZE ERROR detecta este error y ejecuta la sentencia o sentencias que vayan a
continuación de él. En este caso aparecería en nuestras pantallas:
--ERROR!! TRUNCAMIENTO EN CAMPO-2

El verbo NOT ON SIZE ERROR (COBOL 85) ejecuta una serie de sentencias cuando
la ejecución de la suma ha sido correcta.

La palabra END-ADD se utiliza en COBOL 85 para cerrar la sentencia ADD y


equivaldría al punto '.' en COBOL 74.

CAPITULO 1: PROGRAMACION COBOL Página 52 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:
ADD CAMPO-1 TO CAMPO-SUM ROUNDED
ON SIZE ERROR
DISPLAY 'ERROR EN SUMA'
NOT ON SIZE ERROR
PERFORM CALCULOS
END-ADD

FORMATO B: ...
identif-1 identif-2
ADD TO ... GIVING ident-n [ROUNDED]
literal-1 literal-2

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-ADD]

Suma el contenido del identif-1 o literal-1 al contenido del identif-2 o literal-2


alamcenando el resultado en el ident-n, machacando su anterior valor.

Ejemplo:

Valores iniciales:
CAMPO-1 = 34 CAMPO-2 = 45

Sentencia:
ADD CAMPO-1 TO 60 GIVING CAMPO-2

Resultado:
CAMPO-1 = 34 CAMPO-2 = 94

FORMATO C:
CORRESPONDING
ADD identif-1 TO identif-2 [ROUNDED]
CORR

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-ADD]

La suma con opción CORRESPONDING se realiza con campos divididos en


subcampos. Hace que se sumen aquellos subcampos que se llamen igual.

CAPITULO 1: PROGRAMACION COBOL Página 53 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:

Valores iniciales:
01 CAMPO-1.
05 A PIC 99 VALUE 10.
05 B PIC 99V999 VALUE 5,10.
05 C PIC 9V999 VALUE 1,001.

01 CAMPO-2.
05 B PIC 9V99 VALUE 1,02.
05 A PIC 99V9 VALUE 14,6.

Sentencia:
ADD CORRESPONDING CAMPO-1 TO CAMPO-2

Resultado:
B OF CAMPO-2 = 5.10 + 1.02
A OF CAMPO-2 = 10 + 14.6

SENTENCIA SUBTRACT

FUNCION:

La sentencia SUBTRACT nos permite restar 2 o más variables y/o literales.

FORMATO:

Esta sentencia tiene 3 formatos distintos :

FORMATO A:
ident-1 ident-2
SUBTRACT ... FROM ident-n [ROUNDED]
lit-1 lit-2

[ON SIZE ERROR instrucción-imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-SUBTRACT]

La operativa de esta sentencia es la siguiente:

El minuendo es el ident-m que va colocado despues del FROM y el sustraendo las


variables y/o literales que van colocados después del verbo SUBTRACT.

Las variantes de la sentencia,ROUNDED, ON SIZE ERROR, NOT ON SIZE ERROR y


END-SUBTRACT funcionan igual que en la suma.

CAPITULO 1: PROGRAMACION COBOL Página 54 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:

Valores iniciales:
CAMPO-A = 34
CAMPO-B = 20
CAMPO-C = 8

Sentencia:
SUBTRACT CAMPO-B CAMPO-C FROM CAMPO-A ROUNDED
ON SIZE ERROR
DISPLAY ' ERROR EN LA RESTA'
NOT ON SIZE ERROR
PERFORM LISTADOS
END-SUBTRACT

Resultado:
CAMPO-A = CAMPO-A – CAMPO-B – CAMPO-C
= 34 - 20 - 8
CAMPO-A = 6
CAMPO-B = 20
CAMPO-C = 8

FORMATO B:

ident-1 ident-2 ident-n


SUBTRACT ... FROM GIVING ident-z [ROUNDED]
lit-1 lit-2 lit-n

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-SUBTRACT]

El funcionamiento de este formato es muy parecido al anterior, la diferencia está en el


almacenamiento del resultado. En este formato el resultado de la resta queda
almacenado en la variable que colocamos a continuación de la palabra GIVING,
quedando inalterable el valor inicial del minuendo y del sustraendo.

Ejemplo:

Valores iniciales:
CAMPO-A = 23
CAMPO-B = 14
CAMPO-C = 10
CAMPO-D = 56

Sentencia:
SUBTRACT CAMPO-A CAMPO-B FROM CAMPO-D GIVING CAMPO-C

CAPITULO 1: PROGRAMACION COBOL Página 55 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Resultado:
CAMPO-C = CAMPO-D - CAMPO-A - CAMPO-B
= 56 – 23 - 14
CAMPO-A = 23
CAMPO-B = 14
CAMPO-C = 19
CAMPO-D = 56

FORMATO C:
CORRESPONDING
SUBTRACT identif-1 FROM identif-2 [ROUNDED]
CORR

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-SUBTRACT]

La resta con opción CORRESPONDING, funciona igual que la suma, se utiliza con
campos subdivididos en campos de nivel inferior y de minuendo y de subtraendo se
utizarán los subcampos de igual nombre.

Ejemplo:

Valores iniciales:
01 CAMPO-1.
05 A PIC 99 VALUE 10.
05 B PIC 99V999 VALUE 1.02.
05 C PIC 9V999 VALUE 1.001.
01 CAMPO-2.
05 B PIC 9V99 VALUE 5.04.
05 A PIC 99V9 VALUE 14.6.

Sentencia:
SUBTRACT CORRESPONDING CAMPO-1 FROM CAMPO-2

Resultado:
B OF CAMPO-2 = 5.04 - 1.02
A OF CAMPO-2 = 14.6 - 10

SENTENCIA MULTIPLY

FUNCION:

La sentencia MULTIPLY nos permite multiplicar dos o más variables y/o literales.

CAPITULO 1: PROGRAMACION COBOL Página 56 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FORMATO:

Esta sentencia tiene 2 formatos distintos :

FORMATO A:

identif-1
MULTIPLY BY identificador-2 [ROUNDED]
literal-1

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-MULTIPLY]

En esta sentencia situaremos al multiplicando detrás de la palabra MULTIPLY y al


multiplicador a continuación de la palabra BY. El resultado queda almacenado en el
multiplicador por lo que nunca podremos poner de multiplicador un literal numérico
sino siempre una variable.

Ejemplo:

Valores iniciales:
01 CAMPO-A PIC 9(3) VALUE 124.

Sentencia:
MULTIPLY 5 BY CAMPO-A

Resultado:
CAMPO-A = 620

FORMATO B:
ident-1 ident-2
MULTIPLY BY GIVING ident-3 [ROUNDED]
lit-1 lit-2

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-MULTIPLY]

Como en sentencias anteriores la diferencia en este formato se sitúa en el


almacenamiento del resultado en una tercera variable que colocaremos detrás de la
palabra GIVING. Al no sufrir ninguna modificación el multiplicador, en este formato si
podemos poner un literal numérico.

CAPITULO 1: PROGRAMACION COBOL Página 57 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:

Valores iniciales:
01 CAMPO-A PIC 999 VALUE 147.

Sentencia:
MULTIPLY 80 BY 15 GIVING CAMPO-A
ON SIZE ERROR
DISPLAY ' ERROR EN LA MULTIPLICACION '
END-MULTIPLY

Resultado:

CAMPO-A = 80 * 15 = 1200
CAMPO-A = 200 (TRUNCAMIENTO DEL PRIMER DIGITO)
' ERROR EN LA MULTIPLICACION '

SENTENCIA DIVIDE

FUNCION:

La sentencia DIVIDE nos permite DIVIDIR dos variables y/o literales.

FORMATO:

Esta sentencia tiene 2 formatos distintos :

FORMATO A:
identificador-1
DIVIDE INTO identificador-2 [ROUNDED]
literal-1

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-DIVIDE]

En dividendo lo colocaremos detrás de la palabra INTO y el divisor detrás de la verbo


DIVIDE. Al realizar la división el cociente se almacenará en la variable donde se
encuetra el dividendo por lo que siempre deberá ser una variable. Caso que el divisor
fuese cero se ejecutaría la sentencia ON SIZE ERROR antes de ejecutarse la división.

Ejemplo:

Valores iniciales:
01 CAMPO-A PIC 9(3) VALUE 84.

Sentencia:
DIVIDE 4 INTO CAMPO-A

CAPITULO 1: PROGRAMACION COBOL Página 58 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Resultado:
CAMPO-A = 21

FORMATO B:
ident-1 INTO ident-2
DIVIDE GIVING ident-3 [ROUNDED]
lit-1 BY lit-2

[REMAINDER ident-4]
[ON SIZE ERROR instruccion imperativa-1]
(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-DIVIDE]

INTO:

Funciona como antes hemos explicado y si utilizamos GIVING el cociente se almacena


en una tercera variable.

BY:

En este caso la división se produce al revés.

REMAINDER:

Al utilizar esta palabra reservada, el resto que se produce en la división se almacenará


dentro de una cuarta varible que definiremos detrás de la palabra REMAINDER.

Ejemplo:

Valores iniciales:
01 CAMPO-A PIC 9(3) VALUE 80.
01 CAMPO-B PIC 9(3) VALUE 160.
01 CAMPO-C PIC 99V99 VALUE 84.
01 CAMPO-D PIC 9(3) VALUE 23.

Sentencia:
INTO
DIVIDE CAMPO-A CAMPO-B GIVING CAMPO-C
BY
REMAINDER CAMPO-D
ON SIZE ERROR
DISPLAY ' DIVISION POR 0 '
END-DIVIDE.

CAPITULO 1: PROGRAMACION COBOL Página 59 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Resultado:
Utilizando INTO

CUOCIENTE:
CAMPO-C = CAMPO-B / CAMPO-A
= 160 / 80 = 2
RESTO:
CAMPO-D = 0

CAMPO-A = 80
CAMPO-B = 160
CAMPO-C = 2
CAMPO-D = 0

Utilizando BY

CUOCIENTE:
CAMPO-C = CAMPO-A / CAMPO-B
= 80 / 160 = 0,5
RESTO:
CAMPO-D = 0

CAMPO-A = 80
CAMPO-B = 160
CAMPO-C = 0,5
CAMPO-D = 0

SENTENCIA COMPUTE

FUNCION:

La sentencia COMPUTE nos permite de una forma sencilla la transferencia de datos y


la realización de funciones aritméticas.

El único inconveniente de esta sentencia es su extensión de proceso por lo que su


aplicación es aconsejable solo en expresiones aritméticas largas, en caso contrario
utilizar las sentencias que hemos visto anteriormente.

FORMATO:

COMPUTE identificador-1 [ROUNDED] = expresión-aritmética

[ON SIZE ERROR instruccion imperativa-1]


(COBOL-85) [NOT ON SIZE ERROR instruccion-imperativa-2]
(COBOL-85) [END-COMPUTE]

Para construir una expresión aritmética hemos de tener en cuenta las siguientes
observaciones:

CAPITULO 1: PROGRAMACION COBOL Página 60 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Los símbolos que podemos utilizar son lo siguientes:


= TRANSFERENCIA DE DATOS

+ SUMA

- RESTA

/ DIVISION

* MULTIPLICACION

** POTENCIACION

() PARENTESIS (Separación entre expresiones)

Los símbolos aritméticos deben de ir precedidos y seguidos de por lo menos un blanco.


El orden de ejecución de las operaciones aritméticas es el siguiente:
Expresiones aritméticas entre paréntesis

Potenciación **

Multiplicación y División * y /
Suma y Resta + y -

Ejemplo:

Valores iniciales:
CAMPO-A = 21
CAMPO-B = 5
CAMPO-C = 8
CAMPO-D = 2

Sentencia:
COMPUTE CAMPO-F = CAMPO-A * (CAMPO-B + CAMPO-C) + (CAMPO-D**2)

Resultado :
CAMPO-F = 21 * (5 + 8) + (22)
= 21 * 13 + 4
= 273 + 4
= 277

CAPITULO 1: PROGRAMACION COBOL Página 61 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INSTRUCCIONES Y EXPRESIONES CONDICIONALES

Dentro del proceso normal de un programa existen situaciones en las que se dispone
de varias opciones, en las que unas expresiones condicionales controlan el flujo del
programa.

Estas expresiones condicionales identifican las condiciones que puedan tener distinta
naturaleza, como son:

Condiciones de relación
Condiciones de clase
Condiciones de nombre-condición
Condiciones de signo
Condiciones complejas
Condiciones de verbo relacionado

Para expresiones condicionales el COBOL dispone de 2 instrucciones para este


propósito: IF y EVALUATE.

INSTRUCCION IF

La instrucción IF nos habilita mediante una condición 2 caminos a seguir, dependiendo


si la condición se cumple o no.

FORMATO:

IF condicion-1
[THEN] instruc-1 ... [NEXT SENTENCE]
ELSE
instruc-2 ... [NEXT SENTENCE]
END-IF

La traducción de la instrucción es la siguiente:

Si (IF) se cumple la condición (condición-1) entonces (THEN) se ejecuta(n) la(s)


instrucción(es) que están a continuación del THEN (instrucción-1 ...) sino (ELSE) se
ejecuta(n) la(s) instrucción(es) que están a continuación del ELSE
(instrucción-2 ...), y para marcar el final de la instrucción, en el ANSI 74 se delimita con
un punto ‘.', en el 85 disponemos de la palabra END-IF.

Las palabras NEXT SENTENCE nos indican que si el flujo del programa pasa por
ahí, se ejecute la siguiente sentencia a la instrucción IF.

Ejemplo:
Valores iniciales:
CAMPO-A = 1

CAPITULO 1: PROGRAMACION COBOL Página 62 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Sentencia:
IF CAMPO-A = 1
THEN
Display `El campo-A tiene valor 1'
ELSE
NEXT SENTENCE
END-IF
MOVE ZERO TO CAMPO-A

Resultado:
Al tener CAMPO-A valor-1 se ejecutará el THEN
'El CAMPO-A tiene valor 1'

Si por el contrario el valor de CAMPO-A no hubiese sido 1, se habría ejecutado el


ELSE lo cual nos hubiera llevado a ejecutar el NEXT SENTENCE y por consiguiente la
instrucción inmediata a la instrucción IF - THEN - ELSE.

Esta instrucción podríamos haberla hecho más simplificada:


IF CAMPO-A = 1
Display `El campo-A tiene valor-1'
END-IF

Al no tener valor el ELSE, se omite y si no se cumpliera la instrucción se ejecutaría la


siguiente al IF.

Como podemos ver se omite el THEN, ya que su función es sintáctica, por lo que
podemos prescindir de él.

Nota importante: Dentro de una instruccion IF, nunca colocaremos un punto, en caso
contrario el compilador entenderia final de instrucción alli donde estuviera situado el
punto.

CONDICIONES DE RELACION

En las condiciones de relación se comparan 2 identificadores. Cuando los


identificadores son numéricos, la comparación se basa en el valor de estos.

Si son alfabéticos o alfanuméricos, la comparación es según la secuencia dentro del


ALFABETO.

Estos valores varían dependiendo del ALFABETO con el que trabaja nuestra máquina.

Los más comunes son los siguientes:

De Menor A Mayor:

Alfabeto ASCII

`Nulo' '# $ % & '( ) * *, - . / 0 1 2 3 4 5 6 7 8 9 : ; < = ? @ A B C D E F G H I J K L M N


O P Q R S T U V W X Y Z [\] ^ _ `

abcdefghijklmnopqrstuvwxyz{│}»

CAPITULO 1: PROGRAMACION COBOL Página 63 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Alfabeto EBCDIC

ö . < ( + │ & ! $ * ) ; `- / % _ > ? : # @ '= " a b c d e f g h i j k l m n o p q r s t u v w x y z A


BCDEFGHIJKLMNOPQRSTUVXYZ0123456789

FORMATO:
[NOT] LESS
[NOT] <
identificador-1 [NOT] EQUAL TO
IF literal-1 IS [NOT] =
expresion-arit-1 [NOT] GREATER THAN
constante-figurativa-1 [NOT] >

(COBOL-85) GREATER THAN OR EQUAL TO


> =
LESS THAN OR EQUAL TO
< =

identificador-2
literal-2
expresion-arit-2
constante-figur.-2

COMPARACIONES PERMITIDAS

NATURALEZA DE

LOS CAMPOS COMPUESTO ALFABETICO ALFANUMERICO NUMERICO EDICION


COMPUESTO SI SI SI SI SI
ALFABETICO SI SI SI NO NO
ALFANUMERICO SI SI SI SI(1) SI
NUMERICO SI NO SI(1) SI NO
EDICION SI NO SI NO SI

(1) Numéricos enteros.

Ejemplo:

COMPARACIONES NUMERICAS

Valores iniciales:
CAMPO-A = 15
CAMPO B = 23

CAPITULO 1: PROGRAMACION COBOL Página 64 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Sentencia:
IF CAMPO-A GREATER THAN CAMPO-B
THEN
PERFORM LISTAR
ELSE
PERFORM PROCESO
END-IF

Resultado:
PERFORM PROCESO

COMPARACION NO-NUMERICA

Valores iniciales:
CAMPO-A = 'JULIA'
CAMPO-B = 'JULIO'

Sentencia:
IF CAMPO-B IS LESS THAN CAMPO-A
THEN
DISPLAY CAMPO-B
ELSE
DISPLAY CAMPO-A
END-IF

Resultado:

Deplegaría JULIA al ser la B superior en secuencia a la A.

CONDICIONES DE CLASE

FUNCION:

Comprobar la naturaleza del contenido de su campo.

FORMATO:
NUMERIC
IF identificador-1 IS [NOT] ALPHABETIC
ALPHANUMERIC

COBOL-85 ALPHABETIC-LOWER
ALPHABETIC-UPPER

CAPITULO 1: PROGRAMACION COBOL Página 65 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CONDICIONES PERMITIDAS:

CAMPO CONDICION

Numérico NUMERIC, NOT NUMERIC

Alfabético ALPHABETIC, NOT ALPHABETIC

Alfanumérico NUMERIC, NOT NUMERIC, ALPHABETIC, NOT ALPHABETIC

Ejemplo:

Valores iniciales:

01 CAMPO-A PIC X(10) VALUE `972A'.

Sentencia:
IF CAMPO-A IS NOT ALPHABETIC
IF CAMPO-A IS NOT NUMERIC
PERFORM CONSULTAR
END-IF
END-IF

Resultado:
PERFORM CONSULTAR
El contenido no es alfabético por presencia de números y tampoco numérico por la
presencia de letras.

Se pueden hacer 2 comprobaciones porque el campo es alfanumérico.

Las condiciones ALPHABETIC-LOWER y ALPHABETIC-UPPER nos permiten


comprobar si un contenido alfabético está en mayúsculas o minúsculas.

Ejemplo:

Valores iniciales:
CAMPO-A = 'JULIA'
CAMPO-B = 'JULIO'

Sentencia:
IF CAMPO-A IS ALPHABETIC-UPPER OR
CAMPO-B IS ALPHABETIC-LOWER
PERFORM COMPROBAR
END-IF.

Resultado:
PERFORM COMPROBAR

CAPITULO 1: PROGRAMACION COBOL Página 66 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

CONDICIONES PARA NOMBRE DE CONDICION

FUNCION:

Comprobar el valor asociado a un nombre-de-condición.

FORMATO:
IF [NOT] nombre-de-condición

En esta instrucción preguntamos por uno de los valores que puede tener el campo al
que hemos asignados un determinado nombre-de-condición.

Ejemplo:

Valores iniciales:
01 ESTADO-FICHERO PIC X VALUE `N'
88 FINAL-FICHERO VALUE 'S'
88 NO-FINAL-FICHERO VALUE `N'

Sentencia:
IF NO-FINAL-FICHERO
READ FICHERO AT END SET FINAL-FICHERO TO TRUE
END-READ
END-IF

Traducción literal:
Si estado-fichero = `N'
Ver fichero, cuando se encuentre el final mover
'S' a estado-fichero
Final-instrucción-leer
Final condición

Resultado:

Se haría una lectura del fichero al cumplirse que ESTADO-FICHERO se


encuentra en estado NO-FINAL-FICHERO, o sea su valor es `N'

CONDICIONES DE SIGNO

FUNCION:

Comprobar el signo de un campo o expresión aritmética.

FORMATO:
identificador POSITIVE
IF IS [NOT] NEGATIVE
expresión aritmética ZERO

CAPITULO 1: PROGRAMACION COBOL Página 67 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En este formato podemos utilizar expresiones-aritméticas o campos con picture


numérica.

Estas condiciones son equivalentes a:


IF CAMPO-A IS POSITIVE ---> IF CAMPO-A IS > ZERO
IF CAMPO-A IS NEGATIVE ---> IF CAMPO-A IS < ZERO
IF CAMPO-A IS ZERO ---> IF CAMPO-A IS = ZERO

CONDICIONES COMPLEJAS

FUNCION:

Consiste en unir 2 o más condiciones simples mediante operadores lógicos con AND
OR.

FORMATO:
AND AND
IF condición-simple-1 condición simple-2 ...
OR OR

El orden de ejecución de está instrucción es la siguiente:

1º) Las condiciones entre paréntensis

2º) Condiciones con operador lógico AND

3º) Condiciones con operador lógico OR

Ejemplo:
Valores iniciales:
CAMPO-A = 1
CAMPO-B = 2
CAMPO-C = 3
CAMPO-D = 2

Sentencia:
IF (CAMPO-A NOT = CAMPO-C) AND (CAMPO-B = CAMPO-D) OR
└────────────────────┘ └─────────────────┘
└──────────────────────────────────────────┘

1ª condición

CAMPO-B NOT = CAMPO-C


└────────────────────┘

CAPITULO 1: PROGRAMACION COBOL Página 68 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

2ª condición
PERFORM TABLAS.

Traducción literal:

si se cumple que:
CAMPO-A no es igual a CAMPO-C y CAMPO-B es igual a CAMPO-D
PERFORM TABLAS

si se cumple
CAMPO-B no es igual a campo-C
PERFORM TABLAS

Para diferenciar el OR y el AND veamos un ejemplo simple:

Valores iniciales:
CAMPO-A = 1
CAMPO-B = 2

Sentencias:
1) IF CAMPO-A = 1 AND CAMPO-B = 3
PERFORM SEGUIR.
2) IF CAMPO-A = 1 OR CAMPO-B = 3
PERFORM SEGUIR

En el primer ejemplo se deben de cumplir las 2 condiciones:


CAMPO-A = 1
CAMPO-B = 3

Para ejecutar PERFORM SEGUIR, la 1ª se cumple pero la 2ª no, por lo que la


sentencia no se ejecutará.

Sin embargo, en el 2º ejemplo, el OR nos indica que se debe de cumplir, al menos, una
condición: Al cumplirse la 1ª condición, aunque no se cumple la 2ª, se ejecutaría la
sentencia PERFORM SEGUIR.

CONDICIONES DE VERBO-RELACIONADO

En COBOL existen VERBOS que en su formato contienen condiciones.

Las más utilizadas son las siguientes:


AT END READ

END-OF-PACE
AT WRITE
EOP

CAPITULO 1: PROGRAMACION COBOL Página 69 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INVALID KEY DELETE,READ,REWRITE,START,WRITE

ON EXCEPTION CALL
ON OVERFLOW STRING, UNSTRING
ON SIZE ERROR ADD,COMPUTE,DIVIDE,MULTIPLY,SUBTRACT

En COBOL-85 estas opciones existen tambien con la opción NOT

INSTRUCCIONES DE BIFURCACION

INSTRUCCION PERFORM

FUNCION:

Es una instrucción de bifurcación que nos permite hacer llamadas a párrafos o grupo
de párrafos y repetirlos cuantas veces creamos necesario.

FORMATO:

Dispone de 2 formatos:

FORMATO A/1:

PERFORM nombre-de-párrafo-1 THROUGH nombre-de-párrafo2


THRU

BEFORE
WITH TEST UNTIL condición-1
AFTER

END-PERFORM

FORMATO A/2:

PERFORM
sentencias-imperativas
END-PERFORM

CAPITULO 1: PROGRAMACION COBOL Página 70 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FORMATO B:
THROUGH
PERFORM nombre-de-párrafo-2 nombre-de-párrafo-2
THRU

identificador-1
TIMES
Entero-1

END-PERFORM

En la 1ª parte del formato-A, se hace llamada a un nombre de párrafo. Las palabras


(THROUGH/THRU) indican que al finalizar el perform se hará una llamada al nombre-
de-párrafo-2.
El WITH TEST tiene 2 variantes:

TEST BEFORE: Primero se comprueba la condición, antes de ir al párrafo.

TEST AFTER: Se ejecuta 1 vez el párrafo y después se comprueba la condición.


UNTIL condición-1:

Después de la palabra UNTIL (hasta), colocamos la condición de la perform. Hasta que


dicha condición no se cumpla se seguirá ejecutando el párrafo al que llamamos con la
instrucción PERFORM.

En la 2ª parte del FORMATO A, no se hace ninguna llamada a párrafo, sino que se


ejecutarán las sentecias que vayan detrás de la palabra PERFORM hasta que se
encuentre el primer punto o la palabra END-PERFORM.

Ejemplo:
FORMATO-A/1
PERFORM PARRAFO-A TEST AFTER UNTIL I = 10
.
.
PARRAFO-A
ADD 1 TO I.

Ejemplo:
FORMATO A/2

READ FICHERO INTO REG-FICH2 AT END SET FIN-FICHERO TO TRUE.


PERFORM WITH TEST BEFORE UNTIL FIN-FICHERO
WRITE REG-FICH2
READ FICHERO INTO REG-FICH2 ATEND
SET FIN FICHERO TO TRUE
END-READ
END-PERFORM.

CAPITULO 1: PROGRAMACION COBOL Página 71 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En el formato B, la palabra TIMES nos indicará el número de veces que queremos


repetir el Perform.

Ejemplo:

PERFORM COMPROBAR 5 TIMES

Hay que tener en cuenta en la instrucción PERFORM:

1.- Una vez terminada la instrucción PERFORM se ejecutará la sentencia que vaya
detrás de ellas y no detrás del párrafo.

2.- Si no ponemos TEST AFTER o TEST BEFORE, por omisión tendremos BEFORE.

INSTRUCCION EVALUATE

FUNCION:

Es la instrucción que nos permite utilizar una estructura DO CASE en un programa


COBOL, y evitarnos así las largas instrucciones de IF anidadas.

FORMATO:
identificador-1 identificador-2
literal-1 literal-2
EVALUATE expresión-1 ALSO expresión-2

TRUE TRUE
FALSE FALSE

WHEN frase-1 [ALSO frase-2] instrucción-imperativa-1

WHEN OTHER instrucción-imnperativa-2

END-EVALUATE

frase-1:
ANY
condición-1
TRUE
FALSE
identificador-3 THROUGH identificador-4
[NOT] literal-3 literal-4
expres-aritmét-1 THRU expres-aritmét-2

frase-2:
ANY
condición-2
TRUE
FALSE
identificador-5 THROUGH identificador-6
[NOT] literal-5 literal-6
expres-aritmét-1 THRU expres-aritmét-3

CAPITULO 1: PROGRAMACION COBOL Página 72 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

La gran ventaja de la instrucción EVALUATE es que nos permite agrupar un gran


número de condiciones simples o complejas.

Las estructuras más comunes en el EVALUATE son las siguientes:

1.- Evaluación del valor de un campo

Ejemplo:
EVALUATE CAMPO-A
WHEN 1
PERFORM PRIMERO
WHEN 2
PERFORM SEGUNDO
WHEN 3
PERFORM TERCERO
WHEN OTHER
PERFORM OTRO
END-EVALUATE.

2.- Entre un número determinado de condiciones, evaluar cual de ellas es la primera


que se cumple (TRUE) o la primera que no se cumple (FALSE).

Ejemplo:
EVALUATE TRUE
WHEN CODIGO-A > CODIGO-B
PERFORM A
WHEN CODIGO B > CODIGO-A
PERFORM B
WHEN CODIGO-C > (CODIGOA+CODIGOB)
PERFORM B
WHEN OTHER
PERFORM OTRO
END-EVALUATE.

Si queremos evaluar el valor de más de un campo, utilizaremos la palabra ALSO.

Ejemplo:
EVALUATE CAMPO-A ALSO CAMPO-B

WHEN 1 ALSO 'B'


PERFORM PRIMER-CASO

WHEN 2 ALSO 'B'


PERFORM SEGUNDO-CASO

WHEN 1 ALSO 'A' THRU 'B'


PERFORM CASO-ESPECIAL

END-EVALUATE.

CAPITULO 1: PROGRAMACION COBOL Página 73 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Para indicar cualquier valor de campo utilizaremos la palabra ANY.

Ejemplo:
EVALUATE PEP-1 ALSO PEP-2

WHEN 1 ALSO ANY


Perform COMPROBAR

END-EVALUATE

Traducción literal:
Cuando Pep-1 = 1 y para cualquier valor de PEP = 2
Perform COMPROBAR

Para agrupar todas aquellas condiciones no determinadas en una EVALUATE tenemos


el "WHEN OTHER".

Ejemplo:
EVALUATE COD-2
WHEN 1
PERFORM PE-1
WHEN 2
PERFORM PE-2
WHEN OTHER
PERFORM OTROS.
END-EVALUATE.

En la instrucción EVALUATE debemos tener en cuenta:

Si en un EVALUATE se cumplen 2 condiciones, se ejecutará únicamente la primera.


La instrucción EVALUATE es recomendada a partir de 3 condiciones.

INSTRUCCION GO

FUNCION:

Es una instrucción de ruptura en la ejecución de un programa.

Bifurca el flujo de nuestros programa a un punto determinado mediante un nombre-de-


párrafo.

FORMATO:

Dispone de 2 Formatos:

CAPITULO 1: PROGRAMACION COBOL Página 74 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

FORMATO A:
GO TO nombre-de-párrafo-1

FORMATO B:
GO TO nombre-de-párrafo-1 [nombre-de-párrafo-2] ...
DEPENDING ON identificador-1

En el primer formato, la instrucción GO TO bifurca el programa al punto que nos indica


el nombre-de-párrafo-1, desde donde seguirá la ejecución normal de nuestro programa.

Ejemplo:
MOVE COD-A TO COD-B
IF COD-B = 1
GO TO CODIGO-B
.
.
CODIGO-B
MOVE COD-B TO ...
.
.
.
STOP RUN.

En el segundo formato, dependiendo del valor del identificador en el momento de la


ejecución del GO TO, la instrucción nos enviará a uno de los puntos que nos indica.

Ejemplo:
MOVE 2 TO CONTADOR
GO TO LINEA-1 LINEA-2 LINEA-3
DEPENDING ON CONTADOR.
.
.
.
LINEA-1.
.
.
.
LINEA-2.
.
.
.
LINEA-3.
.
.
.

CAPITULO 1: PROGRAMACION COBOL Página 75 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Orden de ejecución

1.- 2 --> CONTADOR.

2.- GO TO LINEA-2

3.- LINEA-2.

.
.

No es aconsejable el uso abusivo de esta sentencia, porque podría ir en detrimento de


la estructura de nuestro programa.

INSTRUCCION EXIT

FUNCION:

La función es la misma que la de CONTINUE. Su ubicación es la que cambia, ya que el


EXIT se suele colocar como una sentencia de un párrafo y nos suele inidcar la
finalización de un procedimiento.

FORMATO:
EXIT

Ejemplo:

PERFORM COMPROBAR THRU FINALIZAR UNTIL I=10


.
.
.
COMPROBAR.
ADD 1 TO I
.
.
.
FINALIZAR.
EXIT.

INSTRUCCIONES QUE MANIPULAN EL TEXTO FUENTE

El COBOL nos pemite manipular el texto fuente durante la compilación. Podemos


insertar o modificar partes de nuestro fuente con la utilización de los siguientes verbos:

CAPITULO 1: PROGRAMACION COBOL Página 76 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INSTRUCCION COPY

FUNCION:

Nos permite copiar en nuestro texto fuente, un texto que tendremos almacenado en
una biblioteca.

FORMATO:
OF
COPY nombre-texto-1 nombre-biblioteca-1
IN

[REPLACING literal-1 BY literal-2 ]


palabra-1 palabra-2

Con este formato indicamos que donde esté el COPY situado en el programa se
copiará el texto(nombre-texto-1) que está situado en una biblioteca determinada.

Ejemplo:

Nombre de texto: CLIENTES

Contenido
05 nombre PIC X(10)
05 dirección PIC X(20)

Sentencia:
01 REGISTRO-CLIENTES
COPY Clientes

Resultado en la compilación:
01 REGISTRO-CLIENTES
05 NOMBRE PIC X(10)
05 DIRECCION PIC X(20)

Esta instrucción nos es muy útil en la FD, con ficheros que se utilizan en muchos
programas. De esta manera creamos un fichero modo texto, y en cada uno de los
programas se incluiría mediante un COPY.

También podemos utilizar la opción REPLACING que nos permitirá modificar parte del
texto que estamos copiando.

CAPITULO 1: PROGRAMACION COBOL Página 77 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:

Valores iniciales:
Nombre del texto: FICHERO-1

Contenido:

05 CAMPO-A PIC X(10)


05 CAMPO-B PIC X(7)
05 CAMPO-C PIC 99.

Sentencia:
01 REG-MAESTRO.
COPY FICHERO-1 REPLACING CAMPO-A BY NOMBRE
CAMPO-B BY LOCALIDAD
CAMPO-C BY EDAD
Resultado:
01 REG-MAESTRO
05 NOMBRE PIC X(10).
05 LOCALIDAD PIC X (7).
05 EDAD PIC 99.

4. TRATAMIENTO DE TABLAS
DEFINICION

Es un conjunto de valores almacenados en posición de almacenamiento consecutivo y


con un nombre de dato asignado. La referencia a un elemento especifico de la tabla se
hace mediante el uso de un sólo nombre con un subíndice que identifica la posición de
un elemento en particular.

CLAUSULA OCCURS:

FUNCION:

Define el tamaño de la tabla. No puede aparecer en líneas a nivel 01, ni 77, ni 88.

FORMATO A:
OCCURS entero1 [TIMES]

FORMATO B:
OCCURS entero1 [TIMES] PIC ...
(COBOL-85) [VALUE ...]

CAPITULO 1: PROGRAMACION COBOL Página 78 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:

Crea una tabla de 5 elementos y cada elemento compuesto por 2 campos con la
picture indicada.

01 TABLA.
05 ELEMENTO OCCURS 5.
10 N-VENDEDOR PIC XXX.
10 TOTAL-VENDIDO PIC 9(6).

Ejemplo:

Crea una tabla de 100 elementos de 2 caracteres numéricos.

01 TABLA.
05 ELEMENTOS OCCURS 100 PIC 99.

(COBOL-85)

01 TABLA.
05 ELEMENTOS OCCURS 100 PIC 99 VALUE ZERO.

CLAUSULA REDEFINES EN TABLAS

FUNCION:

Redefine una zona de memoria:

Obligatoriamente debe siempre ir después del campo que redefinimos


Tiene que llevar el mismo número de nivel que el campo que redefinimos.
No puede ponerse una cláusula REDEFINES junto con una instrucción OCCURS.

FORMATO:

número-de-nivel nombre-dato1 REDEFINES nombre-dato2

Ejemplo:

Redefinimos un campo alfanumérico en una tabla en la que cada elemento es un mes


del alto.
01 MESES.
05 NOMBRE-MESES
10 FILLER PIC X(9) VALUE "ENERO ".
10 FILLER PIC X(9) VALUE "MARZO ".
.
.
.
10 FILLER PIC X(9) VALUE "DICIEMBRE".
05 TABLA-MESES REDEFINE NOMBRE-MESES.
10 MES PIC X(9) OCCURS 12 TIMES.

CAPITULO 1: PROGRAMACION COBOL Página 79 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INSTRUCCION MOVE EN TABLAS

El uso de la instrucción MOVE TABLA TO ..... da como resultado el movimiento de


todos sus elementos. Para referenciar un elemento de la tabla se indica el nombre de
dicho elemento y el índice entre paréntesis separado por un espacio.

Cuando hacemos referencia a un grupo de elementos se consideran alfanuméricos


para propósitos del MOVE.

Ejemplo:

Mover un elemento de la tabla a una variable.


01 TABLA.
05 ELEMENTO OCCURS 50 TIMES.
10 ELE1 PIC 9(6)V99.
10 ELE2 PIC 9(6)V99.
.
.
.
MOVE ELE1 ( 34 ) TO IMPORTE.

Ejemplo:

Mover las letras de la A a la F a una tabla.


01 TABLA.
05 LETRAS OCCURS 6 TIMES PIC X.
.
.
.
MOVE "ABCDEF" TO TABLA.

TABLAS DE VARIAS DIMENSIONES

El concepto de DIMENSIÓN se refiere a categorias por medio de las cuales los datos
son organizados dentro de las tablas.

Puede haber tablas de hasta 3 dimensiones en la primera. vesión y hasta 7 en


COBOL-85. La forma de referenciar un elemento es por medio de tantos subíndices
como sea la dimensión de la tabla, separados por comas.

Ejemplo:

Crear un tabla que tenga 5 departamentos y dentro de cada departamento 5


vendedores con sus ventas.
01 TABLA-DEPARTAMENTOS.
05 DEPARTAMENTOS OCCURS 5 TIMES.
10 VENTAS OCCURS 5 TIMES PIC 9(7).

CAPITULO 1: PROGRAMACION COBOL Página 80 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Preguntar si el vendedor 5 del departamento 1 ha vendido más de $ 25.000.

IF VENTAS ( 1, 5 ) > 25.000

TABLAS VARIABLES

Se dice que una tabla es variable cuando su tamaño varía de una ejecución a otra.

FORMATO:
OCCURS entero-1 TO entero-2 TIMES DEPENDING ON numero-datos

El campo entero-1 y entero-2 son el mínimo y el máximo número de elementos que


puede contener la tabla, dependiendo de el valor que tenga numero-datos.

Ejemplo:

Una tabla que tenga de 100 a 200 elementos según el número de artículos existentes.
01 TABLA.
05 ARTICULOS OCCURS 100 TO 200 DEPENDING ON N-ARTICULOS.

VERBO PERFORM Y MANEJO DE TABLAS

FUNCION:

Se utiliza para hacer recorridos por los elementos de una tabla.

FORMATO:
PERFORM [nombre-procedimiento1] [THRU nombre-procedimiento2]

nombre-indice1 identificador2
VARYING FROM nombre-indice2
identificador1 literal2

identificador3
BY UNTIL condicion1
literal3

nombre-indice4 identificador5
[AFTER FROM nombre-indice5
identificador4 literal5

identificador6
BY UNTIL condicion2 ] ......
literal6

CAPITULO 1: PROGRAMACION COBOL Página 81 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

La ejecución de la declaración PERFORM se lleva a cabo de la forma siguiente:

Se iguala el contenido de identificador1 e identificador4 con los valores respectivos


indicados despues del FROM.

Se evalúa la condición1, si es cierta no se ejecuta ningún procedimiento y la secuencia


de ejecución continúa en la siguiente declaración a la instrucción PERFORM.

Si la condición1 es falsa, se evalúa la condición2, si es cierta se vuelve a igualar el


valor identificador4 al valor identificador5, se incrementa identificador1 en el valor de
identificador3 y se repite el mismo proceso que se especificó anteriormente.

Si el resultado de evaluar la condición2 no es cierta, se ejecuta desde


nombre-procedimiento1 a nombre-procedimiento2 y a continuación se incrementa
identificador4 en el valor de identificador6.

Se evalúa de nuevo la condición2 y mientras sea falsa se vuelve a ejecutar el


procedimiento repitiéndose esta operación hasta que condición2 sea cierta. En cuyo
momento se vuelve a igualar identificador4 al valor de identificador5 y se incrementa
identificador1 en el valor de identificador3 repitiéndose todo el proceso descrito si y
solo si la condicion1 es falsa.

Ejemplo:

Hacer la suma de todos los elementos de una tabla de 2 dimensiones.


01 TABLA.
05 FILAS OCCURS 10 TIMES.
10 COLUMNAS OCCURS 10 TIMES PIC 99.

PROCEDURE DIVISION.
INICIO.
................
PERFORM SUMA VARYING INDICE1
FROM 1 BY 1
UNTIL INDICE1 > 10
AFTER INDICE2
FROM 1 BY 1
UNTIL INDICE2 > 10.
.....................
SUMA.
ADD COLUMNAS ( INDICE1, INDICE2 ) TO ACUMULADOR.

CAPITULO 1: PROGRAMACION COBOL Página 82 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

TABLAS INDEXADAS

FUNCION:

Nos permite indexar una tabla para posteriormente hacer búsquedas sin necesidad de
recorrerla entera.

FORMATO:
ASCENDING
OCCURS entero TIMES KEY IS dato-1 [dato2...]
DESCENDING

[INDEXED BY indice-1 [indice-2...]]

La opción ASCENDING o DESCENDING KEY IS sólo se utiliza en el caso de que la


tabla se encuentre ordenada por una o varias claves.

La opción INDEXED BY indica el o los índices que vayamos a utilizar, son obligatorios
en caso de utilizar la instrucción SEARCH.

Los índices-1 e índice-2, si se ponen hay que declararlos en la WORKING-STORAGE


SECTION como USAGE IS INDEX.

Ejemplo:
01 CAMPOS.
05 INDICE USAGE IS INDEX.
01 TABLA.
05 ELEMENTOS OCCURS 10 INDEXED BY INDICE.

INSTRUCCION SET

FUNCION:

Para inicializar índices o cambiar su contenido. Sólo los declarados como USAGE
INDEX.

FORMATO:
TO entero
SET indice UP BY
DOWN BY variable

El parámetro TO inicializa el índice al valor que pongamos en entero o variable.

El parámetro UP BY suma al índice el valor que pongamos en entero o variable.

El parámetro DOWN BY resta al índice el valor que pongamos en entero o variable.

CAPITULO 1: PROGRAMACION COBOL Página 83 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

Ejemplo:
Inicializar el indice en 2.
SET INDICE TO 2.

Ejemplo:
Restar 3 al indice.
SET INDICE DOWN BY 3.

INSTRUCCION SEARCH

FUNCION:

Sirve para buscar un elemento o varios en una tabla. Esta opción puede ser utilizada
con subíndices pero es mucho mas lenta.

FORMATO:
índice
SEARCH identificador VARYING AT END acción-1
variable

WHEN condición-1 acción-2


[WHEN condición-2 acción-3 ]

El identificador es el elemento de la tabla donde se va a hacer la búsqueda.

AT END acción-1 es lo que tiene que hacer en caso de que la tabla se haya terminado
y el elemento no lo haya localizado.

Condición-1 y opcionalmente condición-2 son las condiciones que tienen que cumplir
un determinado elemento de la tabla al cual se está buscando.

La opción VARYING índice, hace que el varíe el índice de indexación de la tabla.

Ejemplo:

Hacer un DISPLAY de el precio del pan.


01 CAMPOS.
05 INDICE USAGE INDEX.
......................
01 TABLA-ARTICULOS.
05 ARTICULOS OCCURS 50 TIMES PIC X(10) INDEXED BY INDICE.
01 TABLA-PRECIOS.
05 PRECIOS OCCURS 50 TIMES PIC 9(5).
.......................................
PROCEDURE DIVISION.
INICIO.
............
SEARCH ARTICULOS AT END PERFORM ART-INEXISTENTE
WHEN ARTICULOS ( INDICE ) = "PAN "
DISPLAY PRECIOS ( INDICE ).

CAPITULO 1: PROGRAMACION COBOL Página 84 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

5. FICHEROS INDEXADOS
La organización indexada permite la recuperación de un registro en un momento dado
sin leer los registros lógicos anteriores.

El espacio que contiene un archivo con organización indexada, se divide en tres


subespacios:

 Área primaria o de datos: Se encuentran los registros de datos propiamente


dichos.
 Área de índices: Contiene las tablas de índices que hacen referencia a la
posición de los datos.
 Área de Overflow: Contendrá los registros que no tienen espacio en el área
principal, o han sido desplazados por la adición de otros nuevos.

Definicion:
ENVIRONMENT DIVISION
SELECT nombre-fichero ASSIGN TO DISK

SEQUENTIAL
ORGANIZATION
INDEXED

SEQUENTIAL
ACCESS RANDOM
DYNAMIC

RECORD KEY IS reg-fichero


ALTERNATE RECORD KEY IS key-reg-fichero

RANDOM: Se le debe indicar la clave para la búsqueda.

DYNAMIC: Permite acceso SECUENCIAL y RANDOM. Se posiciona


directamente en un registro a través de la clave y a partir de ese
registro se hace la búsqueda secuencial.

PROCEDURE DIVISION.
OPEN I-O nombre-fichero

Se puede leer y escribir en el mismo registro. El fichero tiene que estar creado.
(OPEN INPUT-OUTPUT nombre-fichero)

CLOSE (WITH UNLOCK) nombre

Cierra el fichero y no se puede volver a abrir durante la ejecución del programa.

CAPITULO 1: PROGRAMACION COBOL Página 85 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

INSTRUCCIONES:

LECTURA DE REGISTROS

INSTRUCCION READ
READ nombre-fichero [INTO nombre-variable] [NEXT]
[AT END accion]
[INVALID KEY accion]

Si el acceso es RANDOM: Antes de proceder a la lectura, deberá cargarse la clave. No


se puede utilizar [AT END acción]
Ejemplo:
MOVE 50 TO CLAVE-I
READ INDEXADO INVALID KEY DISPLAY 'registro no existe'

Nota: [INVALID KEY]: Se activa cuando no es posible la realización de la


sentencia.

Si el acceso es DYNAMIC:
READ nombre-fichero NEXT RECORD AT END acción

[NEXT] lee el siguiente registro.

INSTRUCCION START

FUNCION:

Posiciona de forma directa en una clave determinada y una vez posicionado, comienza
una lectura secuencial.

FORMATO:
EQUAL
START nombre-fichero KEY NOT LESS nombre-campo
GREATER
[INVALID KEY accion]

Después del posicionamiento, utilizaremos la instrucción READ como si el acceso fuera


DYNAMIC.

CAPITULO 1: PROGRAMACION COBOL Página 86 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ESCRITURA DE REGISTROS

INSTRUCCION WRITE

FUNCION:

Escribe registros que no existen en el fichero.

INSTRUCCION REWRITE

FUNCION:

Modifica registros que existen en el fichero.

FORMATO:
WRITE
nombre-registro [FROM campo] [INVALID KEY accion]
REWRITE

Diferencias en [INVALID KEY acción]:

WRITE: Lo activará cuando ya existe un registro con la misma clave.

REWRITE: Activará cuando no existe un registro con la clave que se intenta


hacer el REWRITE.

Antes de hacer REWRITE, debes de haberte posicionado con un READ sobre el


registro que quieras modificar.

BORRADO DE REGISTROS

INSTRUCCION DELETE

FORMATO:
DELETE nombre-fichero RECORD [INVALID KEY accion]

Previamente se debe posicionar con READ.

CAPITULO 1: PROGRAMACION COBOL Página 87 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

6. SUBPROGRAMACION
Es un método de programación que se basa en la utilización de un programa principal
comunicado con uno o más subprogramas.

Los objetivos de la subprogramación son:

1) Evitar programas demasiado largos

Cuanto mas dividimos las funciones de un programa, mejor podremos manejarlo, y en


modificaciones futuras tendremos muchas más felicidades.

2) Evitar redundancias

Existen tareas comunes a varios programas para lo que se creará un subprograma que
realice esta tarea y que pueda ser llamado por todos aquellos programas que lo
necesiten.

En la subprogramación existe un programa principal que será el "llamador" y los


subprogramas los "llamados".

Tanto el programa principal como los subprogramas son programas individuales y


compilados a parte unos de otros.

Sin embargo, los subprogramas dependen del programa principal, ya que es el único
ejecutable.

El programa principal se ejecuta, y cuando en su PROCEDURE se encuentra con un


CALL ‘nombre-programa', transferirá el control al subprograma en cuestión.

Cuando este termine su ejecución, devolverá el control al programa principal mediante


la instrucción EXIT-PROGRAM.

En subprogramación hay que tener en cuenta que se sigue una especie de jerarquía:

El programa principal se puede comunicar con todos los subprogramas.


Un subprograma puede ser llamado por un subprograma de nivel superior, pero nunca
al contrario.

CAPITULO 1: PROGRAMACION COBOL Página 88 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

En este formato sí se intercambian datos.

Su uso más común es la de transmitir datos del programa principal al subprograma,


donde son tratados y posteriormente le es devuelto el resultado.

El funcionamiento de la instrucción es la siguiente:

BY REFERENCE
CALL nombre-programa USING nombre-variable-1
BY CONTENT

Llamamos (CALL) al subprograma (nombre-programa) y le mandamos datos, usando


(USING) las variables (nombre-variable-1, nombre-variable-2 ...), que anteriormente ya
han sido definidos en la DATA DIVISION.

La diferencia entre BY REFERENCE y BY CONTENT es que con la 1ª opción los datos


pasados al subprograma podían ser modificados, sin embargo en el BY CONTENT
únicamente puede ser consultados pero no permite su modificación.

El subprograma además de tener en la WORKING sus propias variables de trabajo,


debe definir unas variables en la LINKAGE SECTION para recibir los datos de las
variables que se transfieren desde el programa principal.

CAPITULO 1: PROGRAMACION COBOL Página 89 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

El nombre de estas variables podrá ser el mismo, o distinto, ya que ello no supone
ningún condicionante en el buen desarrollo del subprograma:

Lo que si es importante son las siguientes consideraciones:

Si no queremos tener problemas en la transmisión, definir las variables en la LINKAGE


con la misma PICTURE que sus homólogas.
La relación entre las variables de un programa y otro se efectúa de la siguiente forma:

Programa Principal:

CALL PROGRAMA USING CAMPO-A, CAMPO-CAMPO-B, CAMPO-C

Subprograma:
PROCEDURE DIVISION USING CAMPO-D, CAMPO-E, CAMPO-F

por lo que la declaración óptima de las variables serían las siguientes:

01 CAMPO-A PIC XX
01 CAMPO-B PIC 99V99
01 CAMPO-C PIC AAA
01 CAMPO-D PIC XX
01 CAMPO-E PIC 99V99
01 CAMPO-F PIC AAA

Ejemplo: Tenemos un fichero secuencial con el resumen de prendas servidas y


defectuosas a lo largo del año.

Se quiere un programa que obtenga un fichero indexado donde aparezca el Nº


SUPERVISOR, CODIGO y el % de prendas devueltas, estando indexado el fichero por
CODIGO.

CODIGO- SUPERVISOR 1 2 3 4 5 6
PIEZAS

X(3) X(2)

1 mes
12 meses

Cada elemento (mes) dividido en 2 campos numéricos con 3 posiciones.

1 --> nº de piezas servidas.

2 --> nº de piezas devueltas.

CAPITULO 1: PROGRAMACION COBOL Página 90 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

SELECT SECU ASSIGN TO DISK


SELECT INDEXADO ASSIGN TO DISK
ORGANITATION INDEXED
ACCESS DYNAMIC
RECORD KEY IS CODIGO-PIEZAI.
FD INDEXADO LABEL RECORDS ARE STANDARD.
01 REG-INDEX.
05 CODIGO-PIEZAI PIC X(3).
05 SUPERV-INDEX PIC X(2).
05 PORCENTAJE PIC 9(3).
FD SECU LABEL RECORDS ARE OMITTED.
01 REG-S.
05 CODIGO-PIEZAS PIC X(3).
05 SUPERV-INDEX PIC X(2).
05 MES OCCURS 12 TIMES INDEXED BY I.
10 TOTAL-SERV PIC 9(3).
10 TOTAL-DEV PIC 9(3).

PROCEDURE DIVISION.
PASOI.
ISPLAY (1,1) ERASE
ISPLAY PANTA1
CCEPT CAPTURA
IF OPCION = '1`
OPEN OUTPUT INDEXADO
IF SW = 1
WRITE REG
ELSE
NEXT SENTENCE.
ELSE
PERFORM MANTENER THRU FMANTENER.
CLOSE INDEXADO
STOP RUN.

MANTENER
OPEN INPUT SECU
I-O INDEXADO
READ SECU AT END MOVE 1 TO SW1
PERFORM PROCESO THRU FPROCESO UNTIL SW1=1
CLOSE SECU.
FMANTENER
EXIT.

PROCESO.
MOVE CO-PIEZAS TO COD-PIEZAI
READ INDEXADO INVALID KEY PERFORM ALTAS THRU FALTAS
READ SECU AT END MOVE 1 TO SW.
PROCESO.
EXIT.

CAPITULO 1: PROGRAMACION COBOL Página 91 de 92


CURSO DE FORMACION EN
COBOL – CICS – TSO - VTAM

ALTAS
MOVE 0 TO ACUDED
ACUSERV
PERFORM ETABLA THRY FETABLA VARYING I FROM 1 BY 1
UNTIL I > 12
COMPUTE PORCENTAJE = (ACUM-DEV/ACUM-SERV)* 100
MOVE SUPERV-SECU TO SUPERV-INDEX
WRITE REG-INDEX
FALTAS.
EXIT.

ETABLA.
ADD TOT-SERV (I) TO ACUM-SERV
ADD TOT-DEV (I) TO ACUM-DEV
FETABLA
EXIT.

CAPITULO 1: PROGRAMACION COBOL Página 92 de 92

También podría gustarte