Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Programación Básica en Cobol para OS390 PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 260

Business Data

Cloud Mobility
Intelligence Centre

Enterprise Computing Solutions

Student Manual

Dirección General de Formación

CONSEJERÍA DE EMPLEO,
TURISMO Y CULTURA

Comunidad de Madrid UNIÓN EUROPEA


FONDO SOCIAL EUROPEO
El Fondo Social Europeo invierte en tu futuro

EDUCATION
S E R V I C E S
Programación básica en

.I. n
COBOL

.T ció
(Curso AD40)

.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

IBM Education and Training


Worlwide Certified Material
.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

Abril 2002

La información que se suministra en este documento no se ha sometido a ninguna revisión


formal por parte de IBM y se distribuye como soporte del curso indicado en la portada sin
que su información sustituya a la de los manuales del producto.

© Copyright International Business Corportation 2002. Reservados todos los derechos.


Este documento no puede reproducirse ni total ni parcialmente sin la autorización es-
crita de IBM.
INDICE

.I. n
.T ció
Tema 1.- Visión general del COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Visión general del COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

.
¿Qué es el COBOL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

C
Enunciado de un problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

.F a
Organigrama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Pseudocódigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

C rm
Solución COBOL del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Resumen de la organización de un programa COBOL . . . . . . . . . . . . . . . . . . . . . . . . . 16
Información básica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Elementos de un programa COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
to fo
Formato de una línea de COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Pasos a realizar con un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Tema 2.- Organización de un programa COBOL . . . . . . . . . . . . . . . . . . . . . . 23
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
ec o

IDENTIFICATION DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
ENVIRONMENT DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
v

DATA DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Descripción de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
oy si

Números de nivel especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40


Nombres de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
pr lu

Cláusula PICTURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Cláusula USAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Cláusula VALUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
c

Notación hexadecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Redefinición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Ex

PROCEDURE DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Entorno de los ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Conexión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Archivos de que dispone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Paso 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Paso 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Paso 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Paso 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Paso 6 (opcional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Tema 3.- PROCEDURE DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
_________________________________________________________________________________________
© Copyright IBM Corp. 2002 1
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
1ª Parte.- La PROCEDURE DIVISION y las sentencias de asignación . . . . . . . . . . . 70
PROCEDURE DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Párrafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Sentencias de finalización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Finalizadores de ámbito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

.I. n
Sentencia de asignación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Opción CORRESPONDING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

.T ció
Asignaciones parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Sentencia SET TO TRUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Sentencia INITIALIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

.
2ª Parte.- Sentencias de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

C
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

.F a
Sentencia ADD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Sentencia SUBTRACT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

C rm
Sentencia MULTIPLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Sentencia DIVIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Sentencia COMPUTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3ª Parte.- Sentencias de control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
to fo
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Sentencia PERFORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Sentencia IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Sentencia EVALUATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
ec o

4ª Parte.- Sentencias básicas de E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137


Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Sentencia ACCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
v

Sentencia DISPLAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141


oy si

DECLARATIVES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
pr lu

Paso 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Paso 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Paso 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
c

Ejercicio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Tema 4.- Manejo de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Ex

1ª Parte.- ENVIRONMENT DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152


FILE-CONTROL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
I-O-CONTROL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
2ª Parte.- DATA DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
FILE SECTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3ª Parte.- PROCEDURE DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Sentencia OPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Sentencia CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Sentencia READ (proceso secuencial) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Sentencia READ (proceso al azar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Sentencia START . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

__________________________________________________________________________
2 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del alumno
___________________________________________________________________________

Sentencia WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172


WRITE CON LINAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
WRITE para VSAM indexados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Sentencia REWRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Sentencia DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Ejercicio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

.I. n
Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Paso 2 (opcional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

.T ció
Tema 5.- Servicios de bibliotecario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Sentencia COPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

.
Tema 6.- Manejo de tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

C
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

.F a
1ª Parte.- DATA DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

C rm
Cláusula OCCURS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2ª Parte.- PROCEDURE DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Subindices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sentencia SEARCH (búsqueda secuencial) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sentencia SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
194
198
198
200
201
to fo
Sentencia SEARCH (búsqueda binaria) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Ejercicio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Tema 7.- Sentencias adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
ec o

Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Sentencia INSPECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
v

INSPECT TALLYING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208


INSPECT REPLACING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
oy si

INSPECT CONVERTING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210


Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
pr lu

Sentencia STRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212


Sentencia UNSTRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Tema 8.- SORT / MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
c

Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
PROCEDURE DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Ex

Sentencia SORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218


Sentencia MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Consideraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Procesos INPUT y OUPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Sentencia RELEASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Sentencia RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Opción FASTSRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Registro SORT-RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Ejercicio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Tema 9.- Sentencia CALL y la LINKAGE SECTION . . . . . . . . . . . . . . . . . 231

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 3
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
1ª Parte.- PROCEDURE DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Sentencia CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
2ª Parte.- DATA DIVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
LINKAGE SECTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Otras consideraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

.I. n
¿Qué es un POINTER? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Sentencia SET ADDRESS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

.T ció
Registros especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Ejercicio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Paso1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

.
Tema 10.- Unidad de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

C
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

.F a
Ejercicio 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

C rm
Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tema 11.- Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones de fecha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
255
257
257
258
261
to fo
Funciones de series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Funciones que admiten ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Ejercicio 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
ec o

Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Apéndice.- Soluciones de los ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
v

Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
oy si

Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Ejercicio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Ejercicio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
pr lu

Ejercicio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Ejercicio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Ejercicio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
c

Ejercicio 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Ex

Ejercicio 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

__________________________________________________________________________
4 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 1.- Visión general del COBOL

Objetivos

.I. n
Objetivos

.T ció
.
Realizar una introducción al COBOL

C
.F a
Transformar un problema comercial en una
solución en COBOL

C rm Repasar la programación estructurada con COBOL


Ver que ocurre en un programa COBOL
to fo
Introducir la estructura de un programa COBOL
ec o v
oy si
pr luc

Notas:
Ex

Los objetivos de este tema son:

y Hacer un repaso de los principios básicos de la programación


y Dar una visión global de un programa COBOL

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 5
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Visión general del COBOL

¿Qué es el COBOL?

.I. n
¿Qué es el COBOL?

.T ció
IBM COBOL IBM COBOL
for MVS & VM for OS/390 & VM

.
MVS z-series

C
VM

.F a
COBOL

C rm IBM COBOL
for VSE/ESA

COmmon
Business
IBM ILE
COBOL for AS/400
to fo
VSE

Oriented i-series

Language
ec o

IBM COBOL
IBM VisualAge
Set for AIX
p-series x-series
for COBOL
v
oy si
pr luc

Notas:
Ex

El COBOL o Common Business Oriented Language es uno de los lenguajes de pro-


gramación comercial más utilizados en el mundo y si se calcula el uso, multiplicando el nú-
mero de programas por los dias que se utiliza, el resultado es que el COBOL es el lenguaje
más utilizado. El uso principal del COBOL es en programas de aplicación de negocio y co-
merciales. Es el lenguaje estandar en la mayoría de ordenadores principales.

El lenguaje COBOL que se verá a lo largo de este curso está al nivel de ISO 1989 (In-
ternational Standards Organization) con algunas mejoras. El COBOL estandar puede ejecu-
tarse en distintos ordenadores y sistemas operativos.

En el curso también se verán algunas extensiones proporcionadas por IBM y que am-
plian la riqueza del lenguaje.

___________________________________________________________________
6 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Enunciado de un problema

Ejemplo de programa comercial

.I. n
Una compañia tiene un archivo de personal que contiene todos

.T ció
los números de sus empleados y su fecha de ingreso, en orden
YYYYMMDD

.
C
.F a
El cliente quiere obtener un listado con todos los números de
empleados, en las que la fecha de ingreso se imprima en

C rm
formato DD-MM-YYYY

Dado que en este momento sólo existen 30 empleados, al


to fo
cliente no le preocupa que hayan cabeceras, ni números de
página ni fechas del informe. Posiblemente pida esta
información más adelante.
ec o v
oy si
pr lu

Notas:
c

En este momento se realiza el enunciado de un posible problema que se puede plan-


tear en cualquier centro de cálculo.
Ex

La petición del cliente llegará a un analista y este acabará pasando la petición a un


programador para que la resuelva.

A menudo el programador crea un organigrama o mejor un pseudocódigo para poder


comprobar, antes de pasar a la codificación del programa, que la lógica expuesta en él res-
ponde al problema planteado.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 7
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

ORGANIGRAMA

Diagrama de la solución

.I. n
.T ció
INICIO
Mover

.
¿Fin No campos

C
.F a
Abrir del Escribir
archivo? informe
Archivos
C rm Leer Cerrar
Si
Leer
archivo
to fo
Archivo Archivos
Final
ec o v
oy si
pr lu

Notas:
c

En un organigrama no se plasma como serán las lecturas ni grabaciones ni los proce-


sos. Se trata de ver los distintos elementos que compondrán el programa y ver si las ideas que
Ex

se tienen concuerdan con el enunciado.

No es una herramienta muy adecuada para plantear problemas complejos y, además,


dado su aspecto gráfico, con flechas lleva de una forma natural al uso de las sentencias de bi-
furcación incondicional (tipo GOTO) que no son nada recomendables, ha ido quedando en
desuso.

___________________________________________________________________
8 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PSEUDOCÓDIGO

Pseudocódigo de la solución

.I. n
Abrir archivo personal (entrada)

.T ció
archivo informe (salida)

.
Leer archivo personal,

C
si acaba poner indicador fin-archivo

.F a
C rm Hacer hasta fin-archivo
Mover campos-entrada a campos-salida
Imprimir registro con campos-salida
Leer archivo personal,
to fo
si acaba poner indicador fin-archivo
Fin-hacer
ec o

Cerrar archivo personal y de informe


v
oy si
pr lu

Notas:
c

El pseudocódigo es otra herramienta para el diseño de programas que lleva de una


forma natural a programas estructurados.
Ex

Cuando los programas sufren muchas modificaciones, estas son más fáciles de reali-
zar si su desarrollo se ha realizado con técnicas que lleven a este tipo de construcción.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 9
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

SOLUCIÓN COBOL DEL PROBLEMA

Solución COBOL (1/6)

.I. n
.T ció
IDENTIFICATION DIVISION.
PROGRAM-ID. PERSRPT.
AUTHOR. BEA SANJUAN.

.
C
INSTALLATION. IBM E&T.

.F a
DATE-WRITTEN. 08/31/2001.
DATE-COMPILED.

C rm
SECURITY. NONE.
*********************************************
* Utilizando el archivo de personal, imprimir
to fo
* un listado del personal con el numero de
* empleado y su fecha de ingreso, en formato
* DD-MM-YYYY
ec o

*********************************************
v
oy si
pr lu

Notas:
c

En esta y en las siguientes cinco páginas se verá una posible solución en COBOL del
problema planteado.
Ex

Todo programa COBOL empieza con la IDENTIFICATION DIVISION. En este


ejemplo se ve que el programa se llama PERSPRT.

___________________________________________________________________
10 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Solución COBOL (2/6)


ENVIRONMENT DIVISION.
CONFIGURATION SECTION.

.I. n
SOURCE-COMPUTER. IBM-390.
OBJECT-COMPUTER. IBM-390.

.T ció
INPUT-OUTPUT SECTION.
FILE-CONTROL.

.
SELECT PERSNNL ASSIGN TO PERSNNL.

C
SELECT LISTING ASSIGN TO LISTING.

.F a
DATA DIVISION.
FILE SECTION.

C rmFD PERSNNL
RECORDING MODE F
BLOCK CONTAINS 0 RECORDS.
01 PERSNNL-RECORD PIC X(80).
to fo
FD LISTING
BLOCK CONTAINS 1 RECORD.
01 LIST-LINE PIC X(80).
ec o v
oy si

Notas:
pr lu

En la ENVIRONMENT DIVISION se puede indicar el ordenador que se va a utilizar


y además se crea el enlace entre los nombres de los archivos que se utilizan el programa y los
que se indicarán en el JCL.
c

En la DATA DIVISION se indican con más detalle los archivos a utilizar y sus prin-
Ex

cipales características.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 11
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Solución COBOL (3/6)

WORKING-STORAGE SECTION.

.I. n
01 PERSNNL-LAYOUT.
05 IN-EMPLOYEE-NO PIC 9(5).

.T ció
05 IN-HIRE-DATE.
10 IN-HIRE-YR PIC 9(4) VALUE ZERO.

.
10 IN-HIRE-MO PIC 99 VALUE ZERO.

C
10 IN-HIRE-DA PIC 99 VALUE ZERO.

.F a
05 FILLER PIC X(67).

C rm01 EOF-FLAG
88 FIN-ARCHIVO
88 NO-FIN-ARCHIVO
PIC X VALUE SPACE.
VALUE 'Y'.
VALUE ' '.
to fo
ec o v
oy si

Notas:
pr lu

La WORKING-STORAGE DATA se utiliza para definir las distintas variables que se


utilizarán en el programa.
c

Las distintas variables se estructuran en niveles.


Ex

___________________________________________________________________
12 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Solución COBOL (4/6)

* Lineas de detalle del listado de empleados *

.I. n
01 DETAIL-1.

.T ció
05 OUT-EMPL-NUM PIC 9(5) VALUE ZERO.
05 FILLER PIC X(5) VALUE SPACES.

.
05 OUT-HIRE-DATE.

C
10 OUT-HIRE-DD PIC 99 VALUE ZERO.

.F a
10 PIC X VALUE '-'.
10 OUT-HIRE-MM PIC 99 VALUE ZERO.

C rm 10
10 OUT-HIRE-YYYY
05 FILLER
PIC
PIC
PIC
X
9(4)
X(56)
VALUE
VALUE
VALUE
'-'.
ZERO.
SPACES.
to fo
ec o v
oy si

Notas:
pr lu

Continuan las definiciones de las variables a utilizar.


c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 13
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Solución COBOL (5/6)

PROCEDURE DIVISION.

.I. n
OPEN INPUT PERSNNL OUTPUT LISTING
READ PERSNNL INTO PERSNNL-LAYOUT

.T ció
AT END SET FIN-ARCHIVO TO TRUE

.
PERFORM UNTIL FIN-ARCHIVO

C
PERFORM DETAIL-LINE

.F a
PERFORM READMAST
END-PERFORM

C rm CLOSE PERSNNL LISTING.

GOBACK.
to fo
ec o v
oy si

Notas:
pr lu

En la PROCEDURE DIVISION se incorporan las sentencias ejecutables propiamente


dichas. Habrá sentencias de control de flujo, de asignación de valores, de entrada/salida, de
cálculo, ....
c
Ex

___________________________________________________________________
14 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Solución COBOL (6/6)

.I. n
* Mover los campos de entrada a campos del informe *
DETAIL-LINE.

.T ció
MOVE IN-EMPLOYEE-NO TO OUT-EMPL-NUM
MOVE IN-HIRE-YY TO OUT-HIRE-YYYY
MOVE IN-HIRE-MO TO OUT-HIRE-MM

.
MOVE IN-HIRE-DA TO OUT-HIRE-DD

C
WRITE LIST-LINE FROM DETAIL-1

.F a
AFTER ADVANCING 2 LINES.

C rm READMAST.
READ PERSNNL INTO PERSNNL-LAYOUT
AT END SET FIN-ARCHIVO TO TRUE.
to fo
ec o v
oy si

Notas:
pr lu

Aquí se ve una parte de la PROCEDURE DIVISION que se encarga de construir la li-


nea de salida en la que se pone la fecha en el formato deseado y otra que se encarga de ir rea-
lizando las lecturas sobre el archivo de entrada.
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 15
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Resumen de la organización de un programa COBOL

.I. n
Organización del programa COBOL

.T ció
.
IDENTIFICATION DIVISION

C
.F a
C rm ENVIRONMENT DIVISION
to fo
DATA DIVISION

PROCEDURE DIVISION
ec o v
oy si
pr lu

Notas:
c

Hay cuatro divisiones en un programa COBOL:


Ex

y IDENTIFICATION DIVISION
Su principal objetivo es el de dar el nombre del programa
y ENVIRONMENT DIVISION
Permite indicar al ordenador los archivos que se utilizarán
y DATA DIVISION
Permite describir los datos que usará el programa y preparar zonas de memoria en
el ordenador para almacenarlas. Aquí se debe distinguir entre la zona de manejo
de los datos de los archivos y la zona de trabajo llamada la WORKING
y PROCEDURE DIVISION
Es la zona del programa donde reside la lógica con la que se manipularan los da-
tos almacenados en la DATA

___________________________________________________________________
16 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Información básica

El manual básico de COBOL

.I. n
.T ció
.
C
.F a
C rm COBOL
to fo
Language
Reference
ec o v
oy si
pr lu

Notas:
c

Este es el manual básico para todo programador de COBOL. En él se explican todas


las sentencias que existen en este lenguaje.
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 17
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Elementos de un programa COBOL

.I. n
Estructura del lenguaje COBOL

.T ció
Caracteres
Series de caracteres

.
C
Palabras COBOL

.F a
Palabras definidas por el usuario (variables)

C rm Palabras reservadas
Constantes figurativas
to fo
Registros especiales
Extensiones IBM
Literales numéricos y no numéricos
ec o v
oy si
pr lu

Notas:
c

Estos son los elementos de un programa COBOL


Ex

___________________________________________________________________
18 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Formato de una línea de COBOL

Formato de la línea COBOL

.I. n
.T ció
Columnas Uso

.
C
01-06 área numeración secuencia

.F a
07 área indicativa

C rm 08-11
12-72
área A
área B
to fo
73-80 Denominación programa
ec o v
oy si
pr lu

Notas:
c

Dentro de la libertad de escritura que admite el COBOL, existen una serie de


limitaciones:
Ex

1) El área indicativa (columna 7) permite indicar:


y Continuación de la línea anterior (-)
y Depuración (D)
y Comentario (* ó /)

2) En el área A (entre columnas 8 y 11) deben empezar:


y Nombres de divisiones, de secciones, de párrafos
y Los niveles indicadores (FD, SD) y niveles de las variables

3) En el área B (de la columna 12 a la 72) deben empezar:


y Todas las sentencias y líneas de continuación del programa

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 19
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Continuación de sentencias

EJEMPLO

.I. n
COL. 7

.T ció
......|..1........2.........3. // ..6.........7..
77 ANY-DATA-ITEM USAGE DISPLAY

.
PIC X(20).
77 ITEM-CONTINUED PIC X(26) VALUE "ABCDE

C
.F a
- "FGHIJKLMOPQRSTUVWYZ".
77 ITEM-WITH-BLANKS PIC X(40) VALUE "01 02
- "03 04 05 06 07 08 09 10 "

C rm
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
20 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Pasos a realizar con un programa

Con el programa escrito, ¿que hacer?

.I. n
.T ció
Programa fuente

.
C
.F a
Compilador COBOL

C rm Mensajes de error Programa objeto

Montador
to fo
Módulo de carga
ec o v
oy si
pr lu

Notas:
c

Una vez se ha escrito el programa, este debe seguir una serie de pasos antes de poder
ejecutarse en el ordenador.
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 21
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

___________________________________________________________________
22 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 2.- Organización de un programa COBOL

Objetivos

.I. n
Objetivos

.T ció
.
C
Conocer las divisiones de un programa COBOL

.F a
Ser capaz de codificar la IDENTIFICATION DIVISION

C rm
Conocer como se usa la ENVIRONMENT DIVISION
Entender el uso de la sección W ORKING-STORAGE de la
DATA DIVISION
to fo
ec o v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 23
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

IDENTIFICATION DIVISION

Organización de un programa

.I. n
.T ció
IDENTIFICATION DIVISION

.
C
.F a
ENVIRONMENT DIVISION

C rm DATA DIVISION
to fo
PROCEDURE DIVISION
ec o v
oy si

Notas:

De las cuatro divisiones de un programa COBOL, la IDENTIFICATION DIVISION


pr lu

debe ser la primera.


c
Ex

___________________________________________________________________
24 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

IDENTIFICATION DIVISION

.I. n
PROGRAM-ID

.T ció
Parrafos opcionales

AUTHOR

.
INSTALLATION

C
DATE-W RITTEN

.F a
DATE-COMPILED
SECURITY

C rm
to fo
ec o

Notas:
v

La IDENTIFICATION DIVISION sirve para dar el nombre del programa y puede in-
oy si

cluir las fechas en que fue codificado, la de compilación y otra información.

Debe empezar con las palabras IDENTIFICATION DIVISION o ID DIVISION se-


pr lu

guidas por un punto.

El primer párrafo de esta división debe ser el PROGRAM-ID que es el que sirve para
c

dar el nombre del programa. Los otros párrafos son opcionales y pueden ponerse en cualquier
Ex

orden.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 25
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

IDENTIFICATION DIVISION - Sintáxis

Formato - Identification Division de un programa

.I. n
(1)
IDENTIFICATION DIVISION. PROGRAM-ID. nombre programa

.T ció
ID

(1)
.

.
IS RECURSIVE
COMMON PROGRAM

C
INITIAL

.F a
INITIAL
COMMON

C rm AUTHOR.
(1)

comentario
to fo
Continua en la siguiente visual
ec o

Notas:
v

y PROGRAM-ID nombre programa


oy si

Sirve para dar el nombre con el que se conocerá el programa y permite darle unos
atributos. Es obligatorio y debe ser el primero de la ID DIVISION.
pr lu

El nombre del programa debe seguir unas reglas de acuerdo con la opción de com-
pilación PGMNAME (ver el Programmer’s Guide).
c

9 RECURSIVE: Indica que el programa puede llamarse a sí mismo


9 COMMON: Indica que el programa está contenido en otro
Ex

9 INITIAL: Indica que cuando se cargue el programa lo haga en su estado


inicial

y AUTHOR
Nombre del que escribe el programa. Es un párrafo opcional.

___________________________________________________________________
26 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

IDENTIFICATION DIVISION - Sintáxis ...

Formato - Identification Division de un programa (cont.)

.I. n
(1)
INSTALLATION.

.T ció
comentario

(1)

.
DATE-WRITTEN.

C
comentario

.F a
(1)
DATE-COMPILED.

C rm SECURITY.
(1)
comentario
to fo
comentario
ec o

Notas:
v

Estos párrafos también son opcionales:


oy si

y INSTALLATION
Nombre de la compañía o localidad
pr lu

y DATE-WRITTEN
Fecha en que el programa se codificó
y
c

DATE-COMPILED
Fecha en que se compiló. Cualquier comentario que se incluya en esta línea apa-
Ex

recerá en el listado de salida con la fecha en que se realizó la compilación. (p.ej:


10/25/01
y SECURITY
Nivel de confidencialidad de este programa

Las líneas de estos párrafos deben iniciarse en el área B y sirven sólo como
documentación.

(1): El punto es opcional

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 27
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de IDENTIFICATION DIVISION

IDENTIFICATION DIVISION.

.I. n
PROGRAM-ID. PERSRPT.
AUTHOR. BEA SANJUAN.

.T ció
INSTALLATION. IBM E&T.
DATE-WRITTEN. 07/31/2001.
DATE-COMPILED.

.
SECURITY. NONE.

C
.F a
*********************************************
* Using the personnel file, print a personnel

C rm
* report with the employee number and each
* employee's hire-date, displayed as
* MM/DD/YYYY on the report
*********************************************
to fo
ec o

Notas:
v

Como puede apreciarse no hay ninguna fecha en DATE-COMPILED. La fecha en


oy si

que el programa se compile de forma satisfactoria quedará reflejada en el listado de salida.


pr luc
Ex

___________________________________________________________________
28 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

ENVIRONMENT DIVISION

Organización de un programa

.I. n
.T ció
IDENTIFICATION DIVISION

.
C
ENVIRONMENT DIVISION

.F a
C rm CONFIGURATION
SECTION
INPUT-OUTPUT
SECTION
to fo
DATA DIVISION

PROCEDURE DIVISION
ec o v
oy si

Notas:
pr lu

La ENVIRONMENT DIVISION es la siguiente divisón del COBOL y consta de dos


secciones:
c

CONFIGURATION SECTION
INPUT-OUTPUT SECTION
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 29
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

ENVIRONMENT DIVISION

CONFIGURATION SECTION

.I. n
SOURCE-COMPUTER
W ITH DEBUGGING MODE

.T ció
OBJECT-COMPUTER
Nombre ordenador
SPECIAL-NAMES

.
Nombres entorno

C
.F a
Alfabeto
Caracteres simbólicos
Signo monetario

C rm INPUT-OUTPUT SECTION

FILE-CONTROL
I-O CONTROL
to fo
ec o

Notas:
v

y CONFIGURATION SECTION
oy si

Es una sección opcional que permite describir el entorno del ordenador en el que
el programa se compilará y ejecutará. Sólo puede codificarse en el programa más
pr lu

externo de un conjunto de programas anidados.

y INPUT-OUPUT SECTION
c

Tiene dos párrafos importantes:


y FILE-CONTROL
Ex

y I-O-CONTROL
El contenido de esta sección depende del tipo de organización y del método de ac-
ceso de los archivos que utiliza el programa. Se verá con más detalle a lo largo del
curso.

___________________________________________________________________
30 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

CONFIGURATION SECTION -Sintáxis

.I. n
Formato

.T ció
CONFIGURATION SECTION.
párrafo SOURCE-COMPUTER

.
C
párrafo OBJECT-COMPUTER párrafo SPECIAL-NAMES

.F a
C rm
to fo
ec o

Notas:
v

Toda esta sección es opcional. Con ella se puede:


oy si

y Relacionar nombres de entorno definidos por IBM con nombres nemotécnicos del
usuario
pr lu

y Indicar la secuencia de comparaciones / orden


y Indicar el carácter de sustitución de moneda
y Intercambiar las funciones de la coma y el punto en las clausulas de la PICTURE
c

y en los literales numéricos


Ex

y Indicar caracteres simbólicos


y ...

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 31
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de ENVIRONMENT DIVISION

ENVIRONMENT DIVISION.

.I. n
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-390.

.T ció
OBJECT-COMPUTER. IBM-390.
SPECIAL-NAMES. CLASS VALID-STUFF IS

.
'A' thru 'Z', '1' thru '9'.

C
INPUT-OUTPUT SECTION.

.F a
FILE-CONTROL.
SELECT PERSNNL ASSIGN TO PERSNNL.

C rm SELECT LISTING ASSIGN TO LISTING.


to fo
ec o

Notas:
v
oy si
pr luc
Ex

___________________________________________________________________
32 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

DATA DIVISION

Organización de un programa

.I. n
.T ció
IDENTIFICATION DIVISION

.
ENVIRONMENT DIVISION

C
.F a
C rm DATA DIVISION

WORKING-STORAGE FILE LINKAGE


to fo
SECTION SECTION SECTION

PROCEDURE DIVISION
ec o v

Notas:
oy si

La DATA DIVISION consta de varias secciones en las que se realiza la definición de


pr lu

las variables que manejará el programa.


c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 33
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

DATA DIVISION

FILE SECTION

.I. n
Entradas de descipción de archivos (FD o SD)

.T ció
Entradas de descripción de registros

WORKING-STORAGE SECTION

.
C
Entradas de descripción de registros

.F a
Entradas de descripción de variables

C rmLINKAGE SECTION

Entradas de descripción de registros


Entradas de descripción de variables
to fo
ec o

Notas:
v

La DATA DIVISION comprende tres secciones:


oy si

y FILE SECTION
pr lu

Sirve para definir la estructura de los archivos. Las variables definidas en esta sec-
ción no están disponibles para el programa hasta que se abra el archivo y se rea-
lice alguna operación de lectura
c

y WORKING-STORAGE SECTION
Ex

Es la zona donde se definen las variables de trabajo

y LINKAGE SECTION
Es donde se definen las variables que quedan a disposición del programa desde
otros programas

Todas estas secciones son opcionales pero, de existir, deben colocarse en el orden in-
dicado. Se va a estudiar la WORKING-STORAGE y las otras secciones se verán más
adelante.

___________________________________________________________________
34 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de DATA DIVISION

DATA DIVISION.

.I. n
FILE SECTION.
FD PERSNNL

.T ció
RECORDING MODE F
BLOCK CONTAINS 0 RECORDS.
01 PERSNNL-RECORD PIC X(80).

.
C
FD LISTING

.F a
BLOCK CONTAINS 1 RECORD.

C rm 01 LIST-LINE PIC X(80).


to fo
ec o

Notas:
v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 35
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de DATA DIVISION ...


WORKING-STORAGE SECTION.
01 PERSNNL-LAYOUT.

.I. n
05 IN-EMPLOYEE-NO PIC 9(5).
05 IN-HIRE-DATE.
10 IN-HIRE-YR PIC 9(4) VALUE ZEROES.

.T ció
10 IN-HIRE-MO PIC 99 VALUE ZEROES.
10 IN-HIRE-DA PIC 99 VALUE ZEROES.
05 FILLER PIC X(67).
01 EOF-FLAG PIC X VALUE SPACE.

.
88 END-OF-FILE VALUE 'Y'.

C
88 NOT-END-OF-FILE VALUE ' '.

.F a
* linea de detalle para el informe de personal
01 DETAIL-1.
05 OUT-EMPL-NUM PIC 9(5) VALUE ZEROES.

C rm 05 FILLER
05 OUT-HIRE-DATE.
10 OUT-HIRE-DD
10
10 OUT-HIRE-MM
10
PIC X(5)

PIC
PIC
PIC
PIC
99
X
99
X
VALUE SPACES.

VALUE
VALUE
VALUE
VALUE
ZEROES.
'-'.
ZEROES.
'-'.
to fo
10 OUT-HIRE-YYYY PIC 9(4) VALUE ZEROES.
05 FILLER PIC X(56) VALUE SPACES.
ec o

Notas:
v
oy si
pr luc
Ex

___________________________________________________________________
36 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Descripción de variables

Descripción de variables

.I. n
Todas las descripciones de variables deben finalizar con un punto

.T ció
Formato 1

.
número de nivel
nombre-1 cláusula redefines

C
.F a
FILLER

cláusula blank when zero cláusula external

C rm cláusula global cláusula justified cláusula occurs


to fo
cláusula picture cláusula sign cláusula synchronized

cláusula usage cláusula value cláusula date format


ec o v
oy si

Notas:

Este formato se utiliza para describir las variables en todas las secciones de la DATA
pr lu

DIVISION.

Las distintas cláusulas pueden escribirse en cualquier orden, teniendo en cuenta que:
c

y Si se especifica el nombre de una variable (o FILLER) debe seguir al número de


Ex

nivel
y Si se especifica la cláusula REDEFINES debe estar justo a continuación del nom-
bre de la variable (o FILLER) si es que se indica. Si no se ponen entonces la cláu-
sula REDEFINES debe ir justo a continuación del número de nivel

El número de nivel puede ser cualquiere entre 01 y 49 o el 77. Las distintas cláusulas
deben ir separadas por un espacio, una coma o un punto y coma.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 37
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Números de nivel

Los números de nivel del 01 al 49 sirven para indicar la


jerarquía de los datos.

.I. n
.T ció
PERSONAL-RECORD
EMPLOYEE-NAME EMPLOYMENT
POSITION

.
FIRST-NAME LAST-NAME SERIAL-NR NO USADO DIVISION DEPT

C
.F a
01 PERSONAL-RECORD.
02 EMPLOYEE-NAME.

C rm 04 FIRST-NAME
04 LAST-NAME
02 EMPLOYMENT.
04 SERIAL-NR
04 POSITION.
PICTURE X(10).
PICTURE X(10).

PICTURE 9(6).
to fo
06 FILLER PICTURE X(4).
06 DIVISION PICTURE X(4).
06 DEPT PICTURE 9(4).
ec o

Notas:
v

El número de nivel permite representar la jerarquía de datos dentro de un registro e


oy si

identifica distintos cometidos de las variables. Un número de nivel es el inicio de una varia-
ble, un nombre de condición o de una redefinición. Debe tener un valor entre 01 y 49, además
pr lu

de los valores especiales 66, 77 y 88.

Los niveles 01 y 77 deben empezar en el área A y, a continuación, y separados por es-


c

pacios el nombre de la variable (o FILLER) y la cláusula de descripción de la variable


apropiada.
Ex

Los números de nivel 02 a 49 pueden empezar en las áreas A o B, así como los 66 y
88. Los niveles del 01 a 09 pueden indicarse con un sólo dígito (1 a 9)

Las sucesivas entradas pueden empezar en la misma columna que la anterior o pueden
estar endentadas para una mayor claridad. Esta endentación no afecta a los números de nivel.

___________________________________________________________________
38 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Indicador de nivel

Un campo no subdividido recibe el nombre de campo ELEMENTAL

.I. n
Un conjunto de campos elementales es una agrupación

.T ció
Un nivel 01 puede ser un campo elemental o una agrupación
Los números de nivel indican la jerarquía de los campos
Un número de nivel tiene uno o dos dígitos.

.
C
Niveles válidos son: 01-49, 66, 77 y 88

.F a
Un número de nivel mayor indica un campo subordinado

C rm
Los números de nivel no tienen que ser consecutivos
to fo
ec o

Notas:
v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 39
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

NÚMEROS DE NIVEL ESPECIALES

Números de nivel especiales

.I. n
El nivel 66 contiene una cláusula RENAMES. Sirve para reagrupar

.T ció
campos previamente definidos
El nivel 77 define un campo elemental

.
El nivel 88 proporciona nombres de condición, asociados a la

C
cláusula VALUE

.F a
Formato 2

C rm 66 nombre-1
nombre-1 Cláusula Renames
to fo
Formato 3

88 nombre condición-1 cláusula value


ec o v
oy si

Notas:

y El nivel 66 reagrupa datos previamente definidos. Un nivel 66 no puede referirse


pr lu

a otro nivel 66 ni a un 01, 77 ni 88

y El nivel 77 son datos elementales sin subdivisiones. Deben ser únicos ya que no
c

pueden calificarse
Ex

y El nivel 88 sirve para dar nombres de condición. Un nombre de condición sirve


para asociar un valor, un conjunto de valores o un rango de valores a una variable.

___________________________________________________________________
40 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de Números de nivel especiales

01 EMPLOYEE-RECORD.
05 EMPLOYEE-TYPE PIC X.

.I. n
88 EXEMPT VALUE 'E'.
88 NON-EXEMPT VALUE 'N'.

.T ció
05 EMPLOYEE-NAME PIC X(30).
05 EMPLOYEE-ADDRESS.
10 EMPLOYEE-STREET PIC X(15).

.
10 EMPLOYEE-CITY PIC X(15).
10 EMPLOYEE-STATE PIC X(2).

C
.F a
10 EMPLOYEE-ZIP PIC 9(5).
66 GEOGRAPHIC
RENAMES EMPLOYEE-CITY THRU EMPLOYEE-ZIP.

C rm ...

77 COUNTER PIC S9(5).


to fo
ec o

Notas:
v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 41
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

NOMBRES DE LAS VARIABLES

Nombre de las variables

.I. n
.T ció
Sirven para identificar las variables a utilizar
Debe ser la primera palabra después del número de nivel

.
Su contenido puede cambiar a lo largo de la ejecución del

C
programa

.F a
No pueden ser iguales que un nombre de sección o de
párrafo

C rm
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
42 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Calificación del nombre de las variables

Cuando el nombre de una variable no es único, debe calificarse


hasta conseguir su unicidad. Esto se consigue añadiendo el

.I. n
término IN.

.T ció
01 EMPLOYEE-RECORD.

.
05 EMPLOYEE-SERIAL PIC X(6).

C
05 EMPLOYEE-NAME PIC X(30).

.F a
...
01 WEEKLY-PR-RECORD.
05 WEEK-ENDING-DATE PIC 9(8).

C rm 05 EMPLOYEE-SERIAL
...
PROCEDURE DIVISION
PIC X(6).

MOVE EMPLOYEE-SERIAL IN EMPLOYEE-RECORD TO ...


to fo
ec o

Notas:
v

Un nombre de variable puede convertirse en único si está dentro de una estructura,


oy si

añadiendo uno o más niveles de su jerarquía. Estos niveles añadidos reciben el nombre de ca-
lificadores. La calificación se realiza añadiendo la palabra IN (u OF).
pr lu

En cualquier jerarquía el nombre asociado al nivel superior debe ser único y no puede
calificarse.
c

Pueden indicarse todos los niveles de calificación que se desee para convertir el nom-
Ex

bre en único, aunque normalmente no es preciso indicar todos los niveles de la jerarquía.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 43
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

FILLER

FILLER es una palabra reservada del COBOL que se utiliza para


describir campos que no se podrán referenciar en la PROCEDURE

.I. n
DIVISION.

.T ció
Si se omite el nombre de la variable o la cláusula FILLER el
campo descrito se trata como si fuera un FILLER

.
C
.F a
01 EMPLOYEE-RECORD.
05 EMPLOYEE-TYPE PIC X.

C rm 05 EMPLOYEE-SERIAL
05 EMPLOYEE-NAME
05
05 EMPLOYEE-ADDRESS
05 FILLER
PIC
PIC
PIC
PIC
PIC
X(6).
X(30).
X(2).
X(60).
X(34).
to fo
ec o

Notas:
v

La palabra FILLER sirve para dar nombre a una variable que no puede ser referen-
oy si

ciado en el programa. Es opcional y, de indicarse, debe ir justo después del número de nivel.
pr lu

En sentencias de tipo CORRESPONDING (MOVE, ADD, SUBTRACT) los datos FI-


LLER se ignoran lo cual también ocurre en la sentecia INITIALIZE.
c

Cuando al describir una variable no se indica un nombre, se asume FILLER. Puede


utilizarse la cláusula VALUE en la definición de un FILLER.
Ex

___________________________________________________________________
44 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

CLÁUSULA PICTURE

Cláusula PICTURE

.I. n
La cláusula PICTURE sirve para dar características generales y

.T ció
formas de edición de las variables
PIC y PICTURE son equivalentes

.
La longitud máxima de lo descrito en PIC es de 30 caracteres

C
Los valores entre paréntesis en las series sirven para indicar

.F a
repetición. Lo siguientes ejemplos son equivalentes:

C rm Formato
PICTURE
PIC
IS $99999.99CR.
IS $9(5).9(2)CR.
to fo
PICTURE serie caracteres
PIC IS
ec o v
oy si

Notas:

Sirve para especificar las características generales y los requisitos de edición de una
pr lu

variable elemental.

Esta cláusula debe especificarse en cada variable elemental excepto para una variable
c

de indice o el sujeto de una clausula RENAMES.


Ex

La serie caracteres que se indica sirve para indicar la categoria de la variable.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 45
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Simbolos válidos en la cláusula PICTURE


A carácter alfabético o espacio

.I. n
B espacio
E indica el inicio del exponente en un campo

.T ció
de coma flotante
X puede albergar cualquier carácter

.
Z carácter numérico o un espacio

C
.F a
9 permite almacenar un número
0 permite almacenar el número 0

C rm /
.
,
para almacenar el carácter slash
para almacenar un punto
almacena una coma
to fo
ec o

Notas:
v
oy si
pr luc
Ex

___________________________________________________________________
46 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Simbolos válidos en la cláusula PICTURE ...

+ ó - ó CR ó DB simbolos de edición de signo

.I. n
* protección de números - "protección de cheque"
$ simbolo de moneda

.T ció
Simbolos admitidos pero que no ocupan una posición en los
datos:

.
C
.F a
P posición decimal asumida
S indica la presencia de signo

C rm V indica la posición del punto decimal


to fo
ec o

Notas:
v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 47
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

CLÁUSULA USAGE

Cláusula USAGE

.I. n
Formato

.T ció
BINARY
USAGE
IS COMP
COMPUTATIONAL

.
COMP-1

C
COMPUTATIONAL-1

.F a
COMP-2
COMPUTATIONAL-2
COMP-3

C rm COMPUTATIONAL-3
PACKED-DECIMAL
COMP-4
COMPUTATIONAL-4
DISPLAY
to fo
DISPLAY-1
INDEX
POINTER
PROCEDURE POINTER
ec o v
oy si

Notas:

Con la cláusula USAGE se indica el formato de la variable en la memoria del


pr lu

ordenador.

Puede darse en todos los número de nivel que no sean el 66 o el 88. Si se especifica a
c

nivel de un elemento de agrupación, todos las variables elementales que están contenidas tie-
Ex

nen el mismo USAGE.

Si no se indica esta cláusula, se asume DISPLAY.

Las variables definidas con formato fecha sólo admiten DISPLAY o COMP-3.

___________________________________________________________________
48 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Representación interna de los datos


Representación
PICTURE Valor
interna (Hex)*

.I. n
9999 DISPLAY +1234 F1 F2 F3 F4
9999 DISPLAY -1234 F1 F2 F3 F4
S9999 DISPLAY +1234 F1 F2 F3 C4

.T ció
S9999 DISPLAY -1234 F1 F2 F3 D4
S9999 DISPLAY SIGN LEADING SEPARATE +1234 4E F1 F2 F3 F4
S9999 DISPLAY SIGN LEADING SEPARATE -1234 60 F1 F2 F3 F4

.
9999 BINARY +1234 04 D2

C
9999 BINARY -1234 04 D2

.F a
999999 BINARY +1234 00 00 04 D2
999999 BINARY -1234 00 00 04 D2

C rmS9999 BINARY
S999999 BINARY
9999
99999
999999
COMP-3
COMP-3
COMP-3
-1234
-1234
-1234
+12345
+12345
FB 2E
FF FF FB 2E
01
12
01
23
34
23
4F
5F
45 6F
to fo
6
S9999 COMP-3 -1234 01 23 4D
S99999 COMP-3 +12345 12 34 5C
* EBCDIC
ec o

Notas:
v

y DISPLAY
oy si

Cada carácter ocupa un octeto

y BINARY, COMPUTATIONAL o COMPUTATIONAL-4


pr lu

Los datos estan en formato binario (ocupando 2, 4 u 8 octetos). Si llevan signo,


los valores negativos se representan en formato de complemento a dos.
c

y PACKED-DECIMAL o COMPUTATIONAL-3
Ex

Los datos se alamcenan internamente en formato “empaquetado” (dos dígitos por


octeto excepto el último medio octeto de la derecha que lleva el signo)

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 49
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

CLÁUSULA VALUE

Cláusula VALUE

.I. n
Formato 1 - literales

.T ció
VALUE literal
IS

.
Formato 2 - nombres de condición

C
.F a
88 nombre de condición-1 VALUE
IS

C rm literal-1
THROUGH
THRU
VALUES

literal-2
ARE

.
to fo
Formato 3 - nulos
VALUE NULL
IS NULLS
ec o v
oy si

Notas:

Con esta cláusula se puede indicar el valor inicial de una variable o los valores posi-
pr lu

bles de un nombre de condición. El uso de esta cláusula es distinto según la sección de la


DATA DIVISION en el que se use.
c

En la FILE y en la LINKAGE si se utiliza la cláusula VALUE en variables que no


Ex

sean nombres de condición, se ignora.

En la WORKING se puede utilizar para dar valores iniciales a los nombres de condi-
ción y a las variables. Si no se utiliza, el valor inicial de las variables es impredecible.

Existen tres formatos:

y Formato 1:
Da valor inicial a una variable. La inicialización es independiente de las cláusulas
BLANK WHEN ZERO o JUSTIFIED que se hayan indicado.
Si se utiliza en la descripción de una variable que contiene o está subordinada a un
OCCURS, todos los elementos tendrán el valor indicado. Si se trata de una defini-
ción con DEPENDING ON se inicializan el número máximo de ocurrencias.
___________________________________________________________________
50 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

No puede ponerse en variables que estén contenidas o contengan entradas del tipo
EXTERNAL o REDEFINES.
Si se especifica a nivel de estructura el literal debe ser no numérico. Los elemen-
tos se inicializan sin tener en cuenta las variables elementales. En este caso no
pueden darse valores a ninguna entrada.
A nivel de estructura no puede darse esta cláusula si alguno de los elementos con-

.I. n
tiene alguna de las siguientes: JUSTIFIED, SYNCHRONIZED o un USAGE dis-
tinto del DISPLAY.

.T ció
y Formato 2:
Permite asociar un valor, valores y/o un rango de valores a un nombre de condi-

.
ción. Cada nivel 88 debe tener su propio nombre de condición.

C
.F a
y Formato 3:
Asigna una dirección no válida a las variables definidas con los USAGE del tipo

C rmPOINTER
to fo
ec o v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 51
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de la cláusula VALUE

WORKING-STORAGE SECTION.

.I. n
...
02 GRADE-LEVEL PIC 99.
88 ELEMENTARY VALUES 1 THRU 8.

.T ció
88 SECONDARY VALUES 9 THROUGH 12.
02 COST.
03 DOLLARS PIC X(3).
03 FILLER PIC X VALUE '.'.

.
03 PENNIES PIC X(2).

C
02 FC-CODE-GOOD PIC S9(8) BINARY VALUE LOW-VALUES.

.F a
...
05 PRICE PIC 999V99 VALUE IS 123.45.
05 PRICE-BREAK PIC 999V99 USAGE IS BINARY VALUE ZERO.

C rm
...
01 PRINT-LINE
01 HEADING-1
01 ADDR-PTR
...
PIC X(132) VALUE SPACES.
PIC X(132) VALUE ALL '_"'.
USAGE IS POINTER VALUE NULLS.
to fo
77 CHICAGO-AIRPORT PIC X(15) VALUE 'O''HARE'.
77 RESPONSE PIC X(20) VALUE 'HA DICHO "SI".'.
ec o

Notas:
v
oy si
pr luc
Ex

___________________________________________________________________
52 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Constantes figurativas

ZERO, ZEROS, ZEROES

.I. n
SPACE, SPACES

.T ció
HIGH-VALUE, HIGH-VALUES (En EBCDIC es el valor X'FF')
LOW -VALUE, LOW -VALUES (En EBCDIC es el valor X'00')

.
QUOTE, QUOTES

C
.F a
ALL
NULL, NULLS

C rm
to fo
ec o

Notas:
v

Se trata de palabras reservadas que nombran y hacer referencia a unos valores especí-
oy si

ficos. Su significado es:

y ZERO / ZEROS / ZEROES


pr lu

Representa el valor numérico cero (0) o una sucesión ocurrencias de este carácter.
y SPACE / SPACES
c

Representa un o más espacios o blancos.


y HIGH-VALUE / HIGH-VALUES
Ex

Permite colocar una o más ocurrencias del carácter más alto en la secuencia de or-
den utilizada. En EBCDIC es el carácter hexadecimal FF.
y LOW-VALUE / LOW-VALUES
Permite colocar una o más ocurrencias del carácter más bajo en la secuencia de
orden utilizada. En EBCDIC es el carácter hexadecimal 00
y QUOTE / QUOTES
Representa una o más ocurrencias del carácter “ que depende de la opción de
compilación QUOTE o APOST.
y ALL
Permite repetir la serie de caracteres indicada

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 53
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Clases de Datos

Los grupos son ALFANUMERICOS independientemente de los


campos elementales que los componen

.I. n
Los campos elementales son de la clase indicada en su definición

.T ció
(cláusula PICTURE):
ALFABETICOS
A

.
NUMERICOS
9 P S V (Máximo: 18 digitos)

C
.F a
NUMERICOS en formato edición
B P V Z 9 0 / , . + - CR DB * $ (USAGE DISPLAY)

C rm (Máximo 18 digitos - 249 caracteres de edición)


ALFANUMERICOS
X ó X con A 9 (USAGE DISPLAY)
ALFANUMERICOS en formato edición
A X 9 B 0 / (USAGE DISPLAY)
to fo
ec o

Notas:
v
oy si
pr luc
Ex

___________________________________________________________________
54 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de Edición

Edición con inserción COBOL


Valor Resultado
PICTURE

.I. n
0 99999.99 00000.00
1234 99999.99 01234.00

.T ció
.3456 99999.99 00000.34
12345 99999.99 12345.00
12345- 99999.99 12345.00

.
12345 99,999.99 12,345.00

C
123^45 99999.99 00123.45

.F a
Edición con supresión de ceros COBOL
Valor Resultado

C rm 0
0
1234
12345
PICTURE
ZZZZZ.99
ZZZZZ.ZZ
ZZZZZ.99
ZZZZZ.99
.00

1234.00
12345.00
to fo
123- -ZZZZZ.99 - 123.00
12345 ZZ,ZZZ.99 12,345.00
123.456 ZZZZZ.99 123.45
ec o

Notas:
v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 55
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de Edición ...

Edición con inserción fija Valor PICTURE Resultado

.I. n
0 $9999.99 $0000.00
1234 $9999.99 $1234.00
1234- $9999.99BCR $1234.00 CR

.T ció
12345 $99,999.99 $12,345.00
123 ^45 $99,999.99 $00,123.45
12345- $99,999.99 $12,345.00

.
123 ^45- $99,999.99- $00,123.45-

C
123 ^45- -$99,999.99 -$00,123.45

.F a
Edición con inserción Valor PICTURE Resultado
flotante 0 $$$$$.99 $.00

C rm 0
0
0
123
12345
$$$$$.ZZ
$$$$9.99
*****.**
$$$$$.99
$$$$$.99
$0.00
*****.**
$123.45
$2345.00
to fo
1234- $$$,$$$.99- $1,234.00-
12345 $$$,$$$.99- $12,345.00
123 ^45 $$,$$$.99 $123.4 5
123 ^45- $$,$$$.99- $123.00-
ec o

Notas:
v
oy si
pr luc
Ex

___________________________________________________________________
56 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

NOTACIÓN HEXADECIMAL

Notación HEXADECIMAL

.I. n
La notación hexadecimal puede utilizarse en literales no-numéricos

.T ció
Los caracteres permitidos son:

.
0-9, a-f, A-F

C
.F a
Se inician con el delimitador X" (o X' con opción APOST)

C rm
Se finalizan con el delimitador " ( o ' con opción APOST)

EJEMPLO:

77 ENTRY-PT PIC IS X(4) VALUE IS X'90ECD00C'.


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 57
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

REDEFINICIÓN

REDEFINES

.I. n
Formato

.T ció
número nivel REDEFINES nombre-2
nombre-1
FILLER

.
C
.F a
La redefinición permite que distintas descripciones de variables
utilicen la misma área de memoria.

C rmLos números de nivel de nombre-1 y nombre-2 deben ser iguales

05 AAA PIC X(6).


05 BBB REDEFINES AAA.
to fo
10 B-1 PIC X(2).
10 B-2 PIC 9(4).
05 CCC REDEFINES AAA.
10 C-1 PIC X(4).
ec o

10 C-2 PIC 9(2).


v
oy si

Notas:

La cláusula REDEFINES permite dar distintas descripciones a la misma zona de me-


pr lu

moria. Cuando se especifica, debe ser la primera cláusula después del nombre de la variable
(nombre-1) o FILLER. Si no se especifica nombre de variable debe ser lo primero después
del número de nivel.
c
Ex

Los números de nivel de nombre-1 y nombre-2 deben ser iguales y no pueden ser ni
66 ni 88.

Cuando se escriben varios niveles 01 en una FD se produce una redefinición


implícita. Es decir, el segundo 01 redefine la memoria del primero. No debe indicarse la cláu-
sula REDEFINES.

La redefinición se inicia con nombre-1 y finaliza cuando se encuentra un número de


nivel menor o igual al suyo.

___________________________________________________________________
58 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Por ejemplo:

05 A PICTURE X(6).
05 B REDEFINES A.
10 B-1 PICTURE X(2).

.I. n
10 B-2 PICTURE 9(4).
05 C PICTURE 99V99

.T ció
La redefinición incluye los elementos B-1 y B-2 y finaliza al llegar a C.

.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 59
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PROCEDURE DIVISION

Organización de un programa COBOL

.I. n
.T ció
IDENTIFICATION DIVISION

.
C
.F a
ENVIRONMENT DIVISION

C rm DATA DIVISION
to fo
PROCEDURE DIVISION
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
60 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PROCEDURE DIVISION - Estructura


Formato

PROCEDURE DIVISION cabecera

.I. n
.T ció
DECLARATIVES. | sect | . USE END DECLARATIVES.

| parraf|

.
C
.F a
(1)
| sect | .

| parraf|

C rm sect:

nombre sección SECTION


prioridad
to fo
parraf:

nombre párrafo.
sentencia
ec o

Notas:
v

La PROCEDURE DIVISION consta de una serie de partes opcionales, como la sec-


oy si

ción de DECLARATIVES, y una serie de procesos que contienen secciones, parrafos, ins-
trucciones y expresiones.
pr lu

(1) Las secciones son opcionales. Si se omiten también pueden omitirse los párrafos
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 61
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de PROCEDURE DIVISION

.I. n
PROCEDURE DIVISION.
OPEN INPUT PERSNNL OUTPUT LISTING
READ PERSNNL INTO PERSNNL-LAYOUT

.T ció
AT END SET END-OF-FILE TO TRUE

PERFORM UNTIL END-OF-FILE

.
PERFORM DETAIL-LINE

C
.F a
PERFORM READMAST
END-PERFORM

C rm CLOSE PERSNNL LISTING.


GOBACK.
to fo
ec o

Notas:
v
oy si
pr luc
Ex

___________________________________________________________________
62 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de PROCEDURE DIVISION ...

* Mueve todos los campos de entrada a los *

.I. n
* de salida. Solo hay 30 empleados, pero *
* ¿que pasará si la compañia duplica o *
* triplica su tamaño? *

.T ció
DETAIL-LINE.
MOVE IN-EMPLOYEE-NO TO OUT-EMPL-NUM

.
MOVE IN-HIRE-YY TO OUT-HIRE-YYYY

C
.F a
MOVE IN-HIRE-MO TO OUT-HIRE-MM
MOVE IN-HIRE-DA TO OUT-HIRE-DD

C rm WRITE LIST-LINE FROM DETAIL-1

READMAST.
AFTER ADVANCING 2 LINES.

READ PERSNNL INTO PERSNNL-LAYOUT


to fo
AT END SET END-OF-FILE TO TRUE.
ec o

Notas:
v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 63
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

___________________________________________________________________
64 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 3.- PROCEDURE DIVISION

Objetivos

.I. n
Objetivos

.T ció
.
Mostrar las posibilidades de la PROCEDURE:

C
.F a
PROCEDURE DIVISION y sentencia de

C rm asignación (MOVE)

Sentencias de cálculo
to fo
Sentencias de control de flujo
ec o

Sentencias de E/S
v
oy si
pr luc

Notas:
Ex

En este tema se verán las sentencias de asignación, de cálculo, de control de flujo y


las de E/S sencillas

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 69
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

1ª Parte.- La PROCEDURE DIVISION y las sentencias de asignación

Objetivos

.I. n
.T ció
Conocer la PROCEDURE DIVISION
Definir la cabecera de la división
Definir secciones

.
Definir párrafos

C
.F a
Saber como finalizar un programa o los párrafos
Introducir los finalizadores de ámbito

C rm
Conocer la instrucción MOVE
Conocer la instrucción SET TO TRUE
to fo
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
70 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PROCEDURE DIVISION

PROCEDURE DIVISION

.I. n
.T ció
IDENTIFICATION
DIVISION

.
ENVIRONMENT

C
DIVISION

.F a
C rm DATA DIVISION

PROCEDURE
DIVISION
to fo
CABECERA DECLARATIVAS SECCIONES PÁRRAFOS
ec o v
oy si
pr lu

Notas:
c

Se ven los componentes de esta división.


Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 71
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PROCEDURE DIVISION
Formato (1 de 2)

.I. n
PROCEDURE DIVISION
| cabecera |

.T ció
DECLARATIVES. | sect | . USE END DECLARATIVES.
| parraf |

.
(1)
| sect | .

C
.F a
| parraf |
cabecera:

C rm USING

BY

BY
REFERENCE

VALUE
variable-1
to fo
.
RETURNING variable-2
ec o v
oy si

Notas:
pr lu

La ejecución se inicia en la primera sentencia de la PROCEDURE que no sea de las


DECLARATIVES. Las sentencias se ejecutan en el orden en que se encuentran si no hay nin-
guna instrucción que lo cambie.
c

La Procedure finaliza por:


Ex

1) Una IDENTIFICATION DIVISION que indique el inicio de un programa anidado


