cobol

February 24, 2019 | Author: erickhormazabal | Category: Compiler, Computer File, Computer Program, Array Data Structure, Programming Language
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF