Documente Academic
Documente Profesional
Documente Cultură
Introducción al cobol.
Universidad de Valladolid
Departamento de Informática
Versión 1.5.FÉLiX
//
i Índice General
Índice General
1 Un poco de historia 1
4 Sentencias 7
5 Estructuras de control 12
8 Procesamiento de ficheros 16
8.1 Ficheros secuenciales . . . . . . . . . . . . . . . . . . . . . . . 16
8.2 Apertura y cierre de ficheros . . . . . . . . . . . . . . . . . . . 19
8.3 Comandos para el proceso de ficheros . . . . . . . . . . . . . . 19
9 Ficheros indexados 23
9.1 Declaración de ficheros indexados . . . . . . . . . . . . . . . . 23
Índice de listados
1 El tı́pico hola mundo en cobol. . . . . . . . . . . . . . . . . . 4
2 Definición de variables no editadas. . . . . . . . . . . . . . . . 6
3 Completando el programa anterior . . . . . . . . . . . . . . . 8
4 Un ejemplo de entrada y salida. . . . . . . . . . . . . . . . . . 10
5 Ejemplo de uso de algunas estructuras de control. . . . . . . . 13
6 Lectura de datos sobre un registro. . . . . . . . . . . . . . . . 15
7 Definición de vectores. . . . . . . . . . . . . . . . . . . . . . . 16
8 Programa que llama a otro. . . . . . . . . . . . . . . . . . . . 17
9 Programa llamado por otro. . . . . . . . . . . . . . . . . . . . 17
10 Lectura de un fichero . . . . . . . . . . . . . . . . . . . . . . . 20
11 Escritura de un fichero . . . . . . . . . . . . . . . . . . . . . . 21
12 Modificación de un fichero . . . . . . . . . . . . . . . . . . . . 22
13 Ejemplo de creación de un fichero indexado. . . . . . . . . . . 25
14 Ejemplo de búsqueda sobre un fichero indexado. . . . . . . . . 26
Índice de figuras
1 Esquema de los sistemas utilizados para las prácticas . . . . . 2
2 Plantilla de programación en cobol . . . . . . . . . . . . . . 3
3 Sı́mbolos utilizados en la plantilla de definición de variables . . 5
4 Nombres simbólicos utilizables para dar valor a las variables. . 6
5 Más sı́mbolos utilizados en las plantillas. . . . . . . . . . . . . 7
6 Diferentes salidas para variables editadas y no editadas . . . . 9
7 Opciones para entrada y salida. . . . . . . . . . . . . . . . . . 9
8 Algunas sentencias básicas en cobol . . . . . . . . . . . . . . 11
9 Estructuras de control. . . . . . . . . . . . . . . . . . . . . . . 14
1 Un poco de historia 1
Este documento es una introducción al cobol pensada para ayudar a los alum-
nos de Ingeniería Técnica en Informática de Gestión matriculados en Programa-
ción a iniciar el estudio de éste lenguaje. Su uso, por lo tanto, no excluye la
utilización de manuales completos como el referenciado en la página de la asigna-
tura.
1 Un poco de historia
cobol nace en 1951, alentado por el Pentágono de los ee.uu. para
facilitar la administración de aplicaciones programadas hasta entonces en
lenguajes distintos sobre hardware diverso. Sus siglas, Common Bussiness
Oriented Language, nos dan una idea clara de los objetivos básicos de sus
diseñadores, y de hecho desde entonces el cobol se ha transformado en un
estandar de hecho en la industria.
Aunque en ocasiones resulte difı́cil de creer, el parque de aplicaciones
cobol instalado en estos momentos es muy elevado; para convencerse de
ello basta con consultar las ofertas de empleo de los suplementos económicos
de algunos diarios.
Algunos de los inconvenientes del cobol vienen precisamente de su longe-
vidad. Aunque el estándar ansi va cambiando con el tiempo e incorporando
capacidades nuevas, no hay que perder de vista que los compiladores deberán
ser compatibles con los diversos estándares del mercado, por ejemplo:
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ E l t í p i c o " Hola mundo " ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . Hola−mundo .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
DATA DIVISION .
∗
PROCEDURE DIVISION .
principal .
DISPLAY QUOTES " Hola mundo ! " QUOTES
STOP RUN .
9 Dı́gito decimal.
V Punto decimal.
P Dı́gito siempre cero.
S Signo del número, si existe.
X Cualquier carácter.
A Carácter alfabético.
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Ejemplos de a s i g n a c i o n e s con move y p l a n t i l l a s ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . mascaras .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
DATA DIVISION .
WORKING−STORAGE SECTION .
∗ V a r i a b l e s no e d i t a d a s .
7 7 a1 PIC 9 9 9 9 VALUE IS 2 5 .
7 7 b1 PIC S99V99 VALUE IS 3 . 1 4 .
7 7 c1 PIC 9 ( 6 ) VALUE IS 1 0 0 1 97 .
7 7 d1 PIC 9 ( 9 ) V99 VALUE IS 1 2 3 4 5 6 7 . 8 9 .
7 7 e1 PIC AA9 ( 4 )AA VALUE IS " VA0001A " .
7 7 f 1 PIC 9 9PPP VALUE IS 9 0 0 0 .
7 7 g1 PIC VPPP99 VALUE IS 0 . 0 0 0 1 1 .
4 Sentencias
El resumen de las sentencias utilizadas en cobol aparece en la figura 8.
Sobre ellas deberemos hacer algunos comentarios:
77 a2 PIC Z , ZZ9 .
77 b2 PIC −−−.−−.
77 c2 PIC ZZ / ZZ / ZZ .
77 d2 PIC ZZZ , ZZZ , ZZZ . Z .
77 e2 PIC AAB9 ( 4 )BAA .
77 f2 PIC ZZZZ9 .
77 g2 PIC Z . ZZZZZ .
∗
PROCEDURE DIVISION .
principal .
∗ A s i g n a c i ó n e n t r e v a r i a b l e s e d i t a d a s y no e d i t a d a s
MOVE a1 to a2
MOVE b1 to b2
MOVE c1 to c2
MOVE d1 to d2
MOVE e1 to e2
MOVE f 1 to f 2
MOVE g1 to g2
∗ Mostramos todas l a s v a r i a b l e s .
DISPLAY a1
DISPLAY a2
DISPLAY b1
DISPLAY b2
DISPLAY c1
DISPLAY c2
DISPLAY d1
DISPLAY d2
DISPLAY e1
DISPLAY e2
DISPLAY f 1
DISPLAY f 2
DISPLAY g1
0025
25
0314+
3.14
100197
10/01/97
00123456789
1,234,567.8
VA0001A
VA 0001 A
09
9000
11
.00011
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Un ejemplo de e n t r a d a y s a l i d a ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . alumno .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
DATA DIVISION .
WORKING−STORAGE SECTION .
7 7 a p e l l i d o 1 PIC X ( 3 0 ) .
7 7 a p e l l i d o 2 PIC X ( 3 0 ) .
7 7 nombre PIC X ( 3 0 ) .
∗
PROCEDURE DIVISION .
principal .
PERFORM cabecera
PERFORM leer−alumno
DISPLAY " L e c t u r a f i n a l i z a d a " LINE 1 0 POSITION 1 0
STOP RUN .
cabecera .
DISPLAY " U n i v e r s i d a d de V a l l a d o l i d " LINE 1 POSITION 2 7
DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−−" LINE 2 POSITION 2 7
DISPLAY " " LINE 3 POSITION 1 ERASE EOS.
leer−alumno .
DISPLAY " I n t r o d u c e l o s datos d e l alumno " AT LINE 3 COLUMN 1
DISPLAY " A p e l l i d o 1 . " LINE 4 POSITION 2 WITH REVERSE−VIDEO
DISPLAY " A p e l l i d o 2 . " LINE 5 POSITION 2 WITH REVERSE−VIDEO
DISPLAY " Nombre . . . . " LINE 6 POSITION 2 WITH REVERSE−VIDEO
ACCEPT a p e l l i d o 1 AT LINE 4 POSITION 1 2
ACCEPT a p e l l i d o 2 LINE 5 POSITION 1 2
ACCEPT nombre LINE 6 POSITION 1 2
WITH PROMPT CHARACTER IS ’ ∗ ’
END−ACCEPT.
• Sentencia de asignación.
• Sentencia de cálculo
• Sentencias aritméticas
• Sentencia PERFORM.
PERFORM párrafo
5 Estructuras de control
Para la utilización de estructuras de control en cobol podemos utilizar
condicionales de dos tipos:
• Operadores relacionales.
• Comprobación de “tipo”.
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Ejemplo de uso de l a s e s t r u c t u r a s de c o n t r o l . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . e c o n t r o l .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
DATA DIVISION .
WORKING−STORAGE SECTION .
7 7 l i n e a PIC 9 9 VALUE IS 5 .
PROCEDURE DIVISION .
principal .
PERFORM comprobacion1
PERFORM comprobacion2
PERFORM bucle1
PERFORM bucle2
PERFORM bucle3
STOP RUN .
comprobacion1 .
IF l i n e a > = 5
DISPLAY " ∗∗∗ Comprobación 1 ∗∗∗"
END−IF .
comprobacion2 .
EVALUATE l i n e a
WHEN 5 DISPLAY " ∗∗∗ Comprobación 2 ∗∗∗"
WHEN OTHER DISPLAY "NO FUNCIONA"
END−EVALUATE .
bucle1 .
DISPLAY " ∗∗∗ Primer b u c l e ∗∗∗"
MOVE 1 0 TO l i n e a
PERFORM UNTIL l i n e a = 1 0
DISPLAY l i n e a
ADD 1 TO l i n e a
END−PERFORM
DISPLAY " ∗∗∗ F i n a l Primer b u c l e ∗∗∗" .
bucle2 .
MOVE 5 TO l i n e a
DISPLAY " ∗∗∗ Segundo b u c l e ∗∗∗"
PERFORM WITH TEST AFTER UNTIL l i n e a = 1 0
DISPLAY l i n e a
ADD 1 TO l i n e a
ON SIZE ERROR MOVE 1 0 TO LINEA
END−PERFORM
DISPLAY " ∗∗∗ F i n a l Segundo b u c l e ∗∗∗" .
bucle3 .
DISPLAY " ∗∗∗ T e r c e r b u c l e ∗∗∗"
PERFORM VARYING l i n e a FROM 1 BY 1 UNTIL l i n e a = 1 0
DISPLAY l i n e a
END−PERFORM
DISPLAY " ∗∗∗ F i n a l T e r c e r b u c l e ∗∗∗" .
6.1 Registros
En cobol podemos declarar variables estructuradas. Utilizamos para ello
un número de nivel 01 en la zona b de la lı́nea y números de nivel más altos
para los niveles más internos de la estructura. Por ejemplo en el programa 6
leemos de forma elemental los datos de una persona y los almacenamos en
un registro.
Como se ve en el ejemplo, en el programa podemos utilizar directamente el
nombre del campo del registro, lo cual nos da una pista de que no debemos
utilizar el mismo nombre de campo en varios registros; sin embargo, si lo
hacemos, podemos distinguirlos mediante el cualificador OF.
6.2 Vectores
Los vectores son un tipo especial de registros en que los campos se repi-
ten. Ası́ podemos realizar varios tipos de declaración de vectores como los
recogidos en el programa de la figura 7.
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Un ejemplo más complicado de e n t r a d a y s a l i d a , ∗
∗ con u t i l i z a c i ó n de un r e g i s t r o . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . r e g i s t r o .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
DATA DIVISION .
WORKING−STORAGE SECTION .
0 1 dato .
0 2 a p e l l i d o 1 PIC X ( 3 0 ) .
0 2 a p e l l i d o 2 PIC X ( 3 0 ) .
0 2 nombre PIC X ( 3 0 ) .
0 2 sexo PIC X .
8 8 hombre VALUE IS "H" .
8 8 mujer VALUE IS "M" .
∗
PROCEDURE DIVISION .
principal .
PERFORM cabecera
PERFORM leer−alumno
DISPLAY " L e c t u r a f i n a l i z a d a " LINE 1 0 POSITION 1 0
STOP RUN .
cabecera .
DISPLAY " U n i v e r s i d a d de V a l l a d o l i d " LINE 1 POSITION 2 7
DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−−" LINE 2 POSITION 2 7
DISPLAY " " LINE 3 POSITION 1 ERASE EOS.
leer−alumno .
DISPLAY " I n t r o d u c e l o s datos d e l alumno " LINE 3 POSITION 1
DISPLAY " A p e l l i d o 1 . " LINE 4 POSITION 2
DISPLAY " A p e l l i d o 2 . " LINE 5 POSITION 2
DISPLAY " Nombre . . . . " LINE 6 POSITION 2
DISPLAY " Sexo (H/M) " LINE 7 POSITION 2
ACCEPT a p e l l i d o 1 LINE 4 POSITION 1 2 WITH PROMPT " _ "
ACCEPT a p e l l i d o 2 LINE 5 POSITION 1 2 WITH PROMPT " _ "
ACCEPT nombre LINE 6 POSITION 1 2 WITH PROMPT " _ "
PERFORM leer−sexo .
leer−sexo .
ACCEPT sexo LINE 7 POSITION 1 2 WITH PROMPT " _ "
PERFORM UNTIL hombre OR mujer
DISPLAY "ERROR. Dato i n c o r r e c t o "
LINE 7 POSITION 1 5 WITH REVERSE−VIDEO
END−DISPLAY
ACCEPT sexo LINE 7 POSITION 1 2 WITH PROMPT " _ "
DISPLAY " " LINE 7 POSITION 1 5 ERASE EOL
END−PERFORM .
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ D e f i n i c i ó n de v e c t o r e s . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . Vectores .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
DATA DIVISION .
WORKING−STORAGE SECTION .
01 vector .
0 2 elemento PIC 9 9 OCCURS 1 0 TIMES .
01 matriz .
0 2 f i l a OCCURS 1 0 TIMES .
0 3 columna OCCURS 1 0 TIMES PIC X .
01 votacion .
0 2 v o t o PIC A OCCURS 5 TO 9 0 TIMES DEPENDING ON v o t o s .
7 7 v o t o s PIC 9 9 .
PROCEDURE DIVISION .
principal .
MOVE 1 0 TO v o t o s
MOVE 1 0 TO elemento ( 5 )
MOVE "X" TO columna ( 2 , 3 )
MOVE "X" TO v o t o ( 6 )
STOP RUN .
8 Procesamiento de ficheros
En cobol vamos a poder utilizar tres tipos de ficheros: Ficheros de acceso
secuencial, ficheros secuenciales indexados y ficheros de acceso directo (fiche-
ros de acceso relativo). En las siguientes secciones veremos las declaraciones
y comandos necesarios para utilizarlos.
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Programa que l l a m a a un subprograma e x t e r n o ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . l l a m a .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
DATA DIVISION .
WORKING−STORAGE SECTION .
∗ no e d i t a d a s .
7 7 a PIC 9 ( 4 ) .
7 7 b PIC 9 ( 4 ) .
7 7 c PIC 9 ( 5 ) VALUE IS 0 .
∗ editadas .
7 7 r e s u l t a d o PIC ZZZZ9 .
∗
PROCEDURE DIVISION .
principal .
DISPLAY " Primer sumando=" WITH NO ADVANCING
ACCEPT a
DISPLAY " Segundo sumando=" WITH NO ADVANCING
ACCEPT b
CALL " llamado " USING a , b , c
MOVE c TO r e s u l t a d o
DISPLAY " La suma es " r e s u l t a d o
STOP RUN .
IDENTIFICATION DIVISION.
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de óprogramacin en COBOL para la ∗
∗ asignatura óProgramacin II (óGestin) ∗
∗ óMdulo llamado por otro programa. ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID. llamado.
AUTHOR. Profesores de óProgramacin II.
∗
DATA DIVISION.
LINKAGE SECTION.
∗ no editadas.
77 x PIC 9(4).
77 y PIC 9(4).
77 z PIC 9(5).
PROCEDURE DIVISION USING x,y,z.
principal .
add x to y giving z
exit program.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT [OPTIONAL] nombre ASSIGN TO literal
[ORGANIZATION SEQUENTIAL]
[ACCESS SEQUENTIAL]
[FILE STATUS IS nombre de dato].
DATA DIVISION.
FILE SECTION.
FD nombre del archivo
DATA RECORD IS nombre.
01 nombre.
y la declaración de registro al uso
Hay que señalar que nombre es el nombre del registro de datos del fichero,
y lógicamente debe ser el mismo en los dos puntos en que aparece. Además
en la definición del registro puede aparecer como nombre de campo FILLER
que indica que este campo no se utilizará en la PROCEDURE DIVISION
o lo que es lo mismo, que este campo no será utilizado en el proceso del
fichero; simplemente se trata de una forma de protegernos de la utilización o
modificación de estos campos.
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ L e c t u r a de un f i c h e r o s e c u e n c i a l . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . l e c t u r a .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
ENVIRONMENT DIVISION .
INPUT−OUTPUT SECTION .
FILE−CONTROL .
SELECT e n t r a d a ASSIGN TO " alumnos . d a t "
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL .
∗
DATA DIVISION .
FILE SECTION .
FD e n t r a d a
DATA RECORD IS alumno .
0 1 alumno .
0 2 a p e l l i d o 1 PIC X ( 1 0 ) .
0 2 a p e l l i d o 2 PIC X ( 1 0 ) .
0 2 nombre PIC X ( 1 0 ) .
0 2 sexo PIC X .
8 8 hombre VALUE IS "H" .
8 8 mujer VALUE IS "M" .
WORKING−STORAGE SECTION .
7 7 f i n PIC X VALUE "N" .
8 8 f i n − d e − f i c h e r o VALUE IS "S" .
7 7 l i n e a PIC 9 9 VALUE IS 5 .
PROCEDURE DIVISION .
principal .
OPEN INPUT e n t r a d a
PERFORM cabecera
PERFORM leer−alumno
PERFORM UNTIL f i n − d e − f i c h e r o
PERFORM e s c r i b i r − a l u m n o
PERFORM leer−alumno
ADD 1 TO l i n e a
END−PERFORM
CLOSE e n t r a d a
STOP RUN .
cabecera .
DISPLAY " " LINE 1 POSITION 1 ERASE EOS
DISPLAY " U n i v e r s i d a d de V a l l a d o l i d " LINE 1 POSITION 2 7
DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−−" LINE 2 POSITION 2 7
DISPLAY " A p e l l i d o 1 . " LINE 4 POSITION 2
DISPLAY " A p e l l i d o 2 . " LINE 4 POSITION 1 3
DISPLAY " Nombre . . . . " LINE 4 POSITION 2 4
DISPLAY " Sexo (H/M) " LINE 4 POSITION 3 5 .
leer−alumno .
READ e n t r a d a
AT END MOVE "S" TO f i n .
escribir−alumno .
DISPLAY a p e l l i d o 1 LINE l i n e a POSITION 2
DISPLAY a p e l l i d o 2 LINE l i n e a POSITION 1 3
DISPLAY nombre LINE l i n e a POSITION 2 4
DISPLAY sexo LINE l i n e a POSITION 3 5 .
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Escribimos e l primer f i c h e r o secuencial . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . m o d i f i c a c i o n .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
ENVIRONMENT DIVISION .
INPUT−OUTPUT SECTION .
FILE−CONTROL .
SELECT s a l i d a ASSIGN TO " alumnos . d a t "
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL .
∗
DATA DIVISION .
FILE SECTION .
FD s a l i d a
DATA RECORD IS alumno .
0 1 alumno .
0 2 a p e l l i d o 1 PIC X ( 1 0 ) .
0 2 a p e l l i d o 2 PIC X ( 1 0 ) .
0 2 nombre PIC X ( 1 0 ) .
0 2 sexo PIC X .
8 8 hombre VALUE IS "H" .
8 8 mujer VALUE IS "M" .
WORKING−STORAGE SECTION .
7 7 r e s p u es t a PIC X VALUE IS "S" .
8 8 no−mas−registros VALUES ARE "N" , " n " .
PROCEDURE DIVISION .
principal .
OPEN OUTPUT s a l i d a
PERFORM WITH TEST AFTER UNTIL no−mas−registros
PERFORM cabecera
PERFORM leer−alumno
WRITE alumno
DISPLAY " ¿Más r e g i s t r o s ?" LINE 1 0 POSITION 1 0
ACCEPT r e s pu e s t a LINE 1 0 POSITION 2 6 WITH PROMPT " _ "
END−PERFORM
CLOSE s a l i d a
STOP RUN .
cabecera .
DISPLAY " U n i v e r s i d a d de V a l l a d o l i d " LINE 1 POSITION 2 7
DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−−" LINE 2 POSITION 2 7
DISPLAY " " LINE 3 POSITION 1 ERASE EOS.
leer−alumno .
PERFORM l i m p i a r − r e g i s t r o
DISPLAY " I n t r o d u c e l o s datos d e l alumno " LINE 3 POSITION 1
DISPLAY " A p e l l i d o 1 . " LINE 4 POSITION 2
DISPLAY " A p e l l i d o 2 . " LINE 5 POSITION 2
DISPLAY " Nombre . . . . " LINE 6 POSITION 2
DISPLAY " Sexo (H /M) " LINE 7 POSITION 2
ACCEPT a p e l l i d o 1 LINE 4 POSITION 1 2 WITH PROMPT " _ "
ACCEPT a p e l l i d o 2 LINE 5 POSITION 1 2 WITH PROMPT " _ "
ACCEPT nombre LINE 6 POSITION 1 2 WITH PROMPT " _ "
PERFORM leer−sexo .
leer−sexo .
PERFORM WITH TEST AFTER UNTIL hombre OR mujer
ACCEPT sexo LINE 7 POSITION 1 2 WITH PROMPT " _ "
IF NOT hombre AND NOT mujer
DISPLAY " E r r o r : Entrada i n c o r r e c t a "
LINE 1 0 POSITION 1 5 WITH REVERSE−VIDEO
END−DISPLAY
END−IF
END−PERFORM
DISPLAY " " LINE 1 0 POSITION 1 0 ERASE EOL .
limpiar−registro .
MOVE SPACE TO a p e l l i d o 1
MOVE SPACE TO a p e l l i d o 2
MOVE SPACE TO nombre
MOVE SPACE TO sexo .
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ M o d i f i c a c i o n de un f i c h e r o s e c u e n c i a l . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . l e c t u r a .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
ENVIRONMENT DIVISION .
INPUT−OUTPUT SECTION .
FILE−CONTROL .
SELECT f i c h e r o ASSIGN TO " alumnos . d a t "
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL .
∗
DATA DIVISION .
FILE SECTION .
FD f i c h e r o
DATA RECORD IS alumno .
0 1 alumno .
0 2 a p e l l i d o 1 PIC X ( 1 0 ) .
0 2 a p e l l i d o 2 PIC X ( 1 0 ) .
0 2 nombre PIC X ( 1 0 ) .
0 2 sexo PIC X .
8 8 hombre VALUE IS "H" .
8 8 mujer VALUE IS "M" .
WORKING−STORAGE SECTION .
7 7 f i n PIC X VALUE "N" .
8 8 fin−de−fichero VALUE IS "S" .
PROCEDURE DIVISION .
principal .
OPEN I−O f i c h e r o
PERFORM cabecera
PERFORM leer−alumno
PERFORM UNTIL fin−de−fichero
PERFORM cambiar−sexo−alumno
PERFORM r e e s c r i b i r − a l u m n o
PERFORM leer−alumno
END−PERFORM
CLOSE f i c h e r o
STOP RUN .
cabecera .
DISPLAY " " LINE 1 POSITION 1 ERASE EOS
DISPLAY " U n i v e r s i d a d de V a l l a d o l i d " LINE 1 POSITION 2 7
DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−−" LINE 2 POSITION 2 7
DISPLAY " Procedo a l cambio de sexo de l o s alumnos . . . "
− LINE 5 POSITION 1 0
9 Ficheros indexados
Los ficheros indexados están formados por uno o más ficheros de ı́ndice
y un fichero de datos1 . El acceso a estos ficheros puede realizarse de forma
secuencial o bien a través del ı́ndice.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT nombre ASSIGN TO literal
ORGANIZATION INDEXED
[ACCESS SEQUENTIAL | RANDOM | DYNAMIC]
RECORD KEY IS nombre de dato 1
[ALTERNATE RECORD KEY IS nombre de dato 2[WITH DUPLICATES]]
• WRITE REGISTRO
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Creación de un f i c h e r o indexado ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . crea−indexado .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
ENVIRONMENT DIVISION .
INPUT−OUTPUT SECTION .
FILE−CONTROL .
SELECT s a l i d a ASSIGN TO " A s i g n a t u r a s . d a t "
ORGANIZATION IS INDEXED
RECORD KEY IS numero
ALTERNATE RECORD IS nombre WITH DUPLICATES
ACCESS IS SEQUENTIAL .
∗
DATA DIVISION .
FILE SECTION .
FD s a l i d a
DATA RECORD IS a s i g n a t u r a .
01 asignatura .
0 2 numero PIC 9 9 9 .
0 2 nombre PIC X ( 2 0 ) .
0 2 alumnos PIC 9 ( 4 ) .
0 2 p r o f e s o r PIC X ( 4 0 ) .
WORKING−STORAGE SECTION .
7 7 s e g u i r PIC X VALUE "S" .
8 8 no−mas−datos VALUE IS "N" .
7 7 alumnos−editado PIC ZZZ9 .
∗
PROCEDURE DIVISION .
principal .
PERFORM cabecera
OPEN OUTPUT s a l i d a
MOVE 1 TO numero
PERFORM WITH TEST AFTER UNTIL no−mas−datos
PERFORM l e e r − r e g i s t r o
WRITE a s i g n a t u r a
DISPLAY " Más r e g i s t r o s ? (S / N ) " LINE 9 POSITION 3
ACCEPT s e g u i r LINE 9 POSITION 2 7 WITH REVERSE−VIDEO
ADD 1 TO numero
END−PERFORM
CLOSE s a l i d a
STOP RUN .
cabecera .
DISPLAY " " LINE 1 POSITION 1 ERASE EOS
DISPLAY " U n i v e r s i d a d de V a l l a d o l i d " LINE 2 POSITION 2 7
DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−−" LINE 3 POSITION 2 7
DISPLAY " Datos de l a a s i g n a t u r a : " LINE 5 POSITION 3
DISPLAY " Número . . . . . . . . . . . . . . . . . " LINE 5 POSITION 3
DISPLAY " Nombre . . . . . . . . . . . . . . . . . " LINE 6 POSITION 3
DISPLAY " No de alumnos . . . . . . . . . . " LINE 7 POSITION 3
DISPLAY " P r o f e s o r . . . . . . . . . . . . . . . " LINE 8 POSITION 3 .
leer−registro .
∗ Limpiamos l o s campos antes de l a l e c t u r a .
MOVE " " TO nombre
MOVE 0 TO alumnos−editado
MOVE " " TO p r o f e s o r
∗ Limpiamos l a zona de p a n t a l l a en que se l e e
DISPLAY " " LINE 6 POSITION 2 7 WITH ERASE EOL
DISPLAY " " LINE 7 POSITION 2 7 WITH ERASE EOL
DISPLAY " " LINE 8 POSITION 2 7 WITH ERASE EOL
DISPLAY " " LINE 9 POSITION 3 WITH ERASE EOL
∗ Mostramos l a c l a v e p r i n c i p a l , que es c a l c u l a d a .
DISPLAY numero LINE 5 POSITION 2 7
∗ La l e c t u r a d e l r e g i s t r o .
ACCEPT nombre LINE 6 POSITION 2 7 WITH REVERSE−VIDEO
DISPLAY nombre LINE 6 POSITION 2 7
∗ Leemos e l número en un campo e d i t a d o para e v i t a r
∗ e l comportamiento “ e x t r a ñ o ” en o t r o caso .
ACCEPT alumnos−editado LINE 7 POSITION 2 7 WITH REVERSE−VIDEO
MOVE alumnos−editado TO alumnos
DISPLAY alumnos−editado LINE 7 POSITION 2 7
ACCEPT p r o f e s o r LINE 8 POSITION 2 7 WITH REVERSE−VIDEO
DISPLAY p r o f e s o r LINE 8 POSITION 2 7 .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ Ejemplos de programación en COBOL para l a ∗
∗ a s i g n a t u r a Programación I I ( Gestión ) ∗
∗ Búsqueda en f i c h e r o indexado ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID . busca−indexado .
AUTHOR . P r o f e s o r e s de Programación I I .
∗
ENVIRONMENT DIVISION .
INPUT−OUTPUT SECTION .
FILE−CONTROL .
SELECT e n t r a d a ASSIGN TO " A s i g n a t u r a s . d a t "
ORGANIZATION IS INDEXED
RECORD KEY IS numero
ALTERNATE RECORD IS nombre WITH DUPLICATES
ACCESS IS RANDOM .
∗
DATA DIVISION .
FILE SECTION .
FD e n t r a d a
DATA RECORD IS a s i g n a t u r a .
01 asignatura .
0 2 numero PIC 9 9 9 .
0 2 nombre PIC X ( 2 0 ) .
0 2 alumnos PIC 9 ( 4 ) .
0 2 p r o f e s o r PIC X ( 4 0 ) .
WORKING−STORAGE SECTION .
7 7 alumnos−editado PIC ZZZ9 .
7 7 buscado−editado PIC ZZ9 .
7 7 encontrado PIC X VALUE IS "S" .
∗
PROCEDURE DIVISION .
principal .
PERFORM cabecera
OPEN INPUT e n t r a d a
DISPLAY " No A s i g n a t u r a ?" LINE 1 0 POSITION 4
ACCEPT buscado−editado LINE 1 0 POSITION 1 9
MOVE buscado−editado TO numero
READ e n t r a d a INVALID KEY
MOVE "N" TO encontrado
IF encontrado = "S"
THEN
PERFORM mostrar−encontrado
ELSE
DISPLAY " A s i g n a t u r a no encontrada " LINE 1 0 POSITION 2 0
END−IF
CLOSE e n t r a d a
STOP RUN .
cabecera .
DISPLAY " " LINE 1 POSITION 1 ERASE EOS
DISPLAY " U n i v e r s i d a d de V a l l a d o l i d " LINE 2 POSITION 2 7
DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−−" LINE 3 POSITION 2 7
DISPLAY " Datos de l a a s i g n a t u r a : " LINE 5 POSITION 3
DISPLAY " Número . . . . . . . . . . . . . . . . . " LINE 5 POSITION 3
DISPLAY " Nombre . . . . . . . . . . . . . . . . . " LINE 6 POSITION 3
DISPLAY " No de alumnos . . . . . . . . . . " LINE 7 POSITION 3
DISPLAY " P r o f e s o r . . . . . . . . . . . . . . . " LINE 8 POSITION 3 .
mostrar−encontrado .
MOVE alumnos TO alumnos−editado
DISPLAY numero LINE 5 POSITION 2 7
DISPLAY nombre LINE 6 POSITION 2 7
DISPLAY alumnos−editado LINE 7 POSITION 2 7
DISPLAY p r o f e s o r LINE 8 POSITION 2 7 .