2) Un END PROGRAM
3) El final físico del programa (no hay más sentencias)

La sección de DECLARATIVES se ejecuta cuando ocurre una situación especial. Si


se indican las DECLARATIVES deben estar al inicio de la PROCEDURE y toda la PROCE-
DURE debe estar dividida en secciones. No van a tratarse apenas en este curso.

Con USING se ponen a disposición del subprograma variables definidas en el programa que
lo invoca. Sólo debe indicarse esta opción si el programa se invoca con la sentencia CALL.
Cada variable debe estar definido en la LINKAGE SECTION con un nivel 01 o 77.

___________________________________________________________________
72 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PROCEDURE DIVISION

Formato (2 de 2)

.I. n
sect :

.T ció
nombre sección SECTION
prioridad
parraf:

.
C
nombre párrafo.

.F a
sentencia

C rm
to fo
ec o v
oy si

Notas:
pr lu

La PROCEDURE puede subdividirse en secciones y párrafos.

Una SECTION es un nombre definido por el usuario y que identifica de forma única
c

una parte de la PROCEDURE. Cada sección puede contener uno o más párrafos.
Ex

Una sección finaliza al encontrar la siguiente sección, al finalizar el programa o, en el


caso de las DECLARATIVES al encontrar las palabras END DECLARATIVES.

Un párrafo es un nombre seguido de un punto. El nombre del párrafo, dado que puede
calificarse con el de la sección en la que está incluido, no tiene por que ser único.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 73
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PÁRRAFOS

Párrafos

.I. n
Son las partes que configuran la PROCEDURE DIVISION

.T ció
El nombre de un párrafo debe empezar en el área A y debe
finalizar con un punto. Su nombre no tiene porque ser único

.
dentro del programa ya que puede calificarse con el nombre de

C
la sección a la que corresponda

.F a
C rm
El nombre del párrafo no tiene porque ser alfabético (puede ser
numérico)

Un párrafo finaliza por:


to fo
encontrar otro nombre de párrafo o de sección
llegar al final de la PROCEDURE DIVISION
las palabras END DECLARATIVES
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
74 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

SENTENCIAS DE FINALIZACIÓN

Sentencias de finalización

.I. n
EXIT PROGRAM
esta sentencia indica el final de un subprograma llamado y

.T ció
devuelve control al programa que lo invocó
STOP RUN

.
la sentencia STOP RUN finaliza la ejecución del programa y

C
devuelve el control al sistema

.F a
GOBACK
esta sentencia funciona como la EXIT PROGRAM cuando está

C rmen un subprograma y como la STOP RUN cuando se codifica


en un programa principal
EXIT
Proporciona un punto de final para una serie de párrafos
to fo
Registro especial RETURN-CODE
Un programa puede dar valor a este registro especial antes de
ejecutar la sentencia STOP RUN. Este valor lo recibirá el
ec o

sistema operativo
v
oy si
pr lu

Notas:
c

Si a las tres primeras sentencias de finalización les siguen otras en secuencia, éstas no
se ejecutarán nunca.
Ex

El registro especial RETURN-CODE tiene la siguiente definición implícita:

01 RETURN-CODE GLOBAL EXTERNAL


PIC S9(4) BINARY VALUE 0.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 75
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

FINALIZADORES DE ÁMBITO

Finalizadores de ámbito

.I. n
Existen unos finalizadores explícitos para algunas sentencias de

.T ció
la PROCEDURE DIVISION. Todos ellos son palabras reservadas
del COBOL. Son:

.
END-ADD END-INVOKE END-SEARCH

C
.F a
END-CALL END-MULTIPLY END-START
END-COMPUTE END-PERFORM END-STRING
END-DELETE END-READ END-SUBSTRING

C rm END-DIVIDE
END-EVALUATE
END-IF
END-RETURN
END-REWRITE
END-UNSTRING
END-WRITE
to fo
Estos finalizadores se emparejan con la ocurrencia no emparejada
del verbo correspondiente
El finalizador implícito es el punto
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
76 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia de asignación

Sentencia de asignación (MOVE)

.I. n
La sentencia MOVE lleva los datos desde un área de memoria a

.T ció
otra (u otras) áreas

Formato 1

.
MOVE identificador-1 TO identificador-2

C
literal-1

.F a
C rm Formato 2

MOVE CORRESPONDING
CORR
identificador-1 TO identificador-2
to fo
Los identificadores pueden ser campos elementales o de grupo

No pueden "moverse" elementos tipo POINTER ni INDEX


ec o v
oy si
pr lu

Notas:
c

Esta sentencia sirve para transferir información de un área de memoria a otra u otras
áreas.
Ex

Después de la ejecución de la sentencia, el valor de la variable emisora no se ha modi-


ficado.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 77
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Movimientos elementales y de estructuras

Movimientos elementales:

.I. n
Ambas partes son campos elementales
Puede producirse conversión de los datos, así como la edición

.T ció
o supresión de la edición
En casos de movimientos alfabéticos, se producen los
oportunos rellenos o truncamientos

.
C
.F a
Movimientos de estructuras:

Ambas partes son estructuras

C rm No se produce conversión

MOVE "OUT OF SEQUENCE" TO MSG-FIELD


to fo
MOVE SPACES TO OLD-ADDR NEW-ADDR
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
78 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de MOVE
WORKING-STORAGE SECTION.
01 GROUP-ITEM1.

.I. n
04 ELEM-ITEM1 PIC X(1).
04 ELEM-ITEM2 PIC X(2).

.T ció
04 ELEM-ITEM3 PIC X(3).
04 ELEM-ITEM4 PIC X(4).
PROCEDURE DIVISION.
MOVE SPACES TO GROUP-ITEM-1

.
b b b b b b b b b b

C
.F a
MOVE "XY" TO ELEM-ITEM-1 ELEM-ITEM-3
X b b X Y b b b b b

C rm
MOVE ALL "*" TO ELEM-ITEM-4
X b b X

MOVE ALL "AB" TO ELEM-ITEM-3


Y b * * * *
to fo
X b b A B A * * * *
ec o v
oy si

Notas:
pr lu

¿Que pasaría con:

MOVE ‘OK, QUIERO AYUDARTE’ TO ELEM-ITEM4.


c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 79
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

OPCIÓN CORRESPONDING

Opción CORRESPONDING

.I. n
.T ció
01 STRUCT-1.
03 FIELD-A PIC 9(9) VALUE 123456789.
03 FIELD-B PIC X(5) VALUE "abcde".

.
03 FIELD-C PIC 9(4)V99 VALUE 1234.56.

C
03 FIELD-D PIC 9(4)V99 VALUE 123456789.

.F a
03 FILLER PIC X(20).
01 STRUCT-2.

C rm 10 FIELD-C
10 FILLER
10 FIELD-B
10 FILLER
10 FIELD-A
PIC Z(4).99.
PIC XXX.
PIC X(5).
PIC XXX.
PIC Z(9).
to fo
10 FILLER PIC XXX
...
MOVE CORRESPONDING STRUCT-1 TO STRUCT-2

Esta sentencia realiza 3 asignaciones (con warning)


ec o v
oy si
pr lu

Notas:
c

Dadas las definiciones indicadas en la visual, la sentencia MOVE CORRESPON-


DING mueve tres campos (FIELD-A, FIELD-B y FIELD-C) pero da un mensaje de aviso si-
Ex

milar al siguiente:

IGYPS2168-W “CORRESPONDING” was specified, but subordinate item “FILLER”


within “STRUCT-1” did not qualify according to the rules for the
“CORRESPONDING” phrase. Subordinate item “FILLER” ignored.

___________________________________________________________________
80 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Movimientos con edición

...
01 FARE-PLAY PIC 9999.99.

.I. n
77 DE-EDITED-FARE PIC 9999V99 COMP-3.
77 EDITED-TOTAL PIC ZZ,ZZ9.99.

.T ció
...
MOVE 1234.56 TO DE-EDITED-FARE
MOVE 9876.54 TO FARE-PLAY

.
DISPLAY DE-EDITED-FARE

C
MOVE FARE-PLAY TO DE-EDITED-FARE

.F a
DISPLAY DE-EDITED-FARE
MOVE FARE-PLAY TO EDITED-TOTAL

C rm DISPLAY EDITED-TOTAL
...

- - - - - - - SALIDA - - - - - -
123456
to fo
987654
9,876.54
ec o v
oy si

Notas:
pr lu

Se puede cambiar la visualización de los datos realizando un movimiento a otras va-


riables que tengan formatos de edición distintos.
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 81
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

ASIGNACIONES PARCIALES

Asignaciones parciales

.I. n
Formato

.T ció
MOVE nombre-datos1 (inicio: ) TO nombre-datos2
longitud

.
C
.F a
Las asignaciones parciales se realizan indicando la posición del

C rm
primer carácter a transferir y, opcionalmente, la longitud de lo que
se quiere asignar
Si se omite la longitud, se transfieren caracteres hasta llegar al
último de la variable (los : son obligatorios).
to fo
La variable debe ser de tipo DISPLAY. Puede estar calificada o
indexada. La descripción de la asignación se indica una vez la
variable está plenamente identificada
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
82 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de movimientos parciales

...
01 WHOLE-NAME PIC X(55).

.I. n
01 NAME-LENG PIC 9999 USAGE IS BINARY.
01 LAST-NAME PIC X(35).

.T ció
01 REC-LAYOUT.
05 FIELD-1 PIC(24).
05 FIELD-2 PIC(56).

.
...

C
MOVE WHOLE-NAME (1:25) TO LAST-NAME

.F a
...
MOVE 25 TO NAME-LENG

C rm
MOVE
MOVE
MOVE
MOVE
...
WHOLE-NAME (1:NAME-LENG) TO ...
FIELD-1(2:3) TO WHOLE-NAME(6:3)
SPACES TO FIELD-1 IN REC-LAYOUT (1:10)
SPACES TO FIELD-2 IN REC-LAYOUT (27:)
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 83
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SET TO TRUE

Sentencia SET TO TRUE

.I. n
Cuando se ejecuta esta sentencia, el valor asociado a un nombre de

.T ció
condición se asigna a la variable condicional asociada de acuerdo con las
reglas de la cláusula VALUE.
Formato -- SET (nombres de condición)

.
C
SET nombre-condición TO TRUE

.F a
C rm
Nom bre de condición : debe estar asociado a una variable condicional.
Si hay más de un valor en la cláusula VALUE del nom bre de condicón , la
variable condicional asociada toma el primer valor.
to fo
01 CUST-TYPE PIC 99.
88 INACTIVE VALUE 9.
88 SPEC-ACCTS VALUE 20, 11, 40, 44.
...
SET INACTIVE TO TRUE
SET SPEC-ACCTS TO TRUE
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
84 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia INITIALIZE

Sentencia INITIALIZE

.I. n
Formato

.T ció
INITIALIZE identificador-1

.
C
REPLACING ALPHABETIC BY identificador-2

.F a
ALPHANUMERIC DATA literal-1
NUMERIC
ALPHANUMERIC-EDITED

C rm NUMERIC- EDITED
DBCS
EGCS

La sentencia INITIALIZE asigna valores predeterminados a las variables


to fo
dependiendo de su tipo. Es equivalente a una o más sentencias MOVE
Si no se utiliza la opción REPLACING:
se utiliza SPACE para variables receptoras de tipo alfabético,
alfanumérico, alfanumérico editado y DBCS
ec o

se utiliza ZERO para variables numéricas y numericas editadas


v
oy si
pr lu

Notas:
c

Permite inicializar categorias de variables a unos valores predeterminados. Funcional-


mente es equivalente a uno o varias sentencias MOVE.
Ex

y Si no se utiliza la opción REPLACING:

y Se asume SPACE para las variables alfanuméricas o DBCS


y Se asume ZERO para variables numéricas con o sin edición

Puede indicarse un elemento de una tabla en identificador-1. Se puede inicializar toda


una tabla dando en identificador-1 un grupo que contenga la tabla.

Identificador-1 no puede contener la cláusula RENAMES. Una variable de tipo índice


no puede ser un operando de la sentencia INITIALIZE. Pueden utilizarse registros especiales
tanto en identificador-1 como en identificador-2 si son receptores o emisores válidos en las
correspondientes sentencias MOVE.
_________________________________________________________________________________________
© Copyright IBM Corp. 2002 85
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

y Si se utiliza la opción REPLACING

y El tipo de datos de identificador-2 o literal-2 debe ser compatible con el indicado


y No puede repetirse en una misma opción REPLACING

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

___________________________________________________________________
86 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de sentencia INITIALIZE

Esta sentencia INITIALIZE asigna ZEROS a las variables SUB,


COUNTER y PAGE-NO. Las variables LABEL-NM y DESCRIPTION

.I. n
se inicializan con espacios
01 MISC-DATA.

.T ció
05 SUB PIC S9(04) COMP.
05 COUNTER PIC S9(09) COMP-3.
05 LABEL-NM PIC A(20).

.
05 FILLER PIC X(5).

C
05 PAGE-NO PIC ZZ9.

.F a
05 DESCRIPTION PIC X(40).
...

C rmPROCEDURE DIVISION.
INITIALIZE MISC-DATA
La siguiente sentencia asigna un 1 a SUB y COUNTER, dejando el
resto de variables inalteradas.
to fo
INITIALIZE MISC-DATA REPLACING NUMERIC DATA BY 1
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 87
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

2ª Parte.- Sentencias de cálculo

Objetivos

.I. n
Objetivos

.T ció
Conocer la sentencia ADD

.
Conocer los tipos de datos numéricos

C
.F a
Ver los errores básicos que pueden producirse en las
sentencias de cálculo

C rm
Ver resultados intermedios
Conocer las sentencias:

SUBTRACT
to fo
MULTIPLY
DIVIDE
La sentencia COMPUTE
ec o v
oy si
pr luc

Notas:
Ex

___________________________________________________________________
88 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia ADD

Sentencia ADD - Formato 1

.I. n
Formato 1

.T ció
ADD identificador-1 TO identificador-2
literal-1 ROUNDED

.
C
SIZE ERROR sentencia-imperativa

.F a
NOT ON

C rm END-ADD

Todos los identificadores (o literales) anteriores al TO se suman y el


resultado se suma y reemplaza al identificador-2. La acción se repite
to fo
de izquierda a derecha para cada uno de los identificador-2 indicados.
Los identificadores deben ser campos elementales numéricos
No se permite la sentencia ADD con variables de tipo POINTER
ec o v
oy si
pr lu

Notas:
c

La sentencia ADD permite sumar dos o más operandos numéricos y almacenar el re-
sultado.
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 89
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de sentencia ADD - Formato 1

...
add ventas tasas to total-ventas

.I. n
add ventas-dia to total-ped ventas-mes
add 1 to contador

.T ció
...

.
ANTES DESPUES

C
ventas 100.00 100.00

.F a
tasas 5.00 5.00
total-ventas 20.00 125.00

C rm ventas-dia
total-ped
ventas-mes
contador
150.00
225.00
1000.00
3
150.00
375.00
1150.00
4
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
90 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Ex
pr luc
oy si
ec o v
to fo
C rm
.F a
.T ció
.I. n
C
.
Material del Alumno
___________________________________________________________________________

Ejemplo de sentencia ADD - Formato 2

.I. n
DATA DIVISION.
01 TABLE-OF VALUES.
05 ENTRY-A PIC 99V9 VALUE 12.2.

.T ció
05 ENTRY-B PIC 99V99 VALUE 12.22.
05 ENTRY-C PIC 99V999 VALUE 12.228.
05 ENTRY-D PIC 999 VALUE 100.

.
77 FINAL-AMT PIC ZZ,ZZZ.99.

C
...

.F a
PROCEDURE DIVISION.
...

C rm ADD ENTRY-A ENTRY-B ENTRY-C ENTRY-D


GIVING FINAL-AMT ROUNDED
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
92 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
___________________________________________________________________________
Material del Alumno

Sentencia ADD CORRESPONDING


Formato 3

