cobol
Short Description
Download cobol...
Description
Programación Programación II
Introducción al cobol.
Universidad de Valladolid Departamento de Inform´ atica atica Versi´on on 1.5.F LiX // ´ E
´ Indice General
i
´ Indice General 1 Un poc poco o de his histo tori ria a
1
2 Ut Utili iliza zaci ci´ o on ´n de nuestro laboratorio
1
3 Pri Prime meros ros elem elemen entos tos sin sint´ t´ acticos acticos
3
3.1 3.1 3.2 3.33 3. 3.44 3.
El pr prim imer er pro progra grama ma . Declaran Decl arando do varia ariable bless Datos Da tos ed edit itado adoss . . . Entr En trada ada y sa sali lida da . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
4 Se Sen nte tenc ncia iass
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
4 5 5 7 7
5 Es Estru tructu cturas ras de con contro troll
12
6 Ot Otro ross tipos tipos de dat datos os
12
6.1 6.1 6.22 6.
Regist Regi stro ross . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Vec ector tores es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7 Progr Programas amas distr distribuid ibuidos os en varios varios fiche ficheros ros
14
8 Proc Proces esam amien iento to de fich fichero eross
16
8.1 Fichero Ficheross sec secuenc uencial iales es . . . . . . . . . . . . . . . . . . . . . . . 16 8.22 Ape 8. Apertu rtura ra y cie cierre rre de de fiche ficheros ros . . . . . . . . . . . . . . . . . . . 19 8.3 Coma Comandos ndos para el proces procesoo de fic fichero heross . . . . . . . . . . . . . . 19 9 Fic Ficher heros os ind indexa exados dos
9.11 9.
23
Decla Dec lara raci ci´ o´n de ficheros indexados . . . . . . . . . . . . . . . . 23 on
10 Comandos para el proceso de ficheros indexados
23
´ Indice General
iii
´ Indice de listados 1 2 3 4 5 6 7 8 9 10 11 12 13 14
El t´ıpico hola mundo en cobol. . . . . . . . . . . Definici´on de variables no editadas. . . . . . . . . Completando el programa anterior . . . . . . . . Un ejemplo de entrada y salida. . . . . . . . . . . Ejemplo de uso de algunas estructuras de control. Lectura de datos sobre un registro. . . . . . . . . Definici´on de vectores. . . . . . . . . . . . . . . . Programa que llama a otro. . . . . . . . . . . . . Programa llamado por otro. . . . . . . . . . . . . Lectura de un fichero . . . . . . . . . . . . . . . . Escritura de un fichero . . . . . . . . . . . . . . . Modificaci´ on de un fichero . . . . . . . . . . . . . Ejemplo de creaci´ on de un fichero indexado. . . . Ejemplo de b´ usqueda sobre un fichero indexado. .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
4 6 8 10 13 15 16 17 17 20 21 22 25 26
´ Indice de figuras 1 2 3 4 5 6 7 8 9
Esquema de los sistemas utilizados para las pr´ acticas . . . . Plantilla de programaci´ on en cobol . . . . . . . . . . . . . S´ımbolos utilizados en la plantilla de definici´ on de variables . Nombres simb´olicos utilizables para dar valor a las variables. M´as s´ımbolos utilizados en las plantillas. . . . . . . . . . . . Diferentes salidas para variables editadas y no editadas . . . Opciones para entrada y salida. . . . . . . . . . . . . . . . . Algunas sentencias b´ asicas en cobol . . . . . . . . . . . . . Estructuras de control. . . . . . . . . . . . . . . . . . . . . .
. 2 . 3 . 5 . 6 . 7 . 9 . 9 . 11 . 14
1 Un poco de historia
1
Este documento es una introducción al cobol pensada para ayudar a los alumnos de Ingeniería Técnica en Informática de Gestión matriculados en Programació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 asignatura.
1
Un poco de historia
nace en 1951, alentado por el Pent´ a gono de los ee.uu. para facilitar la administraci´on 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´ asicos de sus dise˜ nadores, 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´ omicos de algunos diarios. Algunos de los inconvenientes del cobol vienen precisamente de su longevidad. Aunque el est´andar ansi va cambiando con el tiempo e incorporando capacidades nuevas, no hay que perder de vista que los compiladores deber´ an ser compatibles con los diversos est´andares del mercado, por ejemplo: cobol
cobol
on estable. 61 Primera versi´
cobol
on estandar. 69 Primera versi´
cobol
nadido PERFORM . 74 A˜
cobol
nadidos los bloques estructurados. 85 A˜
cobol
nadidas capacidades OO y de manejo de ventanas. 97 A˜
2
Utilizaci´ on de nuestro laboratorio
Para las pr´ acticas de la asignatura se utilizan duero y las estaciones de trabajo sun localizadas en el laboratorio 1l104. La configuraci´ o n utilizada es la recogida en la figura 1 de la que cabe resaltar que, gracias a la utilizaci´ on de nis+ y nfs, no son necesarias cuentas adicionales ni entrar siempre en la misma estaci´ on de trabajo para conservar los ficheros fabricados. Universidad de Valladolid
Dpto. de Informática
2
Introducci´ o n al
cobol.
Sun Enterprise 450 (4 procesadores Ultra Spark 250Mh) nfs: Sistemas de ficheros nis+: Sistema de autorización de acceso
en red (/home /usr/local)
1L104. 24 Sun Ultra 1
Figura 1: Esquema de los sistemas utilizados para las pr´acticas El compilador utilizado es Object cobol for unix de MicroFocus Versi´ on 4.1. Una sesi´on t´ıpica de edici´on compilaci´on y ejecuci´ on puede ser algo como lo siguiente: vi Hola.cbl # edici´ on. Fabricamos Hola.cbl cob Hola.cbl # compilaci´on. Fabricamos Hola.int y Hola.lst cobrun Hola # ejecuci´on rm *.int *.lst # S´ o lo es preciso guardar el c´odigo fuente.
El compilador puede tambi´ en fabricar ficheros directamente ejecutables, sin embargo no es recomendable abusar de ellos por su tama˜ no. Tambi´en por las limitaciones de espacio en disco, y puesto que no es necesario almacenar en el sistema m´as que el c´odigo fuente de los programas, es interesante utilizar ´ordenes como la siguiente al final de cada sesi´ on de trabajo para eliminar ficheros innecesarios. find $HOME -name "*.int" -print -exec rm \{\} \;
En la p´agina de consejos para el uso del laboratorio presentamos un ejemplo de alias que simplifica este proceso. Tambi´en es posible utilizar editores de texto distintos a la versi´ on estandar como pueden ser vim, versi´on mejorada de vi que permite el coloreado de la sint´ axis de cobol, la utilizaci´on de ventanas gr´ aficas con el par´ ametro -g, o la informacion sobre n´ umero de l´ınea y columna del cursor con la opci´ on set ru, o dtpad (editor al estilo del notepad de windows). Universidad de Valladolid
Dpto. de Informática
3 Primeros elementos sint´ acticos
Figura 2: Plantilla de programaci´on en
3
3
cobol
Primeros elementos sint´ acticos Los programas cobol est´an estructurados seg´ un el siguiente esquema:
• El programa se compone de divisiones. • cada divisi´ on se compone de secciones. on se compone de p´arrafos • cada secci´
• cada p´arrafo se compone de sentencias. Una de las caracter´ısticas m´ as sorprendentes del cobol es el significado distinto de los caracteres en funci´ o n de su situaci´ on en la l´ınea, herencia directa de un tiempo en que los ordenadores le´ıan los programas de tarjetas perforadas, y los programadores utilizaban hojas de codificaci´ on como la recogida en la Figura 2. El significado posicional es el siguiente:
• Primeros 6 caracteres.- Identificaci´ on de p´ agina y l´ınea. Universidad de Valladolid
Dpto. de Informática
4
Introducci´ o n al
cobol.
• Car´acter 7.- Indicador de l´ınea de comentario o continuaci´ on de la anterior (* o -). • Caracteres de 8 a 11.- Comienzo de divisi´on, secci´on, identificaci´on de m´odulo, identificaci´ on de nivel y n´ umero de nivel (77 y 01). odigo de la l´ınea. • Caracteres 12 a 72.- C´
3.1
El primer programa
El programa cobol se fracciona en cuatro divisiones: IDENTIFICATION DIVISION.
Identificaci´ on del programa, autor,. . .
Identificaci´ on de conceptos que dependen de un ordenador en concreto.
ENVIRONMENT DIVISION.
DATA DIVISION.
Definici´on de los datos del programa.
PROCEDURE DIVISION.
Parte ejecutable del programa.
Aunque no todas estas secciones son obligatorias, lo normal es que cualquier programa tipo contenga las cuatro. El t´ıpico “hola mundo” en cobol tendr´a el aspecto recogido en el listado 1. IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ Ejemplos de programación en COBOL para la ∗ ∗ a s i g n a t u r a P ro gr am ac ió n I I ( G es t ió n ) ∗ ∗ E l t í p i c o " H ol a mundo " ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ PROGRAM −ID . Hola−mundo . AUTHOR . P r o f es o r es de P ro gr am ac ió n I I . ∗ DATA DIVISION . ∗ PROCEDURE DIVISION . princip al . DISPLAY QUOTES " Hola mundo ! " QUOTES STOP RUN .
Listado 1: El t´ıpico hola mundo en Universidad de Valladolid
cobol.
Dpto. de Informática
3.2
Declarando variables
9 V P S X A
5
D´ıgito decimal. Punto decimal. D´ıgito siempre cero. Signo del n´ umero, si existe. Cualquier car´ acter. Car´acter alfab´etico.
Figura 3: S´ımbolos utilizados en la plantilla de definici´ on de variables Ahora el programa se compila con el comando cobol y, si no contiene errores, se puede ejecutar con cobrun. La compilaci´on genera un listado con los posibles errores (extensi´ on lst) y un “preejecutable” con extensi´ on int.
3.2
Declarando variables
En cobol hay que declarar las variables que van a ser utilizadas. Para ello disponemos de la WORKING-STORAGE SECTION dentro de la DATA DIVISION . Una declaraci´ on de variable simple tiene la forma: 77
PIC
[ VALUE
]
[ ]
En cobol no disponemos de tipos de datos en un sentido moderno, a cambio se declara la “plantilla” que seguir´ an los datos. As´ı en lugar de un tipo entero deberemos formar una plantilla con varias cifras decimales. Para definir las plantillas podemos utilizar los s´ımbolos recogidos en la figura 3. Adem´as los caracteres repetidos pueden abreviarse a˜ nadiendo tras el caracter un n´ umero de repeticiones entre par´entesis. Algunos ejemplos de declaraciones pueden verse en el fragmento de programa 2. Para dar valores a las variables disponemos de algunos nombres simb´ olicos como los recogidos en la figura 4.
3.3
Datos editados
En cobol adem´as de las variables normales disponemos de variables editadas. La diferencia est´ a en que, en el caso de las variables editadas, utilizamos en su plantilla algunos caracteres especiales que ser´ an interpretados de forma especial en entrada y salida de datos. La t´ecnica habitual es la definici´on de un par de variables para cada dato que entra o sale del sistema. Una de las variables no es editada y se utiliza Universidad de Valladolid
Dpto. de Informática
6
Introducci´ o n al
cobol.
IDENTIFICATION DIVISION .
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ Ejemplos de programación en COBOL para la ∗ ∗ a s i g n a t u r a P ro gr am ac ió n I I ( G es t ió n ) ∗ ∗ E je mp lo s de a s ig n ac i on e s con move y p l a n t i l l a s ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ PROGRAM −ID . mascaras. AUTHOR . P r o f es o r es de P ro gr am ac ió 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 . 77 a1 PIC 9 9 9 9 VALUE IS 2 5 . 77 b1 PIC S99V99 VALUE IS 3 . 1 4 . 7 7 c 1 PIC 9 ( 6 ) VALUE IS 100197. 77 d1 PIC 9 ( 9 ) V 9 9 VALUE IS 1 2 3 4 5 6 7 . 8 9 . 77 e1 PIC AA9(4)AA VALUE IS "VA0001A" . 7 7 f 1 PIC 99PPP VALUE IS 9 0 0 0 . 77 g1 PIC VPPP99 VALUE IS 0 . 0 0 0 1 1 .
Listado 2: Definici´ on de variables no editadas.
ZERO ZEROES SPACE SPACES QUOTE QUOTES
Valor cero. Rellenar con ceros. Espacio en blanco. Rellenar con blancos. Comillas. Comillas.
Figura 4: Nombres simb´olicos utilizables para dar valor a las variables.
Universidad de Valladolid
Dpto. de Informática
3.4
Entrada y salida
B 0 / . , Z +
7
Inserta un blanco en la salida. Inserta un cero en la salida. Inserta una barra en la salida. Inserta un punto en la salida alineando las cifras. Inserta una coma en la salida alineando las cifras. Si el d´ıgito es un cero a la izquierda, un blanco. Como Z, pero adem´ as el signo menos si es necesario. Como -, pero siempre escribe el signo. Figura 5: M´as s´ımbolos utilizados en las plantillas.
en las operaciones internas, la otra es editada y s´ olo se usa para entradas y salidas. La tabla de la figura 3 se completa con la figura 5 mientras que el fragmento de programa 2 contin´ ua en 3.
3.4
Entrada y salida
Los comandos utilizados para la entrada y salida son respectivamente ACCEPT y DISPLAY . Para ambos comandos existen m´ ultiples opciones, muchas de las cuales son espec´ıficas de cada versi´ on del compilador. Algunas opciones muy habituales est´ an recogidas en la figura 7, donde algunas de las funciones especiales pueden ser DATE para la fecha DAY para el n´ umero de d´ıas desde el 1 de enero de 1990 o TIME la hora en formato hh mm ss cc. Adem´as, las opciones marcadas deben ir precedidas de WITH. En el listado 4 presentamos un ejemplo de la utilizaci´ on de ´estas sentencias con varias opciones, sin embargo para comprenderlo completamente necesitamos explicar el funcionamiento de algunas sentencias cobol y la forma en que se definen registros en este lenguaje.
4
Sentencias
El resumen de las sentencias utilizadas en cobol aparece en la figura 8. Sobre ellas deberemos hacer algunos comentarios:
• En cobol no tenemos restricciones de tipo como en Pascal o C, de modo que toda asignaci´on tiene sentido, sin embargo en algunas de ellas perderemos informaci´ on. En general la norma es que las variables Universidad de Valladolid
Dpto. de Informática
8
Introducci´ o n al
77 77 77 77 77 77 77
a2 b2 c2 d2 e2 f2 g2
PIC PIC PIC PIC PIC PIC PIC
cobol.
Z,ZZ9. −−− .−− . ZZ/ZZ/ZZ. ZZZ,ZZZ,ZZZ.Z. AAB9(4)BAA. ZZZZ9 . Z.ZZZZZ.
∗ PROCEDURE DIVISION .
princip al . ∗ A si g na ci ó n e n t r e v a r i a b l e s e d i ta d a s y no e d i ta 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 t o da s 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
Listado 3: Completando el programa anterior
Universidad de Valladolid
Dpto. de Informática
4 Sentencias
9
0025 25 0314+ 3.14 100197 10/01/97 00123456789 1,234,567.8 VA0001A VA 0001 A 09 9000 11 .00011
Figura 6: Diferentes salidas para variables editadas y no editadas
AT LINE num[POSITION WITH SIZE
num] localizaci´on de la salida. IS num Tama˜ no m´aximo de la salida.
Borra hasta final de l´ınea o pantalla. WITH HIGHLIGHT | LOWLIGHT Negrita o normal. WITH REVERSE-VIDEO Video inverso. PROMPT [CHARACTER IS CAR] Rellena el campo con caracter FROM función o dispositivo Entrada de dispositivo o de funciones del sistema. WITH ERASE EOL | EOS
WITH
Figura 7: Opciones para entrada y salida.
Universidad de Valladolid
Dpto. de Informática
10
Introducci´ o n al
cobol.
IDENTIFICATION DIVISION . ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la a s i g n a t u r a P r og r am ac ió n I I ( G e st i ó n ) Un e je mp lo de e n tr a da y s a l i d a
∗ ∗ ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM −ID . AUTHOR .
a lu mn o . P r o f e so r e s d e P r og r am ac ió 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 ) . 77 nombre PIC X ( 3 0 ) . ∗
PROCEDURE DIVISION.
principa l . PERFORM
cabecera
PERFORM leer −alumno DISPLAY " L e ct u r a f i n a l i z a d a STOP RUN .
" LINE 1 0 POSITION 10
cabecera . " U n i v e r si d a d de V a l l a d o l i d " LINE 1 POSITION 2 7 "−−−−−−−−−−−−−−−−−−−−−−−−− " 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 d a t os d e l a lu mn o " 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 12 ACCEPT nombre LINE 6 POSITION 1 2 WITH PROMPT CHARACTER IS ’ ∗ ’ END−ACCEPT. DISPLAY DISPLAY
Listado 4: Un ejemplo de entrada y salida.
Universidad de Valladolid
Dpto. de Informática
4 Sentencias
11
on. • Sentencia de asignaci´
MOVE
VALOR
TO
VARIABLE
• Sentencia de c´ alculo
VAR [ROUNDED] = EXPRESIÓN [ON SENTENCIA] END-COMPUTE
COMPUTE ERROR
SIZE
• Sentencias aritm´eticas
VALOR TO VARIABLE SUBTRACT VALOR FROM VARIABLE MULTIPLY VALOR BY VARIABLE DIVIDE VALOR INTO VARIABLE DIVIDE VALOR1 BY VALOR2 GIVING VARIABLE1 [ MAINDER VARIABLE2 ] ADD
RE-
• Sentencia PERFORM.
PERFORM párrafo
Figura 8: Algunas sentencias b´asicas en
Universidad de Valladolid
cobol
Dpto. de Informática
12
Introducci´ o n al
cobol.
de caracteres se ajustan a la derecha, mientras que las num´ericas lo hacen en torno al punto decimal.
• La sentencia COMPUTE suele utilizarse en caso de expresiones complejas, puesto que en estos casos las sentencias aritm´eticas resultan demasiado tediosas. En la expresi´ o n de COMPUTE podemos utilizar los s´ımbolos aritm´eticos habituales (** para la potencia); la clausula ON SIZE ERROR permite ejecutar cierta sentencia cuando se produce un error aritm´etico. Esta clausula tambi´en es opcional en todas las sentencias aritm´eticas. arrafo de este mismo pro• La sentencia PERFORM permite ejecutar un p´ grama. Adem´as disponen de una sentencia CALL que les permite llamar a otro programa (ver secci´ on 7).
5
Estructuras de control
Para la utilizaci´on de estructuras de control en condicionales de dos tipos:
cobol
podemos utilizar
• Operadores relacionales.
valor1
[NOT] [IS] >|=|<
valor2
• Comprobaci´on de “tipo”.
valor1
IS [NOT] NUMERIC|ALPHABETIC
Utilizando estas condiciones podemos emplear las estructuras de control recogidas en la figura 9, como se hace en el listado 5 cuya salida ser´ıa interesante determinar.
6
Otros tipos de datos
Evidentemente en cobol adem´as de los datos simples podemos utilizar otros tipos de datos. Para empezar en cobol podemos utilizar constantes simb´ olicas, pero a diferencia de Pascal su significado se restringe al valor de una variable. As´ı en el programa 4 definimos dos constantes simb´olicas para denotar el sexo. En cobol a estas constantes se les denomina nombres de condici´ on. Adem´as de VALUE IS podemos utilizar VALUES ARE seguido de varios valores. Universidad de Valladolid
Dpto. de Informática
6 Otros tipos de datos
13
IDENTIFICATION DIVISION . ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la a s i g n a t u r a P r og r am ac ió n I I ( G e st i ó n ) E je mp lo 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 . AUTHOR .
e c o n t ro l . P r o f e so r e s d e P r og r am ac ió n I I .
∗
DATA DIVISION . WORKING−STORAGE SECTION. 7 7 l i n e a PIC 9 9 VALUE IS PROCEDURE DIVISION.
5.
principa l . comprobacion1 comprobacion2 PERFORM bucle1 PERFORM bucle2 PERFORM bucle3 STOP RUN . comprobacion1 . IF l i n e a > = 5 DISPLAY " ∗∗∗ Comprobación 1 END−IF . PERFORM PERFORM
∗∗ ∗
"
comprobacion2 . EVALUATE l i n e a WHEN 5 DISPLAY " ∗∗∗ Comprobación 2 ∗∗∗ " WHEN OTHER DISPLAY "NO FUNCIONA" END−EVALUATE . bucle1 . DISPLAY " ∗∗∗ P r im e r b u c le ∗∗ ∗ " 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 P r im er b u cl e ∗∗ ∗ " . bucle2 . MOVE 5 TO l i n e a DISPLAY " ∗∗∗ Segundo bucl 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 S eg un do b u c l e ∗∗ ∗ " . bucle3 . DISPLAY " ∗∗∗ T e r ce r b u c le ∗∗ ∗ " 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 er c er b u cl e ∗∗ ∗ " .
Listado 5: Ejemplo de uso de algunas estructuras de control.
Universidad de Valladolid
Dpto. de Informática
14
Introducci´ o n al
cobol.
condicion [THEN] {sentencia} [ELSE {sentencia}] END-IF
•
IF
•
EVALUATE
var { WHEN caso {sentencia}}[ WHEN
OTHER {sentencia}]
END-EVALUATE
condicion {sentencia} END-PERFORM
•
PERFORM UNTIL
•
PERFORM WITH TEST AFTER UNTIL
condicion {sentencia}
END-
PERFORM
•
PERFORM VAYRING
var
tencia} END-PERFORM
FROM
valor1 by paso
UNTIL
condicion {sen-
Figura 9: Estructuras de control.
6.1
Registros
En cobol podemos declarar variables estructuradas. Utilizamos para ello un n´ umero de nivel 01 en la zona b de la l´ınea y n´ umeros de nivel m´as altos para los niveles m´as 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 repiten. As´ı podemos realizar varios tipos de declaraci´ on de vectores como los recogidos en el programa de la figura 7.
7
Programas distribuidos en varios ficheros
Para la utilizaci´on de subprogramas con par´ ametros, cobol dispone de la posibilidad de compilar los subprogramas en ficheros diferentes y llamarlos mediante el comando CALL. En este caso el subprograma contiene la definici´o n de los par´ ametros formales en la LINKAGE SECTION que aparece en la DATA DIVISION despu´es de la WORKING STORAGE SECTION . Un Universidad de Valladolid
Dpto. de Informática
7 Programas distribuidos en varios ficheros
15
IDENTIFICATION DIVISION . ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la a s i g n a t u r a P r og r am ac ió n I I ( G e st i ó n ) Un e j em p lo más c o mp l ic a do de e n t r ad a y s a l i d a , con u t i l i z a c i ó n de u n r e g i s t r o .
∗ ∗ ∗ ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM −ID . AUTHOR .
registro . P r o f e so r e s d e P r og r am ac ió n I I .
∗
DATA DIVISION . WORKING−STORAGE SECTION.
01 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 ) . 02 nombre PIC X ( 3 0 ) . 02 sexo PIC X . 88 hombre VALUE IS "H" . 8 8 m u j e r VALUE IS "M" . ∗
PROCEDURE DIVISION.
principa l . cabecera leer −alumno " L e ct u r a f i n a l i z a d a " LINE 1 0 POSITION 10 STOP RUN . cabecera . DISPLAY " U n i v e r si 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 d a t os d e l a lu mn o " 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 in co rr ec to " 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 . PERFORM PERFORM DISPLAY
Listado 6: Lectura de datos sobre un registro.
Universidad de Valladolid
Dpto. de Informática
16
Introducci´ o n al
cobol.
IDENTIFICATION DIVISION . ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la a s i g n a t u r a P r og r am ac ió n I I ( G e st i ó n ) D e f i n i c i ó n de v e c to r e s .
∗ ∗ ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM −ID . AUTHOR .
Vectores . P r o f e so r e s d e P r og r am ac ió n I I .
∗
DATA DIVISION . WORKING−STORAGE SECTION.
01 vector . 02 elemento PIC 9 9 OCCURS 1 0 TIMES . 01 matriz . 02 f i l a OCCURS 1 0 TIMES . 03 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 votos . 7 7 v o t o s PIC 9 9 . PROCEDURE DIVISION. principa l . MOVE 1 0 TO v o t o s MOVE 1 0 TO e l e m e n t o ( 5 ) MOVE "X " TO c ol um na ( 2 , 3 ) MOVE "X " TO v o t o ( 6 ) STOP RUN .
Listado 7: Definici´ on de vectores. ejemplo elemental de esta forma de trabajo es el recogido en los listados 8 y 9. Por defecto el paso de par´ ametros se realiza por variable, de modo que si se desea el paso de par´ ametros por valor hay que a˜ nadir el modificador BY CONTENT a la llamada al subprograma.
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 (ficheros de acceso relativo). En las siguientes secciones veremos las declaraciones y comandos necesarios para utilizarlos.
8.1
Ficheros secuenciales
Se trata del esquema de acceso m´ as sencillo, heredado directamente de los tiempos de las lectoras de tarjetas, y con el que debemos estar familiarizados, pues suele ser utilizado en la asignatura Programaci´ on I. Los ficheros secuenciales deber´ an ser declarados como el resto de los datos. Universidad de Valladolid
Dpto. de Informática
8.1
Ficheros secuenciales
17
IDENTIFICATION DIVISION . ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la a s i g n a t u r a P r og r am ac ió n I I ( G e st i ó n ) P ro gr am a q u e l l a m a a u n s u b pr og r am a e x t e r n o
∗ ∗ ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM −ID . l l a ma . AUTHOR . P r o f e so r e s
d e P r og r am ac ió 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.
principa l . DISPLAY
" Primer sumando=" WITH NO ADVANCING
ACCEPT a DISPLAY "
Segundo sumando=" WITH NO ADVANCING
ACCEPT b CALL " l l a m a d o " USING MOVE c TO r e s u l t a d o DISPLAY " STOP RUN .
a,b,c
La suma e s " r e s u l t a d o
Listado 8: Programa que llama a otro.
IDENTIFICATION DIVISION. ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de ´oprogramacin en COBOL para la asignatura o ´Programacin II (´ oGestin) ∗ oMdulo llamado por otro programa. ´ ∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM−ID. llamado. AUTHOR. Profesores de o ´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.
Listado 9: Programa llamado por otro.
Universidad de Valladolid
Dpto. de Informática
18
Introducci´ o n al
cobol.
Una parte de la declaraci´ on deber´ a realizarse en la ENVIRONMENT DIVISION., dedicada a los detalles de la interfaz del fichero como nombre f´ısico, tipo de organizaci´ on y acceso. La otra parte de la declaraci´ on se almacena en la DATA DIVISION. y se dedica a los detalles l´ogicos como la descripci´on de los registros del fichero. Declaraciones de la ENVIRONMENT DIVISION
El esquema de esta di-
visi´on ser´a: ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT [OPTIONAL]
nombre
ASSIGN TO
literal
[ORGANIZATION SEQUENTIAL] [ACCESS SEQUENTIAL] [FILE STATUS IS
nombre de dato].
La principal funci´ on de esta declaraci´ on es asignar un nombre l´ogico a un nombre f´ısico. Adem´ a s podemos indicar el tipo de organizaci´ o n, por defecto secuencial, y el tipo de acceso, tambi´en secuencial por defecto. La clausula OPTIONAL se utiliza para ficheros de escritura que pueden no existir inicialmente (ser´ an creados en lugar de provocar un error), y la clausula FILE STATUS nos permite seleccionar el dato que nos informar´ a sobre el estado del fichero tras cada lectura utilizando una clave de dos d´ıgitos. Declaraciones de la DATA DIVISION
En esta divisi´on la declaraci´ on de
los ficheros responde al siguiente esquema: DATA DIVISION. FILE SECTION. FD
nombre del archivo DATA RECORD IS
01
nombre.
nombre. y la declaración de registro al uso
Hay que se˜ nalar que nombre es el nombre del registro de datos del fichero, y l´ogicamente debe ser el mismo en los dos puntos en que aparece. Adem´ as en la definici´ on del registro puede aparecer como nombre de campo FILLER que indica que este campo no se utilizar´a en la PROCEDURE DIVISION o lo que es lo mismo, que este campo no ser´a utilizado en el proceso del fichero; simplemente se trata de una forma de protegernos de la utilizaci´ on o modificaci´on de estos campos. Universidad de Valladolid
Dpto. de Informática
8.2
Apertura y cierre de ficheros
8.2
19
Apertura y cierre de ficheros
Antes de utilizar el fichero deberemos de abrirlo con el comando OPEN mientras que tras su uso hay que cerrarlo con CLOSE. Para OPEN disponemos de algunos par´ ametros opcionales que determinan el tipo de acceso con el que se abre el fichero: OPEN OPCION FICHERO Abre el fichero CLOSE FICHERO Cierra el fichero
Opciones de open INPUT OUTPUT I-O EXTEND
Fichero de entrada. Fichero de salida. Fichero de entrada/salida. Fichero de salida, a˜nadiendo registros.
Lectura y escritura READ fichero [ AT END sentencia] WRITE registro 8.3
Comandos para el proceso de ficheros
Para leer de un fichero abierto con par´ ametro
nombre de archivo RECORD [ AT END sentencia]
READ
[INTO
INPUT
o
I-O
utilizamos:
nombre de dato]
Si no se indica el registro opcional el dato le´ıdo se almacenar´ a bajo el nombre de registro que da forma a los registros del archivo. Adem´ as la clausula opcional AT END nos permite prever alguna acci´ on a realizar cuando se termine el fichero (t´ıpicamente poner a cierto una marca de final de fichero). Hay que resaltar que en cobol la marca de fin de fichero se obtiene tras haber intentado leer de un fichero vac´ıo, al contrario de lo que ocurre en Pascal. Para escribir sobre un archivo secuencial abierto con el par´ ametro OUPUT, I-O o EXTEND utilizaremos el comando: WRITE
nombre de registro
[FROM
nombre de dato]
El dato se almacena en el fichero en cuya definici´ on se utiliz´o el nombre de registro y, opcionalmente, se saca del registro que sigue a FROM . Por u´ltimo podemos modificar el u´ltimo registro le´ıdo de un fichero, para ello utilizaremos: REWRITE
nombre de registro
[FROM
nombre de dato]
Con estos elementos podemos realizar programas sencillos como los recogidos en los listados 10, 11 o 12 que utilizan ficheros secuenciales: Universidad de Valladolid
Dpto. de Informática
20
Introducci´ o n al
cobol.
IDENTIFICATION DIVISION . ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la a s i g n a t u r a P r og r am ac ió n I I ( G e st i ó n ) L e ct u r a de un f i c h e r o s e c ue n c ia l .
∗ ∗ ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM −ID . AUTHOR .
lectura . P r o f e so r e s d e P r og r am ac ió n I I .
∗
ENVIRONMENT DIVISION . INPUT−OUTPUT SECTION. FILE−CONTROL . SELECT e n t r a d a ASSIGN TO " alumnos . ORGANIZATION IS SEQUENTIAL
dat "
ACCESS IS SEQUENTIAL. ∗
DATA DIVISION . FILE SECTION . FD
entrada
DATA RECORD IS alumno . 01 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 ) . 02 nombre PIC X ( 1 0 ) . 02 sexo PIC X . 88 hombre VALUE IS "H" . 8 8 m u j e r 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. principa l . 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 si d a d d e V a l l a d o l i d " LINE 1 POSITION 2 7 " LINE 2 POSITION 2 7 DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−− 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 . e s c r i b i r −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 13 DISPLAY nombre LINE l i n e a POSITION 2 4 DISPLAY sexo LINE l i n e a POSITION 3 5 .
Listado 10: Lectura de un fichero Universidad de Valladolid
Dpto. de Informática
8.3
Comandos para el proceso de ficheros
21
IDENTIFICATION DIVISION . ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la ∗ a s i g n a t u r a P r o gr a m ac i ó n I I ( G e s t i ón ) ∗ E s c ri b i m os e l p r i m e r f i c h e r o s e c u e n c ia l . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM − ID . m o d i f i c a c i o n . AUTHOR . P r o fe s o r es d e P r o gr a ma c ió n
II .
∗
ENVIRONMENT DIVISION . INPUT− OUTPUT SECTION . FILE− CONTROL . SELECT s a l i d a ASSIGN TO "alumnos. dat " ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL. ∗
DATA DIVISION . FILE SECTION . FD s a l i d a DATA RECORD IS
alumno. 01 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 ) . 02 nombre PIC X ( 1 0 ) . 02 sexo PIC X. 88 hombre VALUE IS "H" . 8 8 m u j e r VALUE IS "M" . WORKING− STORAGE SECTION. 7 7 r e s p u e s t a PIC X VALUE IS "S" . 8 8 n o− mas − registros VALUES ARE " N" , " n " . PROCEDURE DIVISION.
principa l . 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 10 ACCEPT r e s p u 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 DISPLAY DISPLAY
" U n i v e rs i d a d d e V a l l a d o l i d " LINE 1 POSITION 27 "−−−−−−−−−−−−−−−−−−−−−−−−− " LINE 2 POSITION 27 " " 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 d a to s d e l a lu mn o " LINE 3 POSITION 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 .
1
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 : E n tr a da 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 MOVE MOVE MOVE
SPACE SPACE SPACE SPACE
TO TO TO TO
apellido1 apellido2 nombre sexo.
Listado 11: Escritura de un fichero
Universidad de Valladolid
Dpto. de Informática
22
Introducci´ o n al
cobol.
IDENTIFICATION DIVISION. ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la ∗ a s i g n a t u r a P r o gr a m ac i ó n I I ( G e s t i ó n ) ∗ M o d i f i c a c i o n d e u n f i c h e r o s e c u e n ci a l . ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM − ID . l e c t u r a . AUTHOR . P r o fe s o r es d e
P r o gr a ma c ió n I I .
∗
ENVIRONMENT DIVISION . INPUT− OUTPUT SECTION . FILE− CONTROL . SELECT f i c h e r o ASSIGN TO "alumnos. dat " ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL. ∗
DATA DIVISION . FILE SECTION . FD f i c h e r o DATA RECORD IS
alumno. 01 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 ) . 02 nombre PIC X ( 1 0 ) . 02 sexo PIC X. 88 hombre VALUE IS "H" . 8 8 m u j e r VALUE IS "M" . WORKING− STORAGE SECTION. 7 7 f i n PIC X VALUE "N" . 8 8 f i n − de − fichero VALUE IS "S" . PROCEDURE DIVISION. principa l . OPEN I−O f i c h e r o PERFORM cabecera PERFORM leer− alumno PERFORM UNTIL fi n − 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 rs i d a d d e V a l l a d o l i d " LINE 1 POSITION 27 DISPLAY "−−−−−−−−−−−−−−−−−−−−−−−−− " LINE 2 POSITION 27 DISPLAY " P r o ce d o a l c a mb i o d e s e xo d e l o s a l um no s . . . " LINE 5 POSITION 10 − DISPLAY "Cambio de sexo efectuado ." LINE 6 POSITION 1 0 . leer− alumno . READ f i c h e r o AT END MOVE "S " TO f i n . cambiar − sexo − alumno. IF hombre THEN MOVE ELSE MOVE END−IF .
"M" TO sexo "H" TO sexo
r e e s c r i b i r− alumno . REWRITE alumno.
Listado 12: Modificaci´ on de un fichero
Universidad de Valladolid
Dpto. de Informática
9 Ficheros indexados
9
23
Ficheros indexados
Los ficheros indexados est´ a n formados por uno o m´as ficheros de ´ındice 1 y un fichero de datos . El acceso a estos ficheros puede realizarse de forma secuencial o bien a trav´es del ´ındice.
9.1
Declaraci´ on de ficheros indexados
La declaraci´ on de ficheros indexados solo var´ıa con respecto de la declaraci´on de ficheros secuenciales en la parte situada en la ENVIRONMENT DIVISION . Su nuevo aspecto es el siguiente: ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT
nombre
ASSIGN TO
literal
ORGANIZATION INDEXED
[ ACCESS SEQUENTIAL | RANDOM | DYNAMIC]
nombre de dato 1 RECORD KEY IS nombrededato2[ WITH
RECORD KEY IS
[ ALTERNATE
DUPLICATES]]
La declaraci´ o n en la DATA DIVISION es la misma que para un fichero secuencial. El tipo de acceso declarado indicar´ a si en ejecuci´ on se puede acceder de forma secuencial, mediante ´ındice o si se puede variar din´ amicamente entre ambos tipos de acceso. Pueden aparecer varias claves alternativas, y en su declaraci´on aparecer´ a indicado si pueden existir varios registros con la misma clave o no. En todo caso la clave principal no admite registros duplicados.
10
Comandos para el proceso de ficheros indexados
La lectura mediante ´ındice se realiza mediante la orden:
•
FICHERO RECORD [KEY IS CAMPO] [INVALID KEY SENTENCIA] Busca en el fichero el registro que tiene por clave el valor READ
1
Aunque en funci´ on de la implementaci´on concreta que se haga del compilador, estos ficheros pueden constitu´ır un u ´nico fichero f´ısico
Universidad de Valladolid
Dpto. de Informática
24
Introducci´ o n al
cobol.
almacenado en el campo correspondiente del registro asociado al fichero. Si no existe ejecuta la sentencia opcional. Si no se indica clave, se utiliza la principal.
REGISTRO
•
WRITE
•
DELETE
•
REWRITE
•
START
FICHERO
RECORD [INVALID KEY
FICHERO
FICHERO
RECORD [INVALID KEY
KEY IS
EXPRESIÓN
SENTENCIA ] SENTENCIA]
[INVALID KEY
CIA] Posiciona el puntero de lectura. FICHERO
•
READ
•
DELETE
•
REWRITE
Universidad de Valladolid
NEXT [AT END
FICHERO
SENTENCIA]
RECORD [INVALID KEY
FICHERO
SENTEN-
RECORD [INVALID KEY
SENTENCIA ] SENTENCIA]
Dpto. de Informática
10 Comandos para el proceso de ficheros indexados
25
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗
Ejemplos de programación en COBOL para la ∗ a s i g n a t u r a P r o gr a m ac i ó n I I ( G e s t i ón ) ∗ C r ea c ió n d e u n f i c h e r o i n de x ad o ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
PROGRAM − ID . c re a− indexado . AUTHOR . P r o fe s o r es d e P r o gr a ma c ió n
II .
∗
ENVIRONMENT DIVISION . INPUT− OUTPUT SECTION . FILE− CONTROL . SELECT s a l i d a ASSIGN TO " Asignatur as . dat " 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
asignatura . 01 asignatura . 02 numero PIC 9 9 9 . 02 nombre PIC X ( 2 0 ) . 02 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" . 88 no− mas− datos VALUE IS "N" . 77 alumnos− editado PIC ZZZ9 . ∗
PROCEDURE DIVISION.
principa l . 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 . " " LINE 1 POSITION 1 ERASE EOS " U n i v er s i d a d d e V a l l a d o l i d " LINE 2 POSITION 27 "−−−−−−−−−−−−−−−−−−−−−−−−− " LINE 3 POSITION 27 " D a to s d e l a a s i g n a t u r a : " LINE 5 POSITION 3 "Número . . . . . . . . . . . . . . . . . " LINE 5 POSITION 3 "Nombre . . . . . . . . . . . . . . . . . " LINE 6 POSITION 3 "N o de alumnos . . . . . . . . . . " LINE 7 POSITION 3 " Profe sor . . . . . . . . . . . . . . . " LINE 8 POSITION 3 . leer− registro . ∗ L i mp i am o s l o s c am po s a n t e s d e 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 ∗ L im pi am os l a z on a d e p a n t a l l a e n q ue s e 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 l a c l a v e p r i n c i p a l , q ue e s c a l c u l a da . ∗ M os tr am os DISPLAY numero LINE 5 POSITION 27 ∗ La l e c t ur 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 27 n úm er o e n u n ca mp o e d i t a d o p a r a e v i t a r ∗ L ee mo s e l c o mp o rt a mi e nt o “ e x t r a ñ o ” e n o t r o c as o . ∗ el ACCEPT alumnos− editado LINE 7 POSITION 2 7 WITH REVERSE−VIDEO MOVE alumnos− editado TO alumnos DISPLAY alumnos− editado LINE 7 POSITION 27 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 . DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY
Listado 13: Ejemplo de creaci´on de un fichero indexado. Universidad de Valladolid
Dpto. de Informática
View more...
Comments