.I. n
ADD CORRESPONDING identificador-1 TO identificador-2
CORR

.T ció
ROUNDED SIZE ERROR sentencia-imperativa

.
NOT ON

C
.F a
C rm
END-ADD

Las variables elementales definidas en identificador-1 se suman


y reemplazan los valores de las variables correspondientes en el
to fo
identificador-2.
Los identificadores utilizados en un ADD CORRESPONDING
ec o

deben ser nombres de grupo


v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 93
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de ADD CORRESPONDING

DATA DIVISION.

.I. n
01 RESUMEN-MES.
05 INGRESOS PIC 9(8).

.T ció
05 DESCUENTOS PIC 9(8).
05 GASTOS PIC 9(8).
05 GANANCIAS PIC 9(8).

.
01 RESUMEN-TRIMESTRAL.
05 INGRESOS PIC 9(8).

C
.F a
05 DESCUENTOS PIC 9(8).
05 GASTOS PIC 9(8).
05 GANANCIAS PIC 9(8).

C rm
...

PROCEDURE DIVISION
ADD CORR RESUMEN-MES TO
to fo
RESUMEN-TRIMESTRAL.
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
94 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Opción ON SIZE ERROR

Cuando el valor que se va a almacenar en una variable numérica es


mayor que lo que puede almacenar, se activa la condición size

.I. n
error.
La condición SIZE ERROR se produce con el resultado final, no con

.T ció
los cálculos intermedios.
Si no se indica la opción ON SIZE ERROR, se produce un

.
truncamiento del resultado.

C
.F a
Si se especifica ON SIZE ERROR se ejecuta la sentencia imperativa
que se haya indicado y a continuación se devuelve el control al final
de la sentencia aritmética.

C rm
Tanto en el ADD CORRESPONDING como en el SUBTRACT
CORRESPONDING, no se activa el ON SIZE ERROR hasta el final
de todas las sumas o restas.
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 95
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Resultados intermedios

.I. n
Pueden producirse resultados intermedios en las sentencias
aritméticas en:

.T ció
sentencias ADD o SUBTRACT con múltiples operandos después
del verbo
sentencia COMPUTE con múltiples campos resultado

.
cuando hay varios receptores después de la opción GIVING en

C
.F a
las sentencias ADD, SUBTRACT, MULTIPLY o DIVIDE

C rm
El tamaño máximo de cada operando aritmético es de 18 dígitos
decimales
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
96 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de resultados intermedios

El siguiente ejemplo tiene una definición del resultado intermedio


del tipo PIC 9(12)V9(5) (17 dígitos decimales).

.I. n
.T ció
DATA DIVISION.
77 FLD1 PIC 9(7)V9(5).

.
77 FLD2 PIC 9(11)V99.
77 FLD3 PIC 9(12)V9(3).

C
.F a
...
PROCEDURE DIVISION.
...

C rm ADD FLD1, FLD2 GIVING FLD3


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 97
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tipos de datos numéricos

Los tipos de datos numéricos son:


Binario

.I. n
Decimal empaquetado (decimal interno)

.T ció
Decimal con zona (decimal externo)

La cláusula PICTURE sólo puede contener los símbolos 9, P, S y V

.
C
El número de posiciones de dígito puede ir desde 1 hasta 18

.F a
Si no tiene signo el contenido sólo puede ser los números del 0 al 9. Si

C rm
es con signo también puede incluir el +, el - u otra representación del
signo

Otras clausulas: El USAGE de las variables puede ser DISPLAY,


to fo
BINARY, COMPUTATIONAL, PACKED-DECIMAL, COMP-3, COMP-4,
or COMP-5
ec o v
oy si

Notas:
pr lu

La cláusula VALUE puede indicar la constante ZERO.

Una cláusula VALUE asociada a una variable numérica elemental debe indicar un li-
c

teral numérico o la constante ZERO. Una cláusula VALUE asociada a un grupo que contiene
variables numéricas puede indicar un literal no numérico o una constante figurativa dado que
Ex

el grupo se considera alfanumérico. No se realiza edición.

Ejemplos de rangos válidos:

PICTURE Rango válido


9999 0 a 9999
S99 -99 a +99
S999V9 -999.9 a +999.9
PPP999 0 a .000999
S999PPP -1000 a -999000 y de
+1000 a +999000 y también 0

___________________________________________________________________
98 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SUBTRACT

Sentencia SUBTRACT - Formato 1

.I. n
Formato 1

.T ció
SUBTRACT identificador-1 FROM
literal-1

.
identificador-2

C
ROUNDED

.F a
SIZE ERROR sentencia-imperativa

C rm NOT ON

END-SUBTRACT
to fo
Todos los identificadores previos al FROM se suman y el
resultado se resta y se guarda en identificador-2. El proceso se
repite, de izquierda a derecha, por cada identificador-2.
ec o v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 99
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SUBTRACT - Formato 2

Formato 2

.I. n
SUBTRACT identificador-1 FROM identificador-2
literal-1 literal-2

.T ció
GIVING identificador-3
ROUNDED

.
C
SIZE ERROR sentencia-imperativa

.F a
NOT ON

C rm END-SUBTRACT

Todos los identificadores previos al FROM se suman y el resultado


to fo
se resta de identificador-2 o literal-2
El resultado se almacena en cada identificador-3 referenciado
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
100 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SUBTRACT CORRESPONDING


Formato 3

SUBTRACT CORRESPONDING identificador-1 FROM

.I. n
CORR

.T ció
identificador-2
ROUNDED

.
SIZE ERROR sentencia-imperativa

C
NOT ON

.F a
END-SUBTRACT

C rm
Las variables elementales definidas en identificador-1 se restan y
to fo
se almacenan en las variables indicadas en identificador-2.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 101
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de la sentencia SUBTRACT


DATA DIVISION.
01 VALORES.
05 CAMPO-A PIC 99V9 VALUE 12.2.

.I. n
05 CAMPO-B PIC 99V99 VALUE 12.22.
05 CAMPO-C PIC 99V999 VALUE 12.228.

.T ció
05 CAMPO-D PIC 999 VALUE 100.
01 RESUMEN-MES.
05 INGRESOS PIC 9(8).
05 DESCUENTOS PIC 9(8).

.
05 GASTOS PIC 9(8).

C
01 RESUMEN-TRIMESTRE.

.F a
05 INGRESOS PIC 9(8).
05 DESCUENTOS PIC 9(8).

C rm
...
05 GASTOS

PROCEDURE DIVISION.
...
PIC 9(8).

SUBTRACT CAMPO-A FROM CAMPO-C


to fo
SUBTRACT CAMPO-A CAMPO-B CAMPO-C From CAMPO-D
GIVING CAMPO-D ROUNDED
SUBTRACT CORR RESUMEN-MES FROM RESUMEN-TRIMESTRE.
ec o v
oy si

Notas:
pr lu

El identificador debe ser una variable numérica excepto en el Formato 3 que debe in-
dicar el nombre de un grupo.
c
Ex

___________________________________________________________________
102 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia MULTIPLY

Sentencia MULTIPLY - Formato 1

.I. n
Formato 1

.T ció
MULTIPLY identificador-1 BY identificador-2
literal-1 ROUNDED

.
C
SIZE ERROR sentencia-imperativa

.F a
NOT ON

C rm END-MULTIPLY

El valor de identificador-1 o literal-1 se multiplica por el valor del


to fo
identificador-2 dejandose el resultado en identificador-2. El
proceso se repite, de izquierda a derecha por cada ocurrencia del
identificador-2.
ec o v
oy si
pr lu

Notas:
c

Esta sentencia permite multiplicar variable numéricas y dejar el resultado en una variable.
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 103
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Ex
pr luc
oy si
ec o v
to fo
C rm
.F a
.T ció
.I. n
C
.
Material del Alumno
___________________________________________________________________________

Ejemplo de la sentencia MULTIPLY

DATA DIVISION.

.I. n
77 PORCEN-IVA PIC V9999 VALUE .06.

.T ció
77 IVA-A-PAGAR PIC 99999V99.
77 PRECIO-SIN-IVA PIC 99999V99.
...

.
PROCEDURE DIVISION.

C
...

.F a
MULTIPLY PRECIO-SIN-IVA BY .06
GIVING IVA-A-PAGAR ROUNDED.

C rm
...
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 105
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia DIVIDE

Sentencia DIVIDE - Formato 1

.I. n
Formato 1

.T ció
DIVIDE identificador-1 INTO identificador-2
literal-1 ROUNDED

.
C
SIZE ERROR sentencia-imperativa

.F a
NOT ON

C rm END-DIVIDE
to fo
El valor de identificador-1 o de literal-1 se utiliza en la división
con el identificador-2 y el cociente se almacena en cada
identificador-2 en un proceso que se repite de izquierda a
derecha por cada identificador-2 reseñado
ec o v
oy si
pr lu

Notas:
c

Con esta sentencia se dividen uno o más variables numéricas entre otra u otras pu-
diendo obtener el cociente y el resto.
Ex

___________________________________________________________________
106 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia DIVIDE - Formato 2

Formato 2

.I. n
DIVIDE identificador-1 INTO identificador-2
literal-1 BY literal-2

.T ció
GIVING identificador-3
ROUNDED

.
C
SIZE ERROR sentencia-imperativa

.F a
NOT ON

C rm END-DIVIDE

El valor de identificador-1 o del literal-1 se divide entre (into) o por


(by) el valor del identificador-2 o del literal-2. El resultado se
to fo
almacena en cada variable indicada en identificador-3.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 107
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia DIVIDE - Formato 3

Formato 3

.I. n
DIVIDE identificador-1 INTO identificador-2
literal-1 BY literal-2

.T ció
GIVING identificador-3 REMAINDER identificador-4
ROUNDED

.
C
SIZE ERROR sentencia-imperativa

.F a
NOT ON

C rm END-DIVIDE

El valor del identificador-1 o del literal-1 se divide entre o por el valor del
identificador-2 o del literal-2. El resultado se almacena en identificador-3 y
to fo
el resto en identificador-4.
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
108 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia COMPUTE

Sentencia COMPUTE

.I. n
Formato

.T ció
COMPUTE identificador-1 = expresión
ROUNDED EQUAL

.
C
SIZE ERROR sentencia-imperativa

.F a
NOT ON

C rm END-COMPUTE

Se calcula la expresión y el resultado se almacena en cada


identificador-1. Los operadores válidos en la expresión son:
to fo
suma +
resta -
multiplicación *
división /
ec o

potencia **
v
oy si
pr lu

Notas:
c

Asigna el valor de una expresión aritmética a una o más variables.


Ex

La expresión aritmética puede incluir cualquiera de los siguientes:

1) Un identificador de una variable numérica


2) Un literal numérico
3) La constante ZERO
4) Identificadores y literales vistos en apartados 1, 2 y 3 separados por operadores
aritméticos
5) Dos expresiones aritméticas tal como se han definido en los puntos anteriores y
separadas por un operador aritmético
6) Una expresión tal como se ha definido en los apartados anteriores y puesta entre
paréntesis

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 109
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de sentencia COMPUTE

...

.I. n
COMPUTE FINAL-VAL ROUNDED = BASIC-VAL * 1.5
END-COMPUTE

.T ció
...
COMPUTE AREA = BASE * ALTURA END-COMPUTE
...
COMPUTE MEDIA = (ITEM-1 + ITEM-2 + ITEM-3) / 3.

.
...

C
COMPUTE PROBLEMA = ITEM-1 - ITEM-2 * ITEM3.

.F a
...
COMPUTE VAYA-VAYA = ((ITEM-1 + 56) * (ITEM-2 / 4))-

C rm (((ITEM-3 - 35) / (ITEM-4 * VAYA-VAYA)) +


(ESTO-ES + MAS-DIFICIL-DE-ENTENDER))
ON SIZE ERROR PERFORM DEMASIADO-PARA-EL-BODY
NOT ON SIZE ERROR PERFORM PUEDO-HACERLO
END-COMPUTE.
to fo
...
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
110 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

3ª Parte.- Sentencias de control de flujo

Objetivos

.I. n
Objetivos - Sentencias de control del flujo

.T ció
.
Sentencia PERFORM

C
.F a
Expresiones relacionales

C rm
Sentencia IF

Tratamiento de las condiciones compuestas


to fo
Conocer las condiciones CLASS

Tratar sobre los indicadores de nivel


ec o

Sentencia EVALUATE
v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 111
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia PERFORM

Sentencia PERFORM

.I. n
La sentencia PERFORM transfiere control al nombre de

.T ció
párrafo indicado y, al finalizar, continúa con la siguiente
sentencia.

.
La sentencia PERFORM puede ser:

C
.F a
fuera-de-línea cuando se indica un nombre
en-línea cuando no lleva un nombre asociado

C rm en este caso debe delimitarse con un END-PERFORM.


Hay varios formatos de la sentencia PERFORM:
to fo
la básica
con la opción TIMES
con la opción UNTIL
con la opción VARYING
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
112 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia PERFORM - Formato 1


Formato 1

.I. n
PERFORM

.T ció
nombre-proc-1
THROUGH nombre-proc-2
THRU

.
(1)
sentencia-imperativa-1 END-PERFORM

C
.F a
(1) es opcional

C rm
Las sentencias indicadas en el PERFORM se ejecutan y el control
pasa a la sentencia ejecutable que sigue a la PERFORM
THROUGH y THRU son equivalentes
to fo
ec o v
oy si

Notas:
pr lu

nombre-proc-1 y nombre-proc-2 deben ser nombres de párrafo o de sección dentro


de esta PROCEDURE. Si se indican ambos nombres y uno de ellos forma parte de las DE-
CLARATIVES, el otro también debe ser de ellas.
c

Si se indica el nombre-proc-1 no pueden darse la sentencia-imperativa-1 ni la senten-


Ex

cia END-PERFORM. Si no se indica nombre-proc-1 deben indicarse ambas.

Sentencia-imperativa-1 son las sentencias a ejecutar en un PERFORM en línea.

El funcionamiento de un PERFORM en línea es similar al de uno fuera de línea con la


salvedad de que las sentencias que se ejecutan están físicamente entre el PERFORM y el
END-PERFORM.

Cuando se invoca un PERFORM fuera de línea el control se transfiere a la primera


sentencia del párrafo indicado en nombre-proc-1. Cuando finaliza el control pasa a la senten-
cia siguiente a la PERFORM. El punto desde el que se devuelve el control se determina de la
siguiente manera:

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 113
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

y Si nombre-proc-1 es un párrafo y no se ha indicado nombre-proc-2, el control se


devuelve después de la ejecución de la última sentencia de nombre-proc-1
y Si nombre-proc-1 es una sección y no se ha indicado nombre-proc-2, el control se
devuelve después de la ejecución de la última sentencia del último párrafo de esta
sección
y Si se indica nombre-proc-2 y éste es un párrafo, el control se devuelve después de

.I. n
la ejecución de la última sentencia de este párrafo
y Si se indica nombre-proc-2 y se trata de una sección, el control se devuelve des-

.T ció
pués de la ejecución de la última sentencia del último párrafo de esta sección

La única relación necesaria entre nombre-proc-1 y nombre-proc-2 es que las acciones

.
que realicen sean consecutivas empezando por las de nombre-proc-1 y siguiendo con las de

C
nombre-proc-2.

.F a
Si existe más de un camino para llegar al punto de retorno, se puede poner un párrafo

C rm
nombre-proc-2 con una única sentencia: EXIT. Todos los caminos pueden ir a parar a este
único punto de retorno.

Cuando dentro de las sentencias que componen un PERFORM existe una sentencia
to fo
PERFORM, las sentencias que componen este PERFORM anidado deben estar totalmente in-
cluidas o ser totalmente externas al PERFORM inicial.

Si se llega a las sentencias que componen un párrafo de una forma distinta de la invo-
ec o

cación vía PERFORM, el control sigue a través de ellas sin tener en cuenta las posibles sen-
tencias EXIT existententes.
v
oy si
pr luc
Ex

___________________________________________________________________
114 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PERFORM en-línea

El PERFORM en-línea lleva un END-PERFORM

.I. n
fuera-de-línea

.T ció
PERFORM MOVEIT
VARYING X FROM 1 BY 1 UNTIL X = 5.
...

.
MOVEIT.

C
MOVE DATA-FLD (X) TO PRINT (X).

.F a
en-línea

C rm PERFORM VARYING X FROM 1 BY 1 UNTIL X = 5


MOVE DATA-FLD (X) TO PRINT (X)
END-PERFORM.
to fo
...
ec o v
oy si

Notas:
pr lu

Un PERORM en línea precisa de un END-PERFORM y uno fuera de línea no debe


tenerlo.
c

Algunas consideraciones para los PERFORM en línea:


Ex

y No usarlos si se necesitan utilizar en varios sitios


y Usarlos si sólo se utilizan una vez
y Considere no utilizarlos si afectan a la lectura del programa, por ejemplo en casos
de más de una página
y No pueden ponerse puntos dentro de él
y Se delimita con el END-PERFORM

La opción de compilación OPTIMIZE puede provocar un cambio en el código objeto


que se genere.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 115
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia PERFORM - Formato 2

Formato 2

.I. n
PERFORM

.T ció
nombre-proc-1 identificador-1 TIMES
THROUGH nombre-proc-2 entero-1
THRU

.
(1)
sentencia-imperativa-1 END-PERFORM

C
identificador-2 TIMES

.F a
entero-2
(1) es opcional

C rm
Las sentencias incluidas en el PERFORM se ejecutan el número de
veces indicadas en identificador-1 o en entero-1
El identificador-1 debe ser un entero. Si su valor es cero o es
negativo no se ejecutan las sentencias incluidas
to fo
Cuando finaliza se devuelve el control a la sentencia siguiente
ec o v
oy si

Notas:
pr lu

Los párrafos indicados se ejecutan el número de veces indicados en TIMES y a conti-


nuación se duelve control a la sentencia que sigue a la PERFORM.
c

Algunas reglas de este formato:


Ex

y Los identificadores deben ser variables enteras


y Si el valor del identificador es cero o negativo no se ejecuta el PERFORM
y Una vez iniciado el PERFORM no tiene ninguna influencia el cambio de valor de
los identificadores

___________________________________________________________________
116 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia PERFORM - Formato 3

Formato 3

.I. n
PERFORM nombre-proc-1 | frase 1 | | frase 2 |
(1)
| frase 2 | sentencia-imperativa-1 END-PERFORM

.T ció
(1) es opcional
frase 1:

nombre-proc-2

.
THROUGH
THRU

C
.F a
frase 2:
UNTIL condición-1

C rm WITH
TEST BEFORE
AFTER

Con la opción UNTIL los párrafos invocados se ejecutan hasta que


to fo
la condición indicada se cumpla.
ec o v
oy si

Notas:
pr lu

Con este formato los párrafos indicados se ejecutan HASTA (UNTIL) que la condi-
ción indicada sea cierta. En este momento el control se pasa a la sentencia siguiente al
PERFORM.
c

Si la condición se cumple en el momento de invocar el PERFORM, éste no se ejecuta.


Ex

Con la opción TEST BEFORE (valor por omisión) la condición se comprueba antes
de ejecutar las sentencias asociadas. Con TEST AFTER la condición se evalúa al final y, en
consecuencia, las sentencias asociadas se ejecutarán una vez por lo menos.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 117
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia PERFORM - Formato 4


Formato 4
PERFORM

.I. n
nombre-proc-1 | frase 1 |
THROUGH nombre-proc-2 | frase 2 |
THRU

.T ció
(1)
| frase 1 | sentencia-imperativa-1 END-PERFORM
(1) es opcional
frase 1:

.
VARYING identif-2 FROM identif-3 BY

C
TEST BEFORE indice-1 indice-2

.F a
WITH AFTER literal-1
identif-4
literal-2

C rm
frase 2:

frase 3:
AFTER identif-5
indice-3
FROM identif-6
indice-4
literal-3
| frase 3 |
to fo
BY identif-7 UNTIL condición-2
literal-4
La opción VARYING incrementa o decrementa el valor de una o más
variables o indices.
ec o v
oy si

Notas:
pr lu

Con la opción VARYING se incrementa o decrementa el valor de uno o más identifi-


cadores o indices.
c
Ex

___________________________________________________________________
118 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de sentencia PERFORM


77 X PIC 999 BINARY VALUE 1.
...

.I. n
El párrafo PARA1 se ejecutará 100 veces:
PERFORM PARA1 100 TIMES.

.T ció
Este bucle se ejecuta 101 veces:
PERFORM WITH TEST AFTER UNTIL X > 100
ADD A(X) TO TOTAL

.
ADD 1 TO X

C
END-PERFORM.

.F a
Este ejemplo se ejecutará 100 veces:
PERFORM VARYING X FROM 1 BY 1 UNTIL X > 100

C rm ADD A(X) TO TOTAL


END-PERFORM.

y ahora 101:
PERFORM WITH TEST AFTER
to fo
VARYING X FROM 1 BY 1 UNTIL X > 100
ADD A(X) TO TOTAL
END-PERFORM.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 119
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Expresiones relacionales
Las comparaciones pueden indicarse:

.I. n
IS LESS THAN IS <

.T ció
IS NOT LESS THAN IS NOT <
GREATER THAN IS >
IS NOT GREATER THAN IS NOT >

.
IS EQUAL TO IS =

C
IS NOT EQUAL TO IS NOT =

.F a
IS GREATER THAN OR EQUAL TO IS >=
IS LESS THAN OR EQUAL TO IS <=

C rm
Las palabras IS, THAN y TO no son obligatorias
Los símbolos compuestos "<=" y ">=" no deben incluir espacios
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
120 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Expresiones relacionales - Ejemplos

PERFORM PARA1 UNTIL COUNTER > 100 ...

.I. n
PERFORM PARA1 THRU PARA2 WITH TEST AFTER
VARYING COUNTER FROM 2 BY 2

.T ció
UNTIL COUNTER NOT LESS THAN MAXUM...

IF BALANCE-DUE IS LESS THAN 250.00 ...

.
C
WHEN BALANCE-DUE < 250.00 ...

.F a
IF CREDIT-LIM GREATER OR EQUAL MAX-AMT ...

C rm
IF SUBTOTAL >= VOLUME-DISCOUNT ...

... UNTIL ITEM-1 NOT EQUAL ITEM-2 ...


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 121
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia IF

Sentencia IF

.I. n
Formato

.T ció
IF condición-1 sentencia-1
THEN NEXT SENTENCE

.
C
.F a
END-IF
ELSE sentencia-2

C rm NEXT SENTENCE

La sentencia IF evalua una condición y proporciona los


to fo
caminos alternativos dependiendo del resultado
ec o v
oy si
pr lu

Notas:
c

Esta sentencia evalúa una condición y ejecuta unas u otras sentencias dependiendo del
resultado de dicha evaluación.
Ex

Condicion-1 puede ser simple o compuesta en alguno de los formatos que se han
visto anteriormente.

Si se indica NEXT SENTENCE el control pasa a la siguiente sentencia después del


punto que cierra el IF. Esto ocurre aunque se ponga el END-IF.

___________________________________________________________________
122 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia IF - Ejemplos
IF DATA1 IS NOT NUMERIC THEN ...
ELSE NEXT SENTENCE.
...

.I. n
READ PROD-MASTER KEY IS PART-NUMBER
INVALID KEY SET NOT-FOUND TO TRUE
NOT INVALID KEY SET FOUND TO TRUE

.T ció
END-READ
IF FOUND PERFORM OKAY ELSE PERFORM NOTFND END-IF
...
IF CUST-NUMB < PREV-CUST-NUMB

.
MOVE "FUERA DE SECUENCIA" TO MESSAGE-TXT
PERFORM WRITE-MESSAGE

C
ADD 1 TO REJECT-COUNTER

.F a
ELSE
MOVE CUST-NUMB TO PREV-CUST-NUMB.

C rm
PERFORM PROCESS-CUST
...
IF CUST-NUMB < PREV-CUST-NUMB
MOVE "FUERA DE SECUENCIA" TO MESSAGE-TXT
PERFORM WRITE-MESSAGE
ADD 1 TO REJECT-COUNTER
to fo
ELSE
MOVE CUST-NUMB TO PREV-CUST-NUMB
END-IF
PERFORM PROCESS-CUST
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 123
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia IF - Ejemplos
Las dos técnicas son equivalentes:
05 STUDENT-STATUS PIC X.

.I. n
88 FULLTIME VALUE "F".
88 PARTTIME VALUE "P".
88 NONDEGREE VALUE "N".

.T ció
88 AUDIT VALUE "A".
88 NONE-OF-ABV VALUE "O".
- - - - - - - - - - - - - - - - - - - - - - - -
IF NONDEGREE

.
PERFORM NON-CANDIDATE-PROCESS
- - - - - - - - - - - - - - - - - - - - - - - -

C
IF STUDENT-STATUS = "N"

.F a
PERFORM NON-CANDIDATE-PROCESS

Las sentencias IF pueden anidarse:

C rm IF ESTADO-EMPL IS EQUAL TO "SIN"


PERFORM NO-MAS-SALARIO
ELSE
IF ESTADO-EMPL IS EQUAL TO "DP"
PERFORM DOBLAR-SALARIO
to fo
ELSE
PERFORM PERFORM SALARIO-Y-MEDIO
END-IF
END-IF
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
124 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Condiciones múltiples
Las expresiones condicionales pueden estar formadas por la unión
de varias con los operadores lógicos AND y OR

.I. n
Pueden colocarse paréntesis para agrupar las condiciones

.T ció
IF ITEM-1 = DOMESTIC-ITEM-NO
AND ITEM-2 = OVERSEAS-ITEM-NO
OR
ITEM-1 = OVERSEAS-ITEM-NO

.
AND ITEM-2 = DOMESTIC-ITEM-NO

C
SET MIXED-SHIPMENT-FLAG TO TRUE

.F a
END-IF
...
SEARCH TABLPAIR VARYING NDX

C rm WHEN ITEM-1(NDX) = FROM-CITY AND ITEM-2(NDX) = TO-CITY


MOVE ...
WHEN ITEM-2(NDX) = FROM-CITY AND ITEM-1(NDX) = TO-CITY
MOVE ...
END-SEARCH
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 125
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Condiciones múltiples ...


SEARCH LTR-PAIR VARYING NDX
WHEN ITEM-1(NDX) = "A"

.I. n
AND ITEM-2(NDX) = "B"
SET TAB-FOUND TO TRUE
WHEN ITEM-1(NDX) = "B"

.T ció
AND ITEM-2(NDX) = "A"
SET TAB-FOUND TO TRUE
END-SEARCH

.
...
SEARCH LTR-PAIR VARYING NDX

C
WHEN (ITEM-1 IN TABLE-WEST(NDX) =

.F a
ITEM-1 IN TRANS-RECORD
AND ITEM-2 IN TABLE-EAST(NDX) =

C rm OR
ITEM-2

(ITEM-2
ITEM-1
AND ITEM-1
IN TRANS-RECORD)

IN TABLE-EAST(NDX) =
IN TRANS-RECORD
IN TABLE-WEST(NDX) =
to fo
ITEM-2 IN TRANS-RECORD)
SET SWITCH-FOUND TO TRUE
END-SEARCH
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
126 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Indicador del nivel de anidamiento


En el listado de salida del compilador se tiene una gran ayuda
para comprobar los niveles de anidamiento:

.I. n
PP 5668-958 IBM VS COBOL II Release 3.2 09/05/90 LAB4SOLN
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----

.T ció
000110 * CASE I (IF STATEMENT WITH PERIOD)
000111 READ ITEM-MASTER-FILE
000112 IF MASTER-RETURN NOT = '00'
000113 1 DISPLAY 'ERR-MESSAGE = MASTER FILE READ ERROR'
000114 1 PERFORM 9900-ABNORMAL-ERROR.

.
000115 INITIALIZE WS-TOTAL-AMT
PP 5668-958 IBM VS COBOL II Release 3.2 09/05/90 LAB4SOLN

C
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----

.F a
000210 * CASE II (IF STATEMENT WITHOUT PERIOD)
000211 READ ITEM-MASTER-FILE
000212 IF MASTER-RETURN NOT = '00'

C rm
000213
000214
000215
1
1
1
DISPLAY 'ERR-MESSAGE = MASTER FILE READ ERROR'
PERFORM 9900-ABNORMAL-ERROR
INITIALIZE WS-TOTAL-AMT
PP 5668-958 IBM VS COBOL II Release 3.2 09/05/90 LAB4SOLN
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----
000310
000311
* CASE III (IF STATEMENT WITH END-IF)
READ ITEM-MASTER-FILE
to fo
000312 IF MASTER-RETURN NOT = '00'
000313 1 DISPLAY 'ERR-MESSAGE = MASTER FILE READ ERROR'
000314 1 PERFORM 9900-ABNORMAL-ERROR
000315 END-IF
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 127
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Condiciones de clase
NUMERIC

.I. n
La variable sólo contiene los caracteres o al 9 (con o sin signo).
Debe ser USAGE DISPLAY o PACKED-DECIMAL

.T ció
ALPHABETIC

.
Contiene caracteres de la A-Z, a-z, o espacios

C
.F a
ALPHABETIC-UPPER

C rmContiene caracteres A-Z (sólo mayúsculas) o espacios

ALPHABETIC-LOW ER
to fo
Contiene caracteres a-z (sólo minúsculas) o espacios
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
128 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Condiciones de clase ...

Una variable puede ser comprobada con las condiciones de clase


del COBOL para averiguar si es alfabética, alfabética en mayúsculas o

.I. n
en minúsculas, numérica, ...

.T ció
200-MAINLINE.
MOVE "abcdefgh" TO DISPLAY-AREA

.
DISPLAY DISPLAY-AREA

C
.F a
IF DISPLAY-AREA IS ALPHABETIC THEN
DISPLAY "ES ALFABETICA"

C rm ELSE
DISPLAY "NO ES ALFABETICA".
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 129
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia CONTINUE
La sentencia CONTINUE permite no hacer nada cuando se
espera una sentencia

.I. n
Ejemplo 1 - "NEXT SENTENCE" (line 120 ==> line 210)
0100 IF A = B
0110 IF C = D
0120 NEXT SENTENCE

.T ció
0130 ELSE
0140 MOVE MESSAGE-1 TO RPT-MESSAGE-1
0150 END-IF
0160 ADD C TO TOTAL

.
0170 IF E = F
0180 MOVE MESSAGE-4 TO RPT-MESSAGE-2

C
0190 END-IF

.F a
0200 END-IF.
0210 next instruction
Ejemplo 2 - "CONTINUE" (line 120 ==> line 160)

C rm
0100 IF A = B
0110 IF C = D
0120 CONTINUE
0130 ELSE
0140 MOVE MESSAGE-1 TO RPT-MESSAGE-1
0150 END-IF
0160 ADD C TO TOTAL
to fo
0170 IF E = F
0180 MOVE MESSAGE-4 TO RPT-MESSAGE-2
0190 END-IF
0200 END-IF
0210 next instruction
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
130 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia EVALUATE

EVALUATE

.I. n
Formato
EVALUATE identificador-1

.T ció
literal-1
expresión-1 ALSO identificador-2
TRUE literal-2
FALSE expresión-2

.
TRUE

C
FALSE

.F a
WHEN | frase | sentencia-1

C rm
frase:
WHEN OTHER

ANY
ALSO

sentencia-2
| frase |

END-EVALUATE
to fo
condición
TRUE
FALSE
identificador-3
NOT literal-3 THROUGH identificador-4
ec o

expresión-3 THRU literal-4


expresión-4
v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 131
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia EVALUATE
Es la instrucción que implanta la estructura "case"

.I. n
EVALUATE dataname
WHEN value-1....
WHEN value-2 {THROUGH|THRU} value-3...

.T ció
WHEN NOT value-4
....
WHEN OTHER....

.
END-EVALUATE

C
Ejemplo básico de EVALUATE:

.F a
EVALUATE trans-id

C rm WHEN 'A'
WHEN 'D'
WHEN 'U'
WHEN OTHER
END-EVALUATE
Perform
Perform
Perform
Perform
add-trans
delete-trans
update-trans
bad-trans
to fo
El ámbito de la cláusula WHEN son todas las sentencias hasta el
siguiente WHEN, el END-EVALUATE o un punto
ec o v
oy si

Notas:
pr lu

Con esta sentencia se consigue una forma abreviada de realizar una serie de IFs anida-
dos. Se pueden evaluar múltiples condiciones.
c
Ex

___________________________________________________________________
132 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia EVALUATE - TRUE, FALSE


EVALUATE puede utilizarse con el valor lógico "TRUE" o el
"FALSE":

.I. n
EVALUATE {TRUE | FALSE}
WHEN expresión condicional-1....

.T ció
WHEN NOT expresión condicional-2....
....
WHEN OTHER....
END-EVALUATE

.
Ejemplo de "EVALUATE TRUE":

C
.F a
EVALUATE true
WHEN tax-collected < tax-owed
perform collect-payment

C rm WHEN tax-collected > tax-owed


perform send-refund
WHEN tax-collected = tax-owed

END-EVALUATE
perform check-out-this-miracle
to fo
"TRUE" y "FALSE" son palabras reservadas, no variables
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 133
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia EVALUATE y condiciones


EVALUATE puede utilizarse en expresiones condicionales:
EVALUATE one-a < one-b and hold-time < curr-time

.I. n
when true perform gotcha
when false perform gotme

.T ció
END-EVALUATE

EVALUATE puede utilizarse con nombres de condición:

.
EVALUATE true

C
WHEN exento continue

.F a
WHEN gestion perform sacrificio
WHEN por-horas perform aumento-importante

C rm WHEN other
Esto implica algo tal como:
01 Employee-type
88 exento
88 gestion
perform aumento-bajo.

Pic X.
Value 'E' 'P' 'Q'.
Value 'M' 'V'.
to fo
88 por-horas Value 'H' thru 'L'.
Aunque "EVALUATE FALSE" es válido, no parece muy natural
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
134 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia EVALUATE y "ALSO"


Se pueden EVALUATE varias condiciones
Cada una debe separarse del siguiente con un "ALSO"

.I. n
Los WHEN correspondientes deben contener el mismo número de
operandos separados con "ALSO":

.T ció
.
EVALUATE co-type also co-size also co-color
WHEN '1' also 'BIG' also 'BLUE'

C
perform Found-IBM

.F a
WHEN '1' also 'TALL' also 'RED'
perform Found-Houston-Comets

C rm WHEN '2'

WHEN 'Y'
also

also
'TALL'
perform Found-NY-Liberty
'LEAN'
perform Found-Yuppie
WHEN other
perform no-match-found
also

also
'BLUE'

'PAISLEY'
to fo
end-evaluate
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 135
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia EVALUATE y "ANY"


"ANY" indica que se acepta cualquier valor para esta condición:

.I. n
EVALUATE true also emp-type
WHEN hours > 40 also 'E'

.T ció
move 'normal' to message-area
WHEN hours < 40 also ANY

.
move 'underworked' to message-area

C
WHEN hours > 40 also ANY

.F a
move 'overworked' to message-area
WHEN ANY also 'E'

C rm move spaces to message-area


end-evaluate
¿Cuántas cláusulas puede tener un EVALUATE?
¿Cuántos ALSO se pueden utilizar por EVALUATE?
256
63
to fo
¿Se pueden utilizar estos máximos? ¡MEJOR NO!
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
136 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

4ª Parte.- Sentencias básicas de E/S

Objetivos

.I. n
Objetivos

.T ció
.
C
Sentencia ACCEPT

.F a
Sentencia DISPLAY

C rm
Introducir las DECLARATIVES
to fo
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 137
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia ACCEPT

Sentencia ACCEPT - Formato 1

.I. n
Formato 1

.T ció
ACCEPT identificador-1
FROM nombre-nemotécnico-1
nombre-entorno

.
C
.F a
Transfiere datos desde un dispositivo de entrada al identificador-1.

C rm
Si se omite la opción FROM se asume el dispositivo de entrada del
sistema
Es muy útil en situaciones excepcionales del programa en los que
se requiere una intervención del operador (para dar un mensaje, un
to fo
código, ...)

77 VALOR-ENTRANTE PIC X(10).


...
ec o

ACCEPT VALOR-ENTRANTE FROM SYSIN.


v
oy si
pr lu

Notas:
c

Esta sentencia transfiere información al identificador-1 indicado.


Ex

El nombre nemotécnico debe darse en el párrafo SPECIAL-NAMES y asociarlo a un


dispositivo de E/S (normalmente la consola o el terminal) y que no sea el mismo que se uti-
liza en una sentencia READ

___________________________________________________________________
138 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia ACCEPT - Formato 2


Formato 2

.I. n
ACCEPT identificador-2 FROM DATE
YYYYMMDD

.T ció
DAY
YYYYDDD
DAY-OF-WEEK

.
TIME

C
.F a
Permite acceder a la fecha / hora activas, lo cual es útil para
obtener información para listados, ...

C rm 01 HOY.
02 ANYO-HOY
02 MES-HOY
02 DIA-HOY
PIC 9999.
PIC 99.
PIC 99.
to fo
...
ACCEPT HOY FROM DATE YYYYMMDD.
ec o v
oy si

Notas:
pr lu

Con esta sentencia se puede recibir información que hay en unos registros especiales
al identificador que se indica.
c

La fecha actual y la hora también pueden obtenerse por medio de las funciones exis-
tentes: CURRENT-DATE.
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 139
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia ACCEPT - PICTURE implícita

Las variables receptoras de DATE, DATE YYYYMMDD, DAY,

.I. n
DAY YYYYDDD, DAY-OF-W EEK y TIME tienen de forma implícita
el USAGE DISPLAY. Dado que son variables de tipo conceptual no
deben describirse en el programa.

.T ció
.
IDENTIFICADOR-2 PICTURE FORMATO

C
DATE PIC 9(6) YYMMDD

.F a
DATE YYYYMMDD PIC 9(8) YYYYMMDD
DAY PIC 9(5) YYDDD

C rm
DAY YYYYDDD
DAY-OF-WEEK
TIME
PIC 9(7)
PIC 9(1)
PIC 9(8)
YYYYDDD
#
HHMMSS99
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
140 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia DISPLAY

Sentencia DISPLAY

.I. n
Formato

.T ció
DISPLAY identificador-1
literal-1

.
C
UPON nombre-nemotécnico-1 NO ADVANCING

.F a
nombre-entorno-1 WITH

C rm La sentencia DISPLAY transfiere el contenido de cada variable


indicada, de izquierda a derecha, al dispositivo de salida.
to fo
ENVIRONMNET DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. SYSOUT IS SYSPRINT.
...
ec o

DISPLAY SRCH-ARG "NO EXISTE EN LA TABLA."


v
oy si
pr lu

Notas:
c

La sentencia DISPLAY transfiere el contenido de cada identificador-1 reseñado al


dispositivo de salida (normalmente consola, teminal, impresora)
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 141
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

DECLARATIVES

DECLARATIVES

.I. n
.T ció
Con las DECLARATIVES se pueden indicar unas secciones a
invocar cuando se produzcan unas condiciones excepcionales.
Cuando finaliza la declarativa el control vuelve al punto desde el

.
que se la invocó siempre y cuando la excepción no sea crítica.

C
.F a
PROCEDURE DIVISION.

C rm DECLARATIVES.
IN-ERROR-HANDLER SECTION.
USE AFTER ERROR PROCEDURE ON IN-FILE.
IN-FILE-ROUTINE.
DISPLAY "CODIGO DE FILE STATUS = " FILE-FEEDBK.
to fo
STOP RUN.
END DECLARATIVES.
...
ec o v
oy si
pr lu

Notas:
c

y La DECLARATIVES SECTION debe estar al principio de la PROCEDURE


y Cada DECLARATIVE debe empezar con una USE
Ex

y La sección de DECLARATIVES finaliza con un END DECLARATIVES


y Tanto DECLARATIVES como END DECLARATIVES deben empezar en el
área A

___________________________________________________________________
142 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 4.- Manejo de archivos

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 151
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

1ª Parte.- ENVIRONMENT DIVISION

Objetivos

.I. n
.T ció
Presentar la INPUT-OUTPUT SECTION

Uso del párrafo FILE-CONTROL

.
C
.F a
Mostrar la función del FILE STATUS

C rm
Introducir el párrafo I-O-CONTROL
to fo
ec o v
oy si
pr lu

Notas:

La INPUT-OUPUT SECTION contiene dos párrafos:


c

1) FILE-CONTROL
Ex

Este párrafo sólo puede aparecer una vez, en el área A y acabando en punto. En
este párrafo se describen los archivos que se van a utilizar y su asociación con el
archivo externo

Los distintos archivos se indican con una cláusula SELECT que debe estar en el
áraea B y su definición debe finalizar con un punto. Los archivos pueden ser se-
cuenciales (VSAM o no), indexados y relativos

2) I-O-CONTROL

___________________________________________________________________
152 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

FILE-CONTROL

FILE-CONTROL - Archivos secuenciales


Formato 1 -- Archivos secuenciales

.I. n
SELECT nom-archivo1 ASSIGN nombre-asign

.T ció
OPTIONAL TO
USING nombre
nombre1

.
RESERVE entero SEQUENTIAL

C
AREA ORGANIZATION

.F a
AREAS IS
...

C rm ACCESS

FILE
MODE

STATUS
IS
IS
SEQUENTIAL

nombre2
nombre3
to fo
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
ec o

SELECT PRINT-FILE ASSIGN SYSPRINT.


v
oy si

Notas:
pr lu

Cada archivo debe tener su cláusula SELECT que lo identifica


c

y Nom-archivo1 deberá tener una FD o SD en la DATA DIVISION


Ex

y La cláusula ASSIGN sirve para asociar el nombre interno con el externo


y Con ORGANIZATION se indica la estructura del archivo independientemente de
como se vaya a procesar
y En el ACCESS MODE se indica como se van a recuperar los registros. Si el ar-
chivo es secuencial sólo es válida la opción SEQUENTIAL
y Con FILE STATUS se puede dar una variable en la que se dejará el código de re-
torno de la operación de E/S

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 153
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

FILE-CONTROL - Archivos indexados


Formato 2 -- Archivos indexados

SELECT nom-archivo1 ASSIGN nombre-asign

.I. n
OPTIONAL TO
USING nombre1

.T ció
RESERVE entero INDEXED
AREA ORGANIZATION
AREAS IS

.
RECORD nombre 2

C
ACCESS SEQUENTIAL KEY IS

.F a
MODE IS RANDOM
DYNAMIC

C rm
| entrada | STATUS nomb 4
PASSWORD nombre 3 FILE IS nomb5
IS
entrada:
ALTERNATE RECORD nombre 6
KEY IS DUPLICATES
WITH
to fo
En un archivo INDEXED la posición de cada registro se determina por unos índices que
mantiene el sistema. Los índices se basan en las KEYS que hay en el registro.
ec o v
oy si

Notas:
pr lu

Cada registro del archivo tiene una o más claves embebidas. Cada clave además está
asociada a un índice. El índice proporciona el camino de acceso a los registros. Los archivos
tienen que estar en dispositivos de almacenamiento de acceso directo (discos).
c

Cuando los registros de insertan, actualizan o se borran, se identifican por sus claves
Ex

primarias. Esta clave debe ser única y no puede cambiarse al actualizar el registro. El nombre
del campo donde se encuentra esta clave se indica en el RECORD KEY.

Además de la clave primaria pueden existir otras claves, llamadas alternativas. El


nombre de los campos donde están estas otras claves se indica en ALTERNATE RECORD
KEY. Los tipos de acceso que admiten estos archivos son:

y SEQUENTIAL: los registros se recuperan en orden de clave primaria


y RANDOM: se recupera la clave que haya en el campo indicado en RECORD
KEY
y DYNAMIC: los registros se recuperan de forma secuencial o random depen-
diendo de las sentencias utilizadas

___________________________________________________________________
154 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

FILE STATUS
El valor del FILE STATUS debe ser comprobado después de cada
petición de entrada/salida.
Si es cero: la operación de E/S ha sido correcta

.I. n
Cualquier otro valor indica que el programa puede requerir alguna
acción especial

.T ció
El FILE STATUS se inicializa con cada operación de E/S
El FILE STATUS debe definirse como una variable alfanumérica de

.
dos posiciones

C
.F a
FILE-CONTROL.
SELECT SAM-FILE ASSIGN TO ...

C rm
ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL
FILE STATUS IS FILE-STATUS.
...
77 FILE-STATUS PICTURE XX.
...
OPEN INPUT SAM-FILE
to fo
IF FILE-STATUS = "00"
PERFORM ...
ELSE
PERFORM .. .
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 155
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Códigos de retorno del VSAM


La cláusula FILE STATUS puede indicar de forma opcional una
segunda variable receptora de 6 octetos para recibir información del

.I. n
VSAM:
VSAM RETURN CODE (2 octetos)

.T ció
VSAM FUNCTION CODE (2 octetos)
VSAM FEEDBACK CODE (2 octetos)

.
ENVIRONMENT DIVISION.
...

C
FILE-CONTROL.

.F a
SELECT VSAM-FILE ASSIGN TO ...
ORGANIZATION IS INDEXED ACCESS IS SEQUENTIAL

C rm
RECORD KEY IS PART-NUMB FILE STATUS FILE-STATS VSAM-RETN.
...
DATA DIVISION.
...
77 FILE-STATS PIC XX.
01 VSAM-RETN.
to fo
05 VSAM-RETN-CODE PIC 99 BINARY.
05 VSAM-FUNC-CODE PIC 99 BINARY.
05 VSAM-FDBK-CODE PIC 99 BINARY.
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
156 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

I-O-CONTROL

Párrafo I-O-CONTROL

.I. n
.T ció
El párrafo I-O-CONTROL de la Input-Output Section es opcional y se
utiliza para indicar cuando deben tomarse puntos de control y las áreas

.
de memoria que deben compartir los distintos archivos

C
.F a
En él se proporciona información necesaria para la transmisión
eficiente de datos entre el almacenamiento externo y el programa

C rm
to fo
ec o v
oy si
pr lu

Notas:
c

Se trata de un párrafo opcional (que no se estudia en este curso) y en él se pueden in-


dicar los puntos de control a tomar por el programa en un formato tal como:
Ex

RERUN ON archivo EVERY 100 RECORDS OF archivo

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 157
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

2ª Parte.- DATA DIVISION

FILE SECTION

.I. n
Objetivos

.T ció
Definir la FILE SECTION

.
C
.F a
Presentar las definiciones de archivos

C rm
Introducir las modalidades Move y Locate
to fo
ec o v
oy si
pr luc

Notas:
Ex

De las tres secciones que puede tener la DATA DIVISION, se va a ver en este mo-
mento la FILE SECTION.

___________________________________________________________________
158 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

FILE SECTION

La FILE SECTION es una parte de la DATA DIVISION que sirve para


definir el archivo y la estructura de sus registros

.I. n
Cada archivo que se utiliza en el programa debe describirse con una

.T ció
entrada FD o SD:
FD nombre-archivo
BLOCK CONTAINS nnn RECORDS

.
RECORD CONTAINS nnn TO nnn CHARACTERS

C
RECORDING MODE V.

.F a
01 registro.

Cada nombre-archivo debe ser único en el programa

C rm
Después de la FD deben escribirse una o más descripciones de
registro. Si hay más de una definición, queda implícita una
redefinición de la memoria
to fo
Las cláusulas de las FD pueden escribirse en cualquier orden
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 159
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de definición de archivos


ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

.I. n
SELECT PRODUCT-FILE ASSIGN TO PRODFIL
ORGANIZATION IS INDEXED
ACCESS IS RANDOM

.T ció
RECORD KEY IS PART-NUM.
...
DATA DIVISION.
FILE SECTION.

.
FD PRODUCT-FILE.

C
01 ITEM-MASTER.

.F a
05 ...
05 PART-NUM.
05 ...

C rm
...
PROCEDURE DIVISION.
...

...
OPEN INPUT PRODUCT-FILE
READ PRODUCT-FILE
to fo
CLOSE PRODUCT-FILE
STOP RUN.

//PRODFIL DD DSN=MASTER.PRODUCT,DISP=SHR
ec o v
oy si

Notas:
pr lu

Esta visual muestra la conexión entre el programa COBOL y el JCL.


c
Ex

___________________________________________________________________
160 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Modalidad Move y Locate

.I. n
EJEMPLO 1 EJEMPLO 2

.T ció
DATA DIVISION. DATA DIVISION.
FILE SECTION. FILE SECTION.
FD PEDIDOS FD PEDIDOS
RECORD CONTAINS 53. RECORD CONTAINS 53.

.
01 REGISTRO-PEDIDOS. 01 REGISTRO-PEDIDOS PIC X(53).
04 CAMPO1 PIC X(10). ...

C
.F a
04 CAMPO2 PIC X(43). WORKING-STORAGE SECTION.
... 01 ESTRUCTURA-PEDIDO.
PROCEDURE DIVISOR. 04 CAMPO1 PIC X(10).

C rm
...
OPEN INPUT PEDIDOS
READ PEDIDOS AT END ...
IF CAMPO1 = "CUALQUIER "...
..
04 CAMPO2

PROCEDURE DIVISION.
...
OPEN INPUT PEDIDOS
PIC X(43).
to fo
READ PEDIDOS
INTO ESTRUCTURA-PEDIDO
AT END ...
IF CAMPO1 = "CUALQUIER "...
ec o v
oy si

Notas:
pr lu

En el ejemplo 1 se está utilizando la modalidad LOCATE. En esta modalidad los da-


tos permanecen en la memoria correspondiente al archivo.
c

En el ejemplo 2 los datos se traspasan desde el area de memoria del archivo a una
Ex

zona de la WORKING-STORAGE SECTION: se trata de la modalidad MOVE.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 161
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

3ª Parte.- PROCEDURE DIVISION

Objetivos

.I. n
.T ció
Conocer las sentencias OPEN y CLOSE

Conocer el proceso secuencial de archivos

.
C
.F a
Proceso del END OF FILE

C rm
Presentar el proceso Random

Definir las sentencias W RITE


to fo
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
162 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia OPEN

Sentencia OPEN

.I. n
Formato 1 -- Archivos secuenciales

.T ció
OPEN INPUT archivo 1
REVERSED

.
NO REWIND
WITH

C
.F a
OUTPUT archivo 2
NO REWIND

C rm I-O archivo 3
WITH
to fo
EXTEND archivo 4

Con la sentencia OPEN se inicia el proceso de los archivos


La cláusula REVERSE no es válida en archivos VSAM
ec o v
oy si
pr lu

Notas:
c

Un archivo debe abrirse antes de poder procesarlo. Cuando se abre, debe indicarse la
forma con la que se va a operar con él:
Ex

INPUT Para procesos de lectura


OUTPUT Para procesos de escritura. Debe indicarse cuando se crea un
archivo. No usar si el archivo ya contiene datos ya que estos se re-
emplazarian por los que se escribieran
I-O Permite leer y escribir datos en el archivo
EXTEND Permite ampliar un archivo ya existente

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 163
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia CLOSE

Sentencia CLOSE

.I. n
Formato 1 -- Archivos secuenciales

.T ció
CLOSE archivo
REEL
REMOVAL

.
UNIT
FOR

C
.F a
WITH NO REWIND

NO REWIND

C rm WITH

Finaliza el proceso de los archivos abiertos


LOCK
to fo
Las opciones REEL, UNIT y NO REWIND no pueden usarse con
archivos VSAM
ec o v
oy si
pr lu

Notas:
c

Esta sentencia debe ejecutarse para cada archivo que esta abierto.
Ex

___________________________________________________________________
164 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia READ (proceso secuencial)

READ - Acceso secuencial

.I. n
Formato 1 -- Acceso secuencial

.T ció
READ archivo
NEXT RECORD INTO identificador

.
C
.F a
END sentencia 1
AT

C rm NOT
AT
END sentencia 2 END-READ
to fo
Cuando se ejecuta la sentencia READ el archivo debe estar abierto en
modalidad INPUT o I-O
La cláusula AT END debe estar antes que la NOT AT END
ec o v
oy si
pr lu

Notas:
c

Deja el siguiente registro disponible para su uso en el programa.


Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 165
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de READ
...
DATA DIVISION.

.I. n
...
WORKING-STORAGE SECTION.

.T ció
77 END-OF-FILE-INDIC PIC X VALUE "N".
88 EOF-NOTYET VALUE "N".
88 EOF-REALLY VALUE "Y".
...

.
PROCEDURE DIVISION.

C
OPEN INPUT FILEIN

.F a
...
PERFORM UNTIL EOF-REALLY

C rm READ FILEIN
AT END SET EOF-REALLY TO TRUE
NOT AT END PERFORM REG-PROCESS
END-READ
END-PERFORM
to fo
...
CLOSE FILEIN
...
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
166 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Proceso de END OF FILE

Si se produce la condición 'AT END' durante una lectura secuencial, la


sentencia READ no proporciona un valor correcto. El contenido del

.I. n
registro es 'indefinido'

.T ció
Con un 'AT END' ocurre:

Se da valor al indicador de estado

.
Se transfiere control a lo indicado en el AT END (se ignora cualquier

C
.F a
procedimiento indicado en USE AFTER STANDARD ERROR)

C rm
Si no se indica una cláusula AT END debe indicarse un procedimiento
de USE AFTER STANDARD ERROR y se ejecutará lo que allí se
indique. Cuando finaliza, el control se cede a la sentencia siguiente a la
READ.
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 167
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia READ (proceso al azar)

READ - Acceso al azar

.I. n
Formato 2 -- Acceso al azar

.T ció
READ archivo
RECORD INTO identificador

.
C
.F a
KEY nombre INVALID sentencia imperativa 1
IS KEY

C rm NOT INVALID
KEY
sentencia imperativa 2 END-READ
to fo
En archivos VSAM INDEXED, el valor indicado en la variable del
KEY se busca dentro del archivo hasta encontrar un registro con
este valor
ec o

En archivos VSAM RELATIVE la frase KEY no debe indicarse


v
oy si
pr lu

Notas:
c

La clave indicada en nombre se busca en el archivo hasta encontrar el primer registro


con la misma clave. Si no se encuentra se activa la INVALID KEY. Si no se indica la opción
Ex

‘KEY nombre’ la clave indicada en el RECORD KEY es la que se utiliza en la búsqueda

___________________________________________________________________
168 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

READ - Ejemplo de acceso al azar


ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL. SELECT PROD-MASTER

.I. n
ASSIGN PRODMSTR
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM

.T ció
RECORD KEY IS PART-NUMBER.
DATA DIVISION.
FILE SECTION.
FD PROD-MASTER

.
RECORD CONTAINS 45.

C
01 PRODMSTR-RECORD.

.F a
05 PART-DESCRIPTION PIC ...
05 PART-NUMBER PIC ...
05 ...

C rm
...
PROCEDURE DIVISION.

...
OPEN INPUT PROD-MASTER

MOVE ... TO PART-NUMBER


READ PROD-MASTER KEY IS PART-NUMBER
to fo
INVALID KEY SET NOT-FOUND TO TRUE
NOT INVALID KEY SET FOUND TO TRUE
END READ
...
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 169
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

READ - Acceso dinámico

Con acceso dinamico es posible el acceso secuencial o al azar

.I. n
dependiendo de la sentencia READ

.T ció
El acceso dinámico sólo es posible con organizaciones VSAM KSDS
o RRDS

.
El acceso dinámico se establece con la opción ACCESS IS

C
.F a
DYNAMIC de la sentencia SELECT del FILE-CONTROL

C rm
La opción NEXT debe indicarse para el acceso secuencial en modo
dinámico. Para poder realizar un READ NEXT, debe haberse
ejecutado una sentencia OPEN, START o READ para posicionar el
archivo
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
170 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia START

Sentencia START

.I. n
Formato
START archivo

.T ció
KEY EQUAL nombre
TO
IS =
LESS

.
THAN
<

C
.F a
GREATER
THAN
>
NOT LESS

C rm NOT <
NOT GREATER
NOT >
LESS
THAN
THAN

THAN

OR EQUAL
TO
to fo
<=
GREATER OR EQUAL
THAN TO
>=

INVALID sentencia imperativa 1


KEY
ec o

NOT INVALID sentencia imperativa 2


KEY
v
oy si
pr lu

Notas:
c

Permite posicionar el archivo indexado o relativo en un punto determinado para, a


partir de allí, realizar un proceso secuencial. El archivo debe estar abierto en modalidad
Ex

INPUT o I-O.

Si la condición no la cumple ningún registro, se activará la INVALID KEY.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 171
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia WRITE

Sentencia WRITE

.I. n
La sentencia W RITE libera un registro lógico para un archivo de tipo

.T ció
output o input/output

.
Al ejecutarse un W RITE:

C
.F a
el archivo secuencial asociado debe estar abierto como OUTPUT o
en modo EXTEND

C rm si el archivo es indexed o relativo, debe estar abierto en modo


OUTPUT, I-O ó EXTEND

El nombre del registro debe estar definido en la entrada FD de la


to fo
DATA DIVISION. Puede calificarse y no puede estar asociado a un
archivo de clasificación o fusión
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
172 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia WRITE
Formato
WRITE nombre-reg
FROM identificador-1

.I. n
| frase | END-WRITE
BEFORE identif-2

.T ció
AFTER ADVANCING entero LINE
LINES
nemotécnico

.
PAGE

C
| invalid key | | no invalid key |

.F a
frase:

END-OF-PAGE sentencia imperativa-1

C rm AT
NOT
invalid key:
EOP

INVALID
AT
END-OF-PAGE
EOP
sentencia imperativa-2

sentencia imperativa 3
to fo
no invalid key: KEY

NOT INVALID sentencia imperativa 4


KEY
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 173
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de sentencia WRITE


ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.

.I. n
FILE-CONTROL. SELECT PRINT-FILE
ASSIGN SYSPRINT.
...

.T ció
DATA DIVISION.
FILE SECTION.
FD PRINT-FILE RECORD CONTAINS 132.
01 PRINT-LINE.

.
05 PRT-IMAGE PIC X(132).
...

C
WORKING-STORAGE

.F a
77 COUNTER PIC 99.
...
PROCEDURE DIVISION.

C rm OPEN OUTPUT PRINT-FILE


...
MOVE ... TO PRT-IMAGE
WRITE PRINT-LINE

...
AFTER ADVANCING 2
to fo
WRITE PRINT-LINE
AFTER ADVANCING COUNTER LINES
...
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
174 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Control de impresora

La frase ADVANCING permite controlar la posición del registro en la


página de salida.

.I. n
.T ció
Cuando se indica END-OF-PAGE y se detecta esta situación durante la
ejecución de la sentencia W RITE, se ejecuta lo indicado en esta opción.
Si hay un END-OF-PAGE la correspondiente FD debe incluir la cláusula

.
LINAGE

C
.F a
Hay una opción de compilación (ADV o NOADV) que tiene su
importancia en la descripción del registro. Con NOADV la primera

C rm
posición del registro es para control de la impresora y la longitud del
registro pasará a tener una posición más (133 contra 132)
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 175
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de uso de WRITE (1/2)


ENVIRONMENT DIVISION.
CONFIGURATION SECTION.

.I. n
SPECIAL-NAMES. C01 IS NEW-PAGE.
INPUT-OUTPUT SECTION.

.T ció
FILE-CONTROL.
SELECT PRINT-FILE ASSIGN UPDPRINT.
DATA DIVISION.

.
FILE SECTION.

C
FD PRINT-FILE

.F a
RECORDING MODE F
BLOCK 0 RECORDS

C rm RECORD 121 CHARACTERS


LABEL RECORD STANDARD.
01 PRT-RECD
...
WORKING-STORAGE SECTION.
PIC X(121).
to fo
01 PRT-LINE PIC X(121).
...
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
176 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de uso de WRITE (2/2)

PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE

.I. n
...
MOVE DETAIL1-LINE TO PRT-LINE
PERFORM 330-PRINT-REPORT

.T ció
MOVE DETAIL2-LINE TO PRT-LINE
PERFORM 330-PRINT-REPORT.
...
330-PRINT-REPORT.

.
IF LINE-COUNT > 50

C
ADD 1 TO PAGE-COUNT

.F a
MOVE PAGE-COUNT TO HDR-PAGE-NUMBER
WRITE PRT-RECD FROM HDR1-LINE AFTER NEW-PAGE
MOVE ALL "=" TO PRT-RECD

C rm WRITE PRT-RECD AFTER ADVANCING 3 LINES


MOVE SPACES TO PRT-RECD
WRITE PRT-RECD AFTER ADVANCING 1 LINE
MOVE 6 TO LINE-COUNT
END-IF
WRITE PRT-RECD FROM PRT-LINE AFTER ADVANCING 1
to fo
ADD 1 TO LINE-COUNT
MOVE SPACES TO PRT-LINE.
...
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 177
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

WRITE CON LINAGE

Uso de WRITE con LINAGE (1/2)

.I. n
ENVIRONMENT DIVISION.

.T ció
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRINT-FILE ASSIGN UPDPRINT.

.
DATA DIVISION.
FILE SECTION.

C
.F a
FD PRINT-FILE
RECORDING MODE F
BLOCK 0 RECORDS

C rm RECORD 121 CHARACTERS


LABEL RECORD STANDARD
LINAGE IS 55 LINES
LINES AT BOTTOM 4.
*
to fo
*
01 PRT-RECD PIC X(121).
...
WORKING-STORAGE SECTION.
01 PRT-LINE PIC X(121).
ec o

...
v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
178 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Uso de WRITE con LINAGE (2/2)


PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE

.I. n
...
MOVE DETAIL1-LINE TO PRT-LINE
PERFORM 330-PRINT-REPORT

.T ció
MOVE DETAIL2-LINE TO PRT-LINE
PERFORM 330-PRINT-REPORT.
...
330-PRINT-REPORT.

.
WRITE PRT-RECD FROM PRT-LINE AFTER ADVANCING 1

C
AT END-OF-PAGE PERFORM HEADERS

.F a
NOT AT END-OF-PAGE ...
MOVE SPACES TO PRT-LINE.
...

C rm HEADERS.
ADD 1 TO PAGE-COUNT
MOVE PAGE-COUNT TO HDR-PAGE-NUMBER
WRITE PRT-RECD FROM HDR1-LINE AFTER NEW-PAGE
MOVE ALL "=" TO PRT-RECD
WRITE PRT-RECD AFTER ADVANCING 3 LINES
to fo
MOVE SPACES TO PRT-RECD
WRITE PRT-RECD AFTER ADVANCING 1 LINE.
...
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 179
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

WRITE PARA VSAM INDEXADOS

WRITE para VSAM Indexado

.I. n
Formato 2 -- Archivos Indexados y Relativos

.T ció
WRITE nombre-reg
FROM identificador

.
C
.F a
INVALID sentencia imperativa 1
KEY

C rm NOT INVALID
KEY
sentencia imperativa 2 END-WRITE
to fo
Permite añadir un registro a un VSAM KSDS o RRDS
Antes de ejecutar la sentencia W RITE debe darse valor a la clave
ec o v
oy si
pr lu

Notas:
c

Antes de ejecutar la sentencia WRITE debe darse valor a la variable indicada en el


RECORD KEY.
Ex

Si también se han indicado ALTERNATE RECORD KEY estas deben ser únicas a
menos que se haya indicado la opción DUPLICATES.

Si el ACCESS es SEQUENTIAL los registros deben grabarse en orden de la clave


primaria (RECORD KEY). Si el acceso se ha definido como RANDOM o DYNAMIC pue-
den grabarse los registros en cualquier orden.

___________________________________________________________________
180 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia REWRITE

Sentencia REWRITE

.I. n
Formato

.T ció
REWRITE nombre-reg
FROM identificador

.
C
INVALID sentencia imperativa 1

.F a
KEY

C rm NOT INVALID
KEY
sentencia imperativa 2 END-REWRITE
to fo
Se utiliza para actualizar un registro
El archivo debe estar abierto como I-O
Se produce una condición INVALID KEY si se intenta cambiar la
ec o

clave primaria
v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 181
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia DELETE

Sentencia DELETE

.I. n
Formato

.T ció
DELETE archivo
RECORD

.
C
.F a
INVALID sentencia imperativa 1
KEY

C rm NOT INVALID
KEY
sentencia imperativa 2 END-DELETE
to fo
Permite eliminar un registro de un archivo KSDS o RRDS
El archivo debe estar abierto como I/O
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
182 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 5.- Servicios de bibliotecario

Objetivos

.I. n
Objetivos

.T ció
.
Definir la sentencia COPY

C
.F a
Conocer el COPY REPLACING
Introducir el pseudo texto del REPLACING

C rm
to fo
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 187
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia COPY

Sentencia COPY

.I. n
Formato

.T ció
COPY texto
literal-1 OF nombre-biblioteca
IN literal-2

.
.

C
SUPPRESS

.F a
REPLACING operando-1 BY operando-2

C rm
La sentencia COPY permite insertar texto, previamente codificado,
en un programa
Cada COPY debe finalizar con punto
to fo
Si no se indica el 'nombre-biblioteca', se asume SYSLIB
La opción SUPPRESS hace que lo que se inserta no aparezca en el
listado del programa
ec o

Para usar el COPY debe estar activa la opción LIB de compilación


v
oy si
pr lu

Notas:

Permite incluir texto previamente escrito en el programa. Este texto se incluye en el


c

momento de la compilación. Normalmente se utiliza para tener descripciones estándar de los


archivos, registros asociados a los mismos, ...
Ex

___________________________________________________________________
188 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Anidación de sentencias COPY


Pueden anidarse COPY
Los COPY anidados no pueden contener la opción REPLACING

.I. n
COPY FILEA.

.T ció
FILEA contiene: ADDR contiene:
01 FILEA. 05 STREET PIC X(40).

.
05 NAME PIC X(40). 05 CITY PIC X(20).

C
COPY ADDR. 05 STATE PIC X(02).

.F a
05 STUFF PIC X(100). 05 ZIP PIC X(09).

C rmAl compilador le llega:


01
05
05
05
FILEA.
NAME
STREET
CITY
PIC
PIC
PIC
X(40).
X(40).
X(20).
to fo
05 STATE PIC X(02).
05 ZIP PIC X(09).
05 STUFF PIC X(100).
ec o v
oy si

Notas:
pr lu

En el COBOL de IBM las sentencias COPY pueden tener internamente otra sentencia
COPY.
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 189
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

COPY con opción REPLACING


Se puede utilizar esta opción para cambiar alguno de los nombres
que se copian (o todos)

.I. n
El miembro de la biblioteca no se modifica

.T ció
COPY PAYLIB REPLACING
CAMPOA BY REGISTRO-PAGOS

.
CAMPOB BY PRECIO-HORA

C
.F a
CAMPOC BY HORAS-TRABAJO.

C rm
TEXTO EN BIBLIOTECA

01 CAMPOA.
02 CAMPOB PIC 999V99.
PROGRAMA FUENTE

01 REGISTRO-PAGOS.
02 PRECIO-HORA PIC 999V99.
to fo
02 CAMPOC PIC 999V99. 02 HORAS-TRABAJO PIC 999V99.
ec o v
oy si

Notas:
pr lu

Cuando se utiliza la opción REPLACING, se copia el libro desde la biblioteca y, cada


emparejamiento de operando-1 se sustituye por operando-2.
c
Ex

___________________________________________________________________
190 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

COPY con pseudotexto


Si se quiere cambiar sólo una parte del nombre del campo, debe
utilizarse la opción REPLACING con los delimitadores de

.I. n
pseudotexto (==).

.T ció
COPY PAYLIB REPLACING
==:PFFX:== BY ==PAY==.

.
MIEMBRO EN BIBLIOTECA

C
01 :PFFX:.

.F a
02 :PFFX:-RTE PIC 999V99.

C rm 02 :PFFX:-HRS PIC 999V99.

ENTRADA AL COMPILADOR
01 PAY.
to fo
02 PAY-RTE PIC 999V99.
02 PAY-HRS PIC 999V99.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 191
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

REPLACE

REPLACE puede utilizarse en todo el programa incluso con lo que se

.I. n
incluye con un COPY
La acción de reemplazar se inicia con la sentencia REPLACE y

.T ció
continua hasta:

Otra sentencia REPLACE

.
Una sentencia REPLACE OFF

C
El final del programa

.F a
Las sentencias REPLACE las procesa el compilador cuando ya no

C rm
quedan COPY pendientes
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
192 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 6.- Manejo de tablas

Objetivos

.I. n
Objetivos

.T ció
Definir OCCURS

.
C
Introducir INDEXING

.F a
Visión de la organización de las matrices

C rm
La subindexación
Definir SEARCH
to fo
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 193
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

1ª Parte.- DATA DIVISION

Cláusula OCCURS

.I. n
Cláusula OCCURS - Tablas de longitud fija

.T ció
Formato 1 -- Tablas de longitud fija

.
OCCURS entero

C
TIMES

.F a
C rm ASCENDING
DESCENDING KEY IS
nombre
to fo
INDEXED nombre-indice
BY

La cláusula OCCURS en la definición de una variable indica tablas


ec o

cuyos elementos podrán referenciarse por indexación o


subindices
v

Las tablas fijas admiten hasta 7 niveles de anidación


oy si
pr luc

Notas:
Ex

Con este formato se indica el número de veces que el identificador relacionado se


repite.

Esta cláusula no puede indicarse en niveles 01, 66, 77 u 88.

Con la cláusula INDEXED BY se indica el nombre de un índice relacionado con esta


tabla y que deberá utilizarse en el caso de utilizar la opción de indexación. Si se indica las op-
ciones ASCENDING/DESCENDING los datos se guardan en la secuencia indicada.

___________________________________________________________________
194 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Cláusula OCCURS - Tablas de longitud variable

OCCURS entero-1 TO entero-2 DEPENDING nombre-1

.I. n
TIMES ON

.T ció
ASCENDING nombre-2
KEY IS

.
DESCENDING

C
.F a
INDEXED nombre-indice

C rm BY

Las tablas de longitud variable se definen con la cláusula OCCURS


to fo
DEPENDING ON
ec o v
oy si

Notas:
pr lu

El número de ocurrencias de la tabla no es fijo si no que depende del valor que tenga
nombre-1 y que debe estar entre los dos valores indicados en entero-1 y entero-2.
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 195
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

INDEXACIÓN
Un nombre de índice es un identificador que se asocia a una
determinada tabla. El valor de un índice es el desplazamiento desde el

.I. n
inicio de la tabla, de acuerdo con el tamaño del elemento

.T ció
Un nombre de índice puede aparecer en una cláusula OCCURS:
01 TABLE-OF-MONTHS.
02 MONTHS OCCURS 12 TIMES INDEXED BY NDX PIC X(10).

.
C
El nombre de índice lo crea el compilador y no debe ser definido en el

.F a
programa

C rm
El contenido de un índice puede cambiarse con la sentencia SET TO
Un índice no puede utilizarse ni en una sentencia MOVE ni en una
INITIALIZE
to fo
ec o v
oy si

Notas:
pr lu

Las tablas así definidas permitirán el uso de sentencias de búsqueda, así como la ma-
nipulación de sus datos.
c
Ex

___________________________________________________________________
196 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Organización de una tabla


000027 009720 01 TABLE-X.
000028 009730 02 OUTER OCCURS 5.
000029 009740 04 MIDDLE OCCURS 5.
000030 009750 06 INNER OCCURS 5 PIC X VALUE ".".

.I. n
000031 009800 PROCEDURE DIVISION.
000032 009900 MOVE "A" TO INNER (1 1 1)
000033 009910 MOVE "B" TO INNER (2 1 1)
000034 009920 MOVE "C" TO INNER (3 1 1)

.T ció
000035 009930 MOVE "D" TO INNER (4 1 1)
000036 009940 MOVE "E" TO INNER (5 1 1)
000037 009941 MOVE "F" TO INNER (1 2 1)
000038 009942 MOVE "G" TO INNER (1 3 1)
000039 009943 MOVE "H" TO INNER (1 4 1)

.
000040 009944 MOVE "I" TO INNER (1 5 1)
000041 009945 MOVE "J" TO INNER (1 1 2)

C
000042 009946 MOVE "K" TO INNER (1 1 3)
000043 009947 MOVE "L" TO INNER (1 1 4)

.F a
000044 009948 MOVE "M" TO INNER (1 1 5)
000045 009949 MOVE "N" TO INNER (5 5 5)
000046 009950 DISPLAY OUTER (1)

C rm
000047 009960 DISPLAY OUTER (2)
000048 009970 DISPLAY OUTER (3)
000049 009980 DISPLAY OUTER (4)
000050 009990 DISPLAY OUTER (5)
000051 010000 DISPLAY TABLE-X
000052 010300 STOP RUN.

Las líneas siguientes son las salida de las sentencias DISPLAY


to fo
AJKLMF....G....H....I....
B........................
C........................
D........................
E.......................N
AJKLMF....G....H....I....B........................C........................D........
................E...................N
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 197
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

2ª Parte.- PROCEDURE DIVISION

Subindices

.I. n
Subindices

.T ció
Los subíndices son una forma de hacer referencias a una tabla

.
Un subíndice es un número positivo que indica la ocurrencia a la que

C
se hace referencia

.F a
Pueden existir 7 niveles de subindexación

C rm
Los subindices se indican entre paréntesis
El número de subindices debe ser igual al de dimensiones de la tabla
referenciada
to fo
...
01 TABLE-THREE.
05 ELEMENT-1 OCCURS nn TIMES.
10 ELEMENT-2 OCCURS nn TIMES.
ec o

15 ELEMENT-3 OCCURS nn PIC X(8).


...
MOVE ELEMENT-3 (1, 2, 1) TO ...
v

...
MOVE ELEMENT-3 (SUB1 SUB2 SUB3) TO ...
oy si
pr luc

Notas:
Ex

Los subíndices, incluidos entre paréntesis, se escriben a continuación del nombre de


la tabla. Si se precisa más de un subíndice, estos deben escribirse en el orden de fuera a den-
tro de acuerdo con los niveles existentes.

___________________________________________________________________
198 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de subíndices
01 TABLE-ELEMENT PIC X(3) OCCURS 10 TIMES.
01 XYZ-FLAG PIC X(3).

.I. n
88 NO-XYZ VALUE 'MAL'.
88 FOUND-XYZ VALUE 'OLE'.

.T ció
77 COUNTIT BINARY PIC 999 VALUE 1.
...
PROCEDURE DIVISION.

.
...

C
SET NO-XYZ TO TRUE

.F a
PERFORM UNTIL COUNTIT > 10
IF TABLE-ELEMENT(COUNTIT) = 'XYZ'

C rm
SET FOUND-XYZ TO TRUE
ADD 10 TO COUNTIT
ELSE
ADD 1 TO COUNTIT
END-IF
to fo
END-PERFORM
...
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 199
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SEARCH (búsqueda secuencial)

Sentencia SEARCH - Búsqueda secuencial

.I. n
Formato 1 -- Búsqueda secuencial

.T ció
SEARCH identificador-1
VARYING identificador-2
nombre-indice

.
C
.F a
END sentencia-imperativa-1
AT

C rm WHEN condición sentencia-imperativa-2


NEXT SENTENCE END-SEARCH
to fo
Con este formato se realiza una búsqueda en secuencia desde el
punto en el que se encuentra el índice
Identificador-1 debe contener un OCCURS y una frase INDEXED
ec o

BY
v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
200 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SET

Sentencia SET

.I. n
Cuando se ejecuta esta sentencia el valor se coloca un valor
determinado al índice

.T ció
Formato 1 -- SET (dar valor)

SET nombre-indice-1 TO nombre-indice-2

.
identificador-1 identificador-2

C
entero

.F a
C rm
Con este formato se incrementa (UP BY) o se decrementa (DOW N
BY) el valor que tiene el índice en la cantidad indicada

Formato 2 -- SET (incrementar/decrementar valor)


to fo
SET nombre-indice UP BY identificador-2
DOWN BY entero
ec o v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 201
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de SEARCH (secuencial)


WORKING-STORAGE SECTION.
01 WHOLE-TABLE.

.I. n
05 TABLE-ELMT OCCURS nnn TIMES INDEXED BY NDX.
10 KEYFIELD ...
10 REST-OF-STUFF ...

.T ció
PROCEDURE DIVISION.
...
SET NDX TO 1

.
SEARCH TABLE-ELMT VARYING NDX

C
WHEN KEYFIELD(NDX) = SEARCH-ARG

.F a
SET FOUND TO TRUE
WHEN KEYFIELD(NDX) = HIGH-VALUES
SET NOT-FOUND TO TRUE

C rm END-SEARCH
IF FOUND
...
END-IF
IF NOT-FOUND
to fo
DISPLAY SEARCH-ARG " NO ESTA EN LA TABLA."
END-IF
ec o v
oy si

Notas:
pr lu

En el ejemplo se está realizando una búsqueda en secuencia de la tabla. El último ele-


mento de la misma se ha puesto con el valor HIGH-VALUES
c
Ex

___________________________________________________________________
202 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SEARCH (búsqueda binaria)

Sentencia SEARCH - búsqueda binaria

.I. n
Formato 2 -- Búsqueda binaria

.T ció
SEARCH ALL identificador-1
END sentencia-imperativa-1
AT
WHEN nombredat1 EQUAL identificador-2

.
IS TO literal-1
= expr.aritmetica-1

C
nombre-condición-1

.F a
C rm AND nombredat2

nombre-condición-2
IS
EQUAL
=
TO
identificador-3
literal-2
expr.aritmetica-2
to fo
sentencia-imperativa-2
NEXT SENTENCE END-SEARCH

Con este formato se realiza una búsqueda binaria


El índice no precisa estar inicializado con una sentencia SET dado
ec o

que se va cambiando durante el proceso


v
oy si
pr lu

Notas:
c

Los datos de la tabla deben estar ordenados.


Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 203
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de búsqueda binaria


DATA DIVISION.
...

.I. n
01 WHOLE-TABLE.
03 TABLE-ELMT OCCURS 1 TO 250 TIMES

.T ció
DEPENDING ON PARM2
ASCENDING KEY IS KEYFIELD INDEXED BY NDX.
05 KEYFIELD PIC X(n).
05 ...

.
...

C
.F a
PROCEDURE DIVISION.
MOVE ... TO PARM2

C rm SEARCH ALL TABLE-ELMT


AT END SET NOT_FOUND TO TRUE
WHEN KEYFIELD(NDX) = SEARCH-ARG
SET FOUND TO TRUE
END-SEARCH
to fo
IF FOUND
...
END-IF
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
204 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 7.- Sentencias adicionales

Objetivos

.I. n
Objetivos

.T ció
Ver las sentencias

.
C
Inspect

.F a
String
Unstring

C rm
to fo
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 207
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia INSPECT

INSPECT TALLYING

.I. n
INSPECT TALLYING

.T ció
Permite contar las ocurrencias de un determinado carácter

.
(alfabético, numérico, o especial) de un campo

C
.F a
Formato 1 y Formato 3

INSPECT iden-1 TALLYING

C rm iden-2 FOR CHARACTERS


| frase |
to fo
ALL identificador-3
LEADING literal-1 | frase |

(ver formato 2)
ec o

frase:
BEFORE identificador-4
v

AFTER INITIAL literal-2


oy si
pr luc

Notas:
Ex

Con la opción TALLYING se pueden saber las veces que aparece un determinado ca-
rácter en una variable (alfanumérica o númerica DISPLAY).

___________________________________________________________________
208 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

INSPECT REPLACING

INSPECT REPLACING

.I. n
Formato 2

.T ció
INSPECT iden-1 REPLACING

CHARACTERS BY iden-5

.
literal-3 | frase |

C
iden-3 BY iden-5

.F a
ALL
LEADING literal-1 literal-3 | frase |
frase: FIRST

C rm BEFORE
AFTER INITIAL
iden-4
literal-2

Permite rellenar toda o una parte de una variable con los


to fo
caraceteres indicados (por ejemplo ceros o espacios)
Si se utiliza REPLACING CHARACTERS el iden-5 debe ser de
una posición
INSPECT DATA1 REPLACING ALL " " BY "0"
ec o

INSPECT DATA2 REPLACING FIRST ZERO BY SPACE


INSPECT DATA3 REPLACING CHARACTERS BY "X"
INSPECT DATA4 REPLACING LEADING "0" BY SPACE
v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 209
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

INSPECT CONVERTING

INSPECT CONVERTING

.I. n
Formato 4

.T ció
INSPECT identif-1 CONVERTING identif-6 TO
literal-4

.
identif-7 BEFORE iden-4

C
literal-5 AFTER INITIAL literal-2

.F a
Permite cambiar todas las apariciones de los caracteres indicados

C rma los valores suministrados. Puede darse una serie de caracteres


de reemplazamiento
to fo
MOVE "EVOLVED" TO START-UP
INSPECT START-UP CONVERTING "OELVD" TO "RGBAE"

E V O L V E D
ec o

G A R B A G E
v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
210 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos

Ejemplos de INSPECT

.I. n
La sentencia INSPECT funciona distinto utilizando REPLACING o

.T ció
CONVERTING
CONVERTING

.
INSPECT FIELD1 CONVERTING "ABC" BY

C
"XYZ"

.F a
Cambia 'ABC123AAA' a 'XYZ123XXX'

C rm
REPLACING

INSPECT FIELD1 REPLACING "ABC" BY


"XYZ"
to fo
Cambia 'ABC123AAA' a 'XYZ123AAA'
ec o v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 211
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia STRING

Sentencia STRING

.I. n
Formato

STRING identif-1 identif-2

.T ció
DELIMITED
literal-1 BY literal-2
SIZE

.
INTO identif-3
POINTER identif-4

C
WITH

.F a
C rm NOT
ON
OVERFLOW

OVERFLOW
sentencia imperativa1

sentencia imperativa2 END-STRING


to fo
ON

Esta sentencia permiten concatenar varias variables en una sola


ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
212 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de STRING
El ejemplo toma un número de teléfono de 10 dígitos y lo formatea:

8005551212 se transforma en (800) 555-1212

.I. n
WORKING-STORAGE SECTION.

.T ció
01 TELEPHONE.
04 AREACODE PIC 9(3).
04 LOCAL-NO PIC 9(7).
77 PRETTY-TELEPHONE PIC X(20).

.
PROCEDURE DIVISION.

C
...

.F a
STRING
"(" DELIMITED BY SIZE

C rm AREACODE DELIMITED BY SIZE


") " DELIMITED BY SIZE
LOCAL-NO(1:3) DELIMITED BY SIZE
"-" DELIMITED BY SIZE
LOCAL-NO(4:4) DELIMITED BY SIZE
INTO PRETTY-TELEPHONE
to fo
END-STRING
DISPLAY PRETTY-TELEPHONE
...
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 213
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia UNSTRING

Sentencia UNSTRING

.I. n
Formato

UNSTRING

.T ció
identif-1

DELIMITED identif-2
BY ALL literal-1

.
OR identif-3
ALL literal-2

C
.F a
INTO identif-4
DELIMITER identif-5 COUNT identif-6
IN IN

C rm WITH
POINTER identif-7 TALLYING
IN
identif-8
to fo
OVERFLOW sentencia imperativa1
ON

NOT OVERFLOW sentencia imperativa2 END-UNSTRING


ON
ec o

Permite dividir una variable en varias


v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
214 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de UNSTRING

01 ADDRESS1 PIC X(84) VALUE

.I. n
"IBM DAYTON;33 W.FIRST ST.;DAYTON, OH 45402\DAY".
01 ADDRESS2.

.T ció
05 LINE1 PIC X(80).
05 LINE2 PIC X(80).
05 LINE3 PIC X(80).

.
...

C
UNSTRING ADDRESS1 DELIMITED BY ";" OR "\"

.F a
INTO LINE1 LINE2 LINE3
END-UNSTRING

C rmEl último parámetro del ejemplo no va a ninguna LINEn, dado el


número de delimitadores/datos frente al número de identificadores
existentes en el INTO
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 215
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

___________________________________________________________________
216 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 8.- SORT / MERGE

Objetivos

.I. n
Objetivos

.T ció
Conocer la sentencia SORT

.
C
Conocer la sentencia MERGE

.F a
Presentar las posibilidades del SORT

C rm
Presentar las sentencias RELEASE / RETURN
Ver la opción FASTSRT
Registro especial SORT-RETURN
to fo
Archivo de control del SORT
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 217
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

PROCEDURE DIVISION

Sentencia SORT

.I. n
Sentencia SORT

.T ció
Formato

SORT archivo1 ASCENDING nombredat-1


ON DESCENDING KEY

.
C
DUPLICATES

.F a
WITH IN ORDER

C rm
SEQUENCE alfabeto-1
COLLATING IS

USING archivo2
INPUT PROCEDURE procedim-1
IS THROUGH procedim-2
to fo
THRU
GIVING archivo3
OUTPUT PROCEDURE procedim-3
IS THROUGH procedim-4
THRU
ec o

La sentencia SORT permite clasificar unos registros de acuerdo con


v

los conceptos que interese y, a continuación, usarlos en otros


procesos
oy si
pr luc

Notas:
Ex

Esta sentencia permite recoger registros de uno o más archivos, clasificarlos de


acuerdo con nuestras necesidades y finalmente dejarlos en un archivo de salida o pasarlos a
un procedimiento (OUTPUT PROCEDURE) para su tratamiento dentro del programa.

Archivo1 debe estar descrito con una SD.

___________________________________________________________________
218 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de SORT
INPUT-OUTPUT SECTION.
FILE-CONTROL.

.I. n
SELECT SORTINPT ASSIGN SORTINPT.
SELECT SORTOUT ASSIGN SORTOUT.
SELECT SORTWORK ASSIGN SORTWORK.
...

.T ció
DATA DIVISION.
FILE SECTION.
FD SORTINPT RECORD CONTAINS 80.
01 SORT-INPUT PIC X(80).

.
FD SORTOUT RECORD CONTAINS 80.
01 SORT-OUTPT PIC X(80).

C
SD SORTWORK RECORD CONTAINS 80.

.F a
01 SORT-RECORD.
05 MINOR-FLD PIC X(6).
05 INTERMED-FLD PIC X(8).

C rm
...

...
05 MAJOR-FLD
05 FILLER

PROCEDURE DIVISION.

SORT SORTWORK
PIC
PIC
X(8).
X(58).
to fo
ASCENDING KEY MAJOR-FLD INTERMED-FLD MINOR-FLD
USING SORTINPT GIVING SORTOUT.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 219
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia MERGE

Sentencia MERGE
Formato

.I. n
MERGE archivo1 ASCENDING nombredat-1
ON DESCENDING KEY

.T ció
SEQUENCE alfabeto-1
COLLATING

.
IS

C
.F a
USING archivo2 archivo3

C rm GIVING archivo4
OUTPUT PROCEDURE
IS
procedim-1
THROUGH
THRU
procedim-2
to fo
Con MERGE se pueden fusionar dos o más archivos que estén
clasificados por los mismos conceptos y pasarlos a un proceso o a un
archivo de salida
ec o v
oy si
pr lu

Notas:

Como puede comprobarse es muy similar a la SORT. Aquí no existe la INPUT PRO-
c

CEDURE y archivo1 debe estar definido en una SD.


Ex

___________________________________________________________________
220 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Consideraciones

PROCESOS INPUT Y OUPUT

.I. n
Procesos del SORT

.T ció
En los procesos se pueden añadir, eliminar, modificar o editar
registros

.
En la INPUT PROCEDURE se puede realizar un proceso previo a la

C
fase de clasificación

.F a
Si se especifica OUTPUT PROCEDURE se puede realizar un

C rm
proceso con los registros ya clasificados
En el proceso de entrada una sentencia RELEASE lleva un registro a
clasificar
En el proceso de salida la sentencia RETURN proporciona un registro
to fo
ya clasificado
ec o v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 221
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

SENTENCIA RELEASE

Sentencia RELEASE

.I. n
Formato

.T ció
RELEASE registro
FROM identificador

.
C
.F a
Sólo se puede utilizar en un proceso de entrada al SORT
La sentencia RELEASE pone a disposición de la fase inicial del

C rm
proceso del SORT el contenido del registro
Al finalizar la INPUT PROCEDURE, el archivo de clasificación
contiene todos los registros que se han colocado con la sentencia
RELEASE
to fo
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
222 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

SENTENCIA RETURN

Sentencia RETURN
Formato

.I. n
RETURN archivo

.T ció
RECORD INTO identificador

END sentencia imperativa-1


AT

.
C
.F a
NOT END sentencia imperativa-2 END-RETURN
AT

C rmSólo puede utilizarse en la OUTPUT PROCEDURE de un SORT o


un MERGE
La sentencia RETURN actúa como un "READ" y proporciona al
to fo
programa el siguiente registro resultante del proceso de sort/merge
Debe indicarse una cláusula AT END
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 223
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de SORT (1/2)


FILE SECTION.

.I. n
FD SORTINPT RECORD CONTAINS ...
01 SORT-INPUT PIC ...
FD SORTOUT RECORD CONTAINS ...

.T ció
01 SORT-OUTPT PIC ...
SD SORTWORK RECORD CONTAINS 96.
01 SORT-RECORD.

.
05 SORT-MAJOR PIC X(8).

C
05 SORT-MINOR PIC X(8).

.F a
05 ORIG-REC PIC X(80).
...

C rmPROCEDURE DIVISION.
SORT SORTWORK
ASCENDING KEY SORT-MAJOR SORT-MINOR
INPUT PROCEDURE PROC-IN
OUTPUT PROCEDURE PROC-OUT
to fo
STOP RUN.
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
224 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de SORT (2/2)


PROC-IN.
OPEN INPUT SORTINPT
READ SORTINPT INTO ORIG-RECORD

.I. n
AT END SET EOF-INDIC TO TRUE
END-READ
PERFORM WITH TEST BEFORE UNTIL EOF-INDIC

.T ció
...
...
RELEASE SORT-RECORD
READ SORTINPT INTO ORIG-RECORD

.
AT END SET EOF-INDIC TO TRUE

C
END-READ

.F a
END-PERFORM.
PROC-OUT.
OPEN OUTPUT SORTOUT

C rm
RETURN SORTWORK RECORD
AT END SET EOF-INDIC TO TRUE
NOT END SET NOT-EOF TO TRUE
END-RETURN
PERFORM WITH TEST BEFORE UNTIL EOF-INDIC
...
WRITE SORT-OUTPT FROM ORIG-RECORD
to fo
RETURN SORTWORK RECORD
AT END SET EOF-INDIC TO TRUE
END-RETURN
END-PERFORM.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 225
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

OPCIÓN FASTSRT

Opción FASTSRT

.I. n
La opción de compilación FASTSRT mejora el rendimento de la

.T ció
mayoría de procesos de clasificación en E/S si el SORT se ha
codificado en el formato "SORT ... USING" y/o "SORT ... GIVING"

.
Si se especifica FASTSRT, el DFSORT realiza la E/S de los

C
archivos nombrados en las sentencias:

.F a
SORT ... USING ...
SORT ... GIVING ...

C rm
El COBOL puede dar mensajes de compilación en los siguientes
casos:
No se ha indicado FASTSRT pero la ejecución podría beneficiarse
de su uso
to fo
Se ha indicado FASTSRT pero no se cumplen todos los
requisitos
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
226 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

REGISTRO SORT-RETURN

SORT-RETURN

.I. n
El SORT actualiza un registro especial (SORT-RETURN) que puede

.T ció
ser comprobado por el programa COBOL
Los valores posibles son:
0 ejecución correcta

.
16 ejecución con errores

C
.F a
PROCEDURE DIVISION.
...

C rm SORT SORTWORK
ASCENDING KEY MAJOR-FLD INTERMED-FLD MINOR-FLD
USING SORTINPT
GIVING SORTOUT.
...
to fo
IF SORT-RETURN NOT = 0
DISPLAY 'SORT ENDED ABNORMALLY. SORT-RETURN = '
SORT-RETURN
END-IF
ec o

...
v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 227
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Archivo de control del SORT


El DDNAME del archivo que contiene las sentencias de control del
Sort/Merge se indica en el registro especial SORT-CONTROL

.I. n
El DDNAME por omisión es 'IGZSRTCD'

.T ció
Si se codifica:

.
C
MOVE 'SORTDD' TO SORT-CONTROL

.F a
las sentencias de control del Sort/Merge deben incluirse en el

C rm
archivo cuyo ddname sea 'SORTDD'
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
228 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 9.- Sentencia CALL y la LINKAGE SECTION

Objetivos

.I. n
Objetivos

.T ció
Conocer la sentencia CALL

.
C
Presentar la CALL BY CONTENT / REFERENCE

.F a
Definir la LINKAGE SECTION

C rm
Presentar los POINTERS
Conocer los registros especiales que pueden utilizarse en las
sentencias CALL
to fo
Conocer otra utilización de la sentencia SET
Ver como se reciben parámetros desde el JCL
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 231
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

1ª Parte.- PROCEDURE DIVISION

Sentencia CALL

.I. n
.T ció
Sentencia CALL
Formato
identificador-1

.
CALL
literal-1
*

C
ptr-procedim-1 USING | cláusula |

.F a
C rm RETURNING identificador-5
| con excepción |

ON
OVERFLOW
* | sin excepción |
sent.imperativa-3
*
to fo
END-CALL
* (ver siguiente visual)
ec o

Permite transferir el control de un programa a otro dentro de la unidad


de proceso
v
oy si
pr luc

Notas:
Ex

Sirve para transferir el control a otro programa dentro de la misma unidad de ejecu-
ción. El programa que recibe el control con la sentencia CALL recibe el nombre de subpro-
grama. En la cláusula USING se indican los argumentos que se pasan al subprograma.

La cláusula RETURNING sólo debe usarse si se invoca a funciones escritas en CO-


BOL, C u otros lenguajes que sigan las convenciones del C. El subprograma deberá indicar la
frase RETURNING en la PROCEDURE DIVISION.

___________________________________________________________________
232 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplos de CALL

CALL con literal:

.I. n
CALL "PROGA" USING ...
ON EXCEPTION SET BAD-CALL TO TRUE

.T ció
NOT ON EXCEPTION SET GOOD-CALL TO TRUE
END-CALL
IF BAD-CALL ...

.
C
CALL con identificador:

.F a
77 PGM-NAME PIC X(8).

C rm
...
MOVE "PROGA" TO PGM-NAME
CALL PGM-NAME USING ...
ON EXCEPTION SET BAD-CALL TO TRUE
NOT ON EXCEPTION SET GOOD-CALL TO TRUE
END-CALL
to fo
IF BAD-CALL ...
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 233
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia CALL ...

cláusula:

.I. n
identificador-2
REFERENCE ADDRESS OF

.T ció
BY archivo
OMITTED
CONTENT identificador-3
BY ADDRESS OF

.
LENGTH OF
literal-2

C
.F a
OMITTED
VALUE identificador-4
BY ADDRESS OF

C rm
con excepción:

ON
EXCEPTION
LENGTH OF
literal-3

sent.imperativa-1
to fo
sin excepción:

NOT EXCEPTION sent.imperativa-2


ON
ec o v
oy si

Notas:
pr lu

En el método BY REFERENCE la memoria correspondiente al parámetro es la misma


que ocupa el argumento.
c

Si se utiliza BY CONTENT, un cambio en el contenido de un parámetro no afecta al


contenido del argumento en la programa principal.
Ex

Con BY VALUE lo que se pasa es el valor del argumento.

___________________________________________________________________
234 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

CALL BY CONTENT / REFERENCE


La técnica CALL ... BY REFERENCE permite que el subprograma
acceda y pueda modificar las variables del programa que lo ha

.I. n
invocado
Con CALL ... BY CONTENT el subprograma accede a una copia de

.T ció
los datos del programa que le ha invocado. No puede modificar los
valores originales

.
Una sentencia CALL puede contener ambas técnicas

C
.F a
WORKING-STORAGE SECTION.
01 RECORD-A.

C rm
05 FIELD1 PIC ...
05 FILLER ...
...
PROCEDURE DIVISION.
...
CALL "XXXXXX" USING BY REFERENCE RECORD-A
to fo
BY CONTENT LENGTH OF RECORD-A
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 235
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

2ª Parte.- DATA DIVISION

LINKAGE SECTION

.I. n
LINKAGE SECTION

.T ció
En esta sección de la DATA DIVISION se definen los datos que son

.
pasados por otro programa

C
.F a
No ocupan memoria
No se puede utilizar la cláusula VALUE (salvo en los niveles 88)

C rm DATA DIVISION.
WORKING-STORAGE SECTION.
...
to fo
LINKAGE SECTION.
01 BASIC-RECD.
05 AAA ...
05 BBB ...
ec o

01 STUFF PIC ...


77 OTHER-STUFF PIC ...
v
oy si
pr luc

Notas:
Ex

___________________________________________________________________
236 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de CALL y LINKAGE


DATA DIVISION.
...

.I. n
WORKING-STORAGE SECTION.
01 PARM-LIST.

.T ció
05 PARTPREFIX PIC A.
05 PARTNO PIC X(4).
05 USA-SALES PIC 9(5).

.
...

C
PROCEDURE DIVISION.

.F a
...
... LINKAGE SECTION.

C rm CALL CALLED-PGM
USING PARM-LIST.
...
...
01 USING-LIST.
10 PART-ID PIC X(5).
10 SALES
...
PIC 9(5).

PROCEDURE DIVISION
to fo
USING USING-LIST.
...
GOBACK.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 237
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

LINKAGE SECTION y parámetros del JCL


Puede pasarse información al programa que se va a ejecutar
con el parámetro PARM de la sentencia EXEC:

.I. n
//STEPNAM EXEC PGM=xxxxxxx,...,

.T ció
// PARM='user-parameter'

Debe colocarse la definición en la LINKAGE SECTION (se

.
trata de una serie de un máximo de 100 caracteres):

C
.F a
LINKAGE SECTION.
01 PARM-STRING.

C rm ...
02 PARM-LENG
02 PARM-TEXT
PIC 99 BINARY.
PIC X(100).

PROCEDURE DIVISION USING PARM-STRING.


...
to fo
IF PARM-LENG IS > 0 THEN ...
...
MOVE PARM-TEXT (1 : PARM-LENG) TO ...
END-IF
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
238 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Otras consideraciones

¿Qué es un POINTER?

.I. n
POINTER

.T ció
Una variable tipo POINTER es:
una variable elemental de 4 u 8 octetos
Se utiliza para direccionamiento

.
Se define con

C
USAGE IS POINTER si es un puntero a una variable

.F a
USAGE IS PROCEDURE-POINTER si es un puntero a una
dirección de un punto de entrada

C rm Puede tener el valor NULL o NULLS


...
WORKING-STORAGE SECTION.
77 PTR-1 USAGE IS POINTER.
to fo
77 PROC-PRT USAGE IS PROCEDURE-POINTER.
...
LINKAGE SECTION.
01 LINK-ITEM-1 PIC ...
...
PROCEDURE DIVISION.
ec o

SET PTR-1 TO ADDRESS OF LINK-ITEM-1.


...
SET PROC-PRT TO ENTRY 'HANDLER'
v

CALL PROC-PRT USING ...


oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 239
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Sentencia SET ADDRESS

SET ADDRESS

.I. n
Formato 5 -- SET (para punteros de datos)

.T ció
SET identificador-1
ADDRESS OF identificador-2

.
TO identificador-3
ADDRESS OF identificador-4

C
.F a
NULL
NULLS

C rm
Formato 6 -- SET (para punteros de procedimientos)

SET puntero-procedimiento-1

puntero-procedimiento-2
to fo
TO
ENTRY identificador-1
literal-1
NULL
NULLS
ec o

puntero-procedimiento-3
v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
240 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Registros especiales

Registros especiales

.I. n
ADDRESS OF

.T ció
Puede utilizarse para obtener una dirección
Existe para cada registro (nivel 01 o 77) de la LINKAGE
SECTION

.
Su definición implícita es USAGE IS POINTER

C
.F a
LENGTH OF
Permite conocer la longitud actual de una variable. Existe un
registro especial LENGTH OF por cada identificador utilizado en

C rm una LENGTH OF
En un elemento de una tabla, LENGTH OF hace referencia a una
ocurrencia (no hay que subscribir)
Su definición implícita es PIC 9(9) USAGE IS BINARY
to fo
DISPLAY FIELD-A " " LENGTH OF FIELD-A
ec o v
oy si
pr lu

Notas:
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 241
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

___________________________________________________________________
242 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 10.- Unidad de ejecución

Objetivos

.I. n
Objetivos

.T ció
Definir la unidad de ejecución

.
Introducir el concepto de programas anidados

C
.F a
Definir los programas COMMON

C rm
Introducir el concepto de datos GLOBAL
Introducción a los datos EXTERNAL
to fo
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 245
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Unidad de ejecución
Para el COBOL se trata de uno o más programas objeto (escritos en
COBOL o no)

.I. n
El programa principal puede hacer CALL a un subprograma y este a su
vez a otro subprograma

.T ció
Un programa llamado devuelve control al programa principal o finaliza
la unidad de ejecución

.
Un programa principal puede finalizar la ejecución con:

C
STOP RUN

.F a
GOBACK

C rm
Un subprograma puede finalizar su ejecución con:
EXIT PROGRAM
STOP RUN
GOBACK
to fo
Unidad de ejecución
A: CALL B B: CALL C C: GOBACK
ec o v
oy si

Notas:
pr lu

No utilizar STOP RUN en un subprograma ya que finaliza la ejecución de la unidad


de ejecución.
c
Ex

___________________________________________________________________
246 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Programas anidados (1/2)


Los programas COBOL pueden estar incluidos en otro programa
COBOL, compilados juntos e invocados como un único programa

.I. n
PROGA.

.T ció
PROGB.

.
PROGC.

C
.F a
PROGD1.

C rm PROGD2.
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 247
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Programas anidados (2/2)


Deben tener IDENTIFICATION DIVISION
El nombre del programa debe ser único

.I. n
Cada programa incluido se coloca en el programa que lo incluye justo

.T ció
antes de la sentencia END PROGRAM
Todos deben finalizar con END PROGRAM

.
Sólo el externo puede tener una CONFIGURATION SECTION

C
Un programa interno sólo puede ser invocado por el que lo incluye a

.F a
menos que sea de tipo COMMON

C rm IDENTIFICATION DIVISION.
PROGRAM-ID. PROGA.
PROCEDURE DIVISION.
...
IDENTIFICATION DIVISION.
PROGRAM-ID. PROGB.
to fo
PROCEDURE DIVISION.
...
END PROGRAM PROGB.
END PROGRAM PROGA.
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
248 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Programas COMMON
IDENTIFICATION DIVISION.
PROGRAM PROGD2 IS COMMON.

.I. n
PROGA.

.T ció
PROGB.

.
PROGC.

C
.F a
PROGD1.

C rm PROGD2 IS COMMON.
to fo
ec o v
oy si

Notas:
pr lu

Con COMMON se indica que el programa puede ser llamado por los antecesores del
programa que lo contiene y los programas contenidos en ellos. En el ejemplo: PROGD2
puede ser llamado por todos
c
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 249
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Datos GLOBAL

.I. n
La cláusula GLOBAL indica que esta variable está disponible para
todos los programas incluidos en el programa que la define salvo que

.T ció
dicho programa tenga una variable definida con el mismo nombre.
Los nombres de variables subordinadas a ésta, así como nombres de
condición o indices también son globales

.
Esta cláusula pude indicarse en la W orking-Storage Section, la File

C
Section, la Linkage Section, pero sólo en entrada de datos de tipo 01

.F a
o FD

C rm
Una variable puede tener las clausulas GLOBAL y EXTERNAL
GLOBAL sólo es válido en programas anidados
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
250 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de GLOBAL
IDENTIFICATION DIVISION.
PROGRAM-ID. MODULO1.
...

.I. n
DATA DIVISION.
WORKING-STORAGE SECTION.

.T ció
01 SHAREDATA PIC X(32) GLOBAL.
PROCEDURE DIVISION.
MOVE "INICIO DE CONTENIDO" TO SHAREDATA
CALL "MODULO2"

.
DISPLAY SHAREDATA Salida:

C
STOP RUN.
EMPIEZA EL MODULO2

.F a
IDENTIFICATION DIVISION.
PROGRAM-ID MODULO2. INICIO DE CONTENIDO
DATA DIVISION. ACABA EL MODULO2

C rm
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
DISPLAY "EMPIEZA EL MODULO2"
DISPLAY SHAREDATA
MOVE "FINAL DE CONTENIDO" TO SHAREDATA
FINAL DE CONTENIDO
to fo
DISPLAY "ACABA EL MODULO2"
EXIT PROGRAM.
END PROGRAM MODULO2.
END PROGRAM MODULO1.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 251
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Datos EXTERNAL
Los programas compilados por separado pueden compartir los datos
definiendolos con la cláusula EXTERNAL

.I. n
Sólo se admite EXTERNAL en niveles 01 de la
W ORKING-STORAGE y en las descripciones de las FD de la FILE

.T ció
SECTION
Cualquier programa de la unidad de ejecución con el mismo

.
identificador y con la opción EXTERNAL comparte el contenido

C
La memoria la adquiere el primer programa de la unidad de

.F a
ejecución

C rm
No puede usarse el mismo nombre definido como EXTERNAL por
otra variable del programa
No puede utilizarse la cláusula VALUE
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
252 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Ejemplo de EXTERNAL
IDENTIFICATION DIVISION.
PROGRAM-ID. MODULO1.

.I. n
WORKING-STORAGE SECTION.
01 SHAREDATA PIC X(32) EXTERNAL.
PROCEDURE DIVISION.

.T ció
MOVE "INICIO DE CONTENIDO" TO SHAREDATA
CALL "MODULO2"
DISPLAY SHAREDATA
STOP RUN. Salida:

.
END PROGRAM MODULO1.
EMPIEZA EL MODULO2

C
IDENTIFICATION DIVISION.

.F a
PROGRAM-ID MODULO2. INICIO DE CONTENIDO
ENVIRONMENT DIVISION. ACABA EL MODULO2
DATA DIVISION.

C rm
WORKING-STORAGE SECTION.
01 SHAREDATA PIC X(32) EXTERNAL.
PROCEDURE DIVISION.
DISPLAY "EMPIEZA EL MODULO2"
DISPLAY SHAREDATA
FINAL DE CONTENIDO
to fo
MOVE "FINAL DE CONTENIDO" TO SHAREDATA
DISPLAY "ACABA EL MODULO2"
EXIT PROGRAM.
END PROGRAM MODULO2.
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 253
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

___________________________________________________________________
254 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Tema 11.- Funciones

Objetivos

.I. n
Objetivos

.T ció
.
Conceptos y sintáxis de las funciones del COBOL

C
Funciones de fecha y hora

.F a
Funciones de manejo de series

C rm
Funciones aritméticas, matemáticas y de negocio
Funciones que admiten el parámetro ALL
to fo
ec o v
oy si
pr luc

Notas:
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 257
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Funciones

Funciones

.I. n
Permiten acceder a ciertos valores que se producen en tiempo de

.T ció
ejecución
Ejemplos:

.
Current-date

C
Length

.F a
Lower-case
Date-of-integer

C rm
Forman parte de una instrucción en la Procedure Division
FUNCTION es una palabra reservada
to fo
ec o v
oy si
pr lu

Notas:

La palabra FUNCTION es una palabra reservada pero no lo son los nombres de las
c

distintas funciones.
Ex

___________________________________________________________________
258 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Funciones - Sintáxis
Indicar "FUNCTION" seguido del nombre de la función

.I. n
No pueden utilizarse como receptoras
Ejemplos:

.T ció
.
C
move function current-date to d-string

.F a
C rm if function date-of-integer(base-date) ...

when function day-of-integer(base-date) ...


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 259
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Funciones - Argumentos y valores

.I. n
El número y formato de los argumentos depende de cada función
El resultado es una variable elemental definida de forma implícita por

.T ció
el COBOL
Las funciones numéricas y enteras sólo pueden utilizarse donde se
admiten expresiones aritméticas

.
Si el resultado de la función es una serie de caracteres

C
(alfanuméricos), la referencia debe ir seguida de una modificación de

.F a
referencia

C rm move function current-date (1:8) to rpt-string


to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
260 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Funciones de fecha

Funciones de fecha

.I. n
.T ció
Range: 1 enero 1601 a 31 diciembre 9999
Gregorian Date: YYYYMMDD

.
Integer Date: 1 a 3.067.671 (dias desde el 31 Diciembre 1600)

C
.F a
Julian Date: YYYYDDD

C rm
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 261
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

CURRENT-DATE

.I. n
MOVE FUNCTION CURRENT-DATE(1:8) TO DATE-ON-FILE

.T ció
Devuelve una serie de caracteres de longitud 21

YYYYMMDDHHmmsshhShhmm

.
C
.F a
Fecha
Hora (en formato 24 horas)

C rm Diferencia a GMT
to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
262 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

INTEGER-OF-DATE

Devuelve un valor entero a partir de una fecha en formato

.I. n
gregoriano:

.T ció
número de dias desde el 31 Diciembre de 1600
El entero puede utilizarse en aritmética de fechas o en
comparaciones

.
C
.F a
C rm
COMPUTE INT-DATE = FUNCTION INTEGER-OF-DATE(DATE-ON-FILE)

* Si DATE-ON-FILE es el valor 19960317, INT-DATE tendrá el valor 144337


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 263
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

DATE-OF-INTEGER
Devuelve una fecha en formato gregoriano a partir de un entero que

.I. n
represente una fecha

.T ció
De acuerdo con el número de días desde el 31 de diciembre de
1600
El entero puede haber sido la salida de una función y modificado

.
C
.F a
COMPUTE RPT-DATE = FUNCTION DATE-OF-INTEGER(INT-DATE)

C rm * Si INT-DATE vale 144337, RPT-DATE tendrá el valor 19960317


to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
264 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

INTEGER-OF-DAY

Devuelve un valor entero a partir de una fecha juliana

.I. n
Número de dias desde 31 diciembre 1600

.T ció
El resultado puede utilizarse en comparaciones o en
aritmética de fechas

.
C
.F a
COMPUTE INT-DATE = FUNCTION INTEGER-OF-DAY(JUL-DATE)

C rm * Si JUL-DATE vale 1996107, INT-DATE valdrá 144337


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 265
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

DAY-OF-INTEGER

Devuelve una fecha juliana a partir de un número entero

.I. n
De acuerdo con los dias transcurridos desde el 31 de diciembre de

.T ció
1600
El entero puede ser resultado de una función gregoriana de fecha

.
C
.F a
COMPUTE JUL-DATE = FUNCTION DAY-OF-INTEGER(INT-DATE)

C rm * Si INT-DATE vale 144337, JUL-DATE contendrá 1996107


to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
266 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Otras funciones
Funciones de fecha:

.I. n
DATE-TO-YYYYMMDD
DAY-TO-YYYYDDD

.T ció
YEAR-TO-YYYY

El primer argumento es una fecha con dos posiciones para el año

.
(yymmdd, yyddd, or yy)

C
.F a
El segundo argumento, que es opcional, es un número entero que
permite la conversión del año del formato AA a AAAA. El valor por

C rm
omisión es 50
El valor que devuelven es una fecha con el año con cuatro
posiciones
to fo
ec o v
oy si

Notas:
pr lu

El segundo argumento de estas funciones funciona como sigue:

y Se suma su valor al año de la fecha de ejecución y se obtiene un año de final


c

9 Si el programa se ejecuta en el 2002 y el valor es 20, el resultado sería 2022


y Se resta 99 a este año y se tiene un rango de 100 años
Ex

9 1923-2022
y Para valores de año entre 00 y el valor de los dos últimos dígitos del año de final ,
se asume la centuria de este año y, para el resto, la del año de inicio
9 En el ejemplo los rangos son 00-22 y 23-99. Dado el año 82 se asignaria el
1982 y, si el año fuese el 21 se asumiria el 2021.

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 267
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

DATE-TO-YYYYMMDD
Syntaxis:

.I. n
FUNCTION DATE-TO-YYYYMMDD (YYMMDD [SW ])
Ejemplos:

.T ció
COMPUTE FUNCTION DATE-TO-YYYYMMDD (IN-HIRE-DATE) TO OUT-HIRE-DATE

IF FUNCTION DATE-TO-YYYYMMDD (BIRTH-DATE -20) > QUERY-DATE THEN...

.
Ejemplos con valores:

C
.F a
Año activo Valor inicial Valor de SW Resultado
1998 890315 -10 18890315

C rm 1998
1998
1998
1998
1998
770122
890315
770122
890315
770122
-10
-1
-1
0
0
19770122
19890315
19770122
19890315
19770122
to fo
1998 890315 85 19890315
1998 770315 85 20770315
1998 890315 -120
1998 890315 120
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
268 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

DAY-TO-YYYYDDD
Sintáxis:

.I. n
FUNCTION DAY-TO-YYYYDDD (YYDDD [SW ])
Ejemplos:

.T ció
COMPUTE FUNCTION DAY-TO-YYYYDDD (IST-LOGON-DAY) TO OUT-LOGON-DAY

IF FUNCTION DAY-TO-YYYYDDD (ID-DAY -20) > QUERY-DAY THEN...

.
Ejemplos con valores:

C
.F a
Año activo Valor inicial Valor SW Resultado
1998 89315 -10 1889315
1998 77122 -10 1977122

C rm 1998
1998
1998
1998
1998
89315
77122
89315
77122
89315
-1
-1
0
0
85
1989315
1977122
1989315
1977122
1989315
to fo
1998 77315 85 2077315
1998 89315 -120
1998 89315 120
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 269
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

YEAR-TO-YYYY
Sintáxis:

.I. n
FUNCTION YEAR-TO-YYYY (YY [SW ])
Ejemplos:

.T ció
MOVE FUNCTION YEAR-TO-YYYY (START-YEAR) TO OUT-START-YEAR

IF FUNCTION YEAR-TO-YYYY (B-YEAR -20) > QUERY-YEAR THEN...

.
Ejemplos con valores:

C
.F a
Año activo Valor inicial Valor SW Resultado
1998 89 -10 1889

C rm 1998
1998
1998
1998
1998
77
89
77
89
77
-10
-1
-1
0
0
1977
1989
1977
1989
1977
to fo
1998 89 85 1989
1998 77 85 2077
1998 89 -120
1998 89 120
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
270 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Anidamiento de funciones

.I. n
COMPUTE NEW -DUE-DATE =
FUNCTION DATE-OF-INTEGER (

.T ció
FUNCTION INTEGER-OF-DATE (DATE-OF-ORDER) + 30)

.
Si el valor de DATE-OF-ORDER es 19960317, entonces:

C
.F a
FUNCTION INTEGER-OF-DATE(DATE-OF-ORDER) + 30
es igual a 144337 + 30 = 144367

C rm
FUNCTION DATE-OF-INTEGER(144367)
nos da NEW -DUE-DATE con el valor 19960416
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 271
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Funciones de series

LENGTH

.I. n
Devuelve un entero de nueve posiciones que indica el número

.T ció
de octetos que ocupa el argumento en memoria

El registro especial LENGTH OF y la función LENGTH son

.
similares. Sin embargo la función LENGTH puede admite

C
literales

.F a
C rm MOVE IN-REC(1:FUNCTION LENGTH(OUT-AREA)) TO OUT-AREA
to fo
Si la longitud de OUT-AREA es 10, sólo se mueven las posiciones 1 a 10 de
IN-REC a OUT-AREA
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
272 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

LOWER-CASE y UPPER-CASE
Devuelve una serie transformada a mayúsculas o minúsculas

.I. n
Deben ser variables de la misma longitud
Muy útil al comparar dos series

.T ció
.
MOVE FUNCTION UPPER-CASE(ANSW ER) TO UPPER-ANSW ER

C
.F a
Si ANSW ER contiene 'y' entonces UPPER-ANSW ER contendrá 'Y'

C rm
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 273
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

REVERSE

Devuelve una serie con el contenido de la serie pasada en el

.I. n
argumento pero en orden inverso

.T ció
puede utilizarse para ver el primer carácter distinto de blanco
Para escritura de derecha a izquierda

.
C
.F a
IF FUNCTION REVERSE(ASTRING) = ASTRING
PERFORM ES-UN-PALINDROME

C rmSi ASTRING contiene 'OTTO' se ejecutaría el párrafo ES-UN-PALINDROME


to fo
ec o v
oy si

Notas:
pr luc
Ex

___________________________________________________________________
274 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

CHAR y ORD
CHAR(n) devuelve el carácter enésimo

.I. n
ORD(char) devuelve la posición que ocupa este carácter en la
secuencia alfabética

.T ció
se utiliza cuando no se conoce, en tiempo de compilación, si se
trabaja en ASCII o EBCDIC

.
C
.F a
IF FUNCTION ORD('1') < FUNCTION ORD('A')

C rm PERFORM FOUND-ASCII

Si la condición es cierta, el sistema trabaja en modalidad ASCII


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 275
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Otras funciones

WHEN-COMPILED

.I. n
Devuelve la fecha que se puso en el momento de la

.T ció
compilación

Puede ser útil en determinación de problemas

.
C
.F a
C rmIF DISASTER
MOVE FUNCTION W HEN-COMPILED TO ERROR1

ERROR1 contendrá la fecha en que este programa se compiló si DISASTER


to fo
es verdadero
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
276 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Otras funciones

Trigonométricas y logarítmicas

.I. n
ACOS, ASIN, ATAN, COS, LOG, LOG10, SIN, TAN

.T ció
Estadísticas y matemáticas

FACTORIAL, INTEGER, INTEGER-PART, MAX, MEAN, MEDIAN, MIDRANGE, MIN,

.
MAX, ORD-MAX, ORD-MIN, RANDOM, RANGE, REM, SQRT, SUM

C
.F a
De conversión

C rm NUMVAL, NUMVAL-C

Inversión / depreciación

ANNUITY, PRESENT-VALUE, STANDARD-DEVIATION, VARIANCE


to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 277
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Funciones que admiten ALL

Parámetro ALL

.I. n
Si la función puede llevar un número variable de argumentos, se

.T ció
puede dar el nombre de una tabla como uno de ellos

Si la tabla es multidimensional, puede utilizarse ALL en lugar de

.
uno o mas subíndices

C
.F a
C rm COMPUTE TOTAL-IN = FUNCTION SUM(STORE-SALES(ALL))

TOTAL-IN contendrá la suma de todos los elementos de la tabla


STORE-SALES
to fo
ec o v
oy si
pr lu

Notas:
c
Ex

___________________________________________________________________
278 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

Funciones que pueden llevar "ALL"

Las funciones que pueden utilizar la opción ALL son:

.I. n
.T ció
MAX MIN
ORD-MAX ORD-MIN

.
MEAN MEDIAN

C
.F a
MIDRANGE PRESENT-VALUE
RANGE STANDARD-DEVIATION

C rm SUM VARIANCE
to fo
ec o v
oy si

Notas:
pr luc
Ex

_________________________________________________________________________________________
© Copyright IBM Corp. 2002 279
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
Material del Alumno
___________________________________________________________________________

.I. n
.T ció
.
C
.F a
C rm
to fo
ec o v
oy si
pr luc
Ex

___________________________________________________________________
280 © Copyright IBM Corp. 2002
El material de los cursos no puede reproducirse ni total ni
parcialmente sin el permiso escrito de IBM
CONTACTO
Teléfono
91 761 21 78
Póngase en contacto con nuestro equipo y le
informaremos de cualquier duda o cuestión
que pueda surgirle.

Email
formacion@arrowecs.es
Mándenos un email y le atenderemos
enseguida.

Online
@Arrow_Edu_ES
O bien puede contactarnos a través de
nuestro perfil en Twitter.

Visítenos
Arrow ECS Education Services
Avenida de Europa 21,
Parque Empresarial La Moraleja
28108 Alcobendas, Madrid

EDUCATION
S E R V I C E S

También podría gustarte