1. curso cobol - sql - program. estruct

Upload: rosa-gainza

Post on 15-Jul-2015

219 views

Category:

Documents


11 download

TRANSCRIPT

CURSO COBOL SQL PROGRAMACION ESTRUCTURADAContenidoOBJETIVOS DEL CURSO...................................................................................2 REQUISITOS GENERALES................................................................................3 TEMARIO........................................................................................................4 3.1 Programacin COBOL........................................................................4 Objetivos....................................................................................... Contenido...................................................................................... Objetivos....................................................................................... Contenido...................................................................................... Objetivos....................................................................................... Contenido...................................................................................... 3.1.1 3.1.2 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 Contenido

Programacin SQL.............................................................................6

Programacin estructurada...............................................................8

1Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

1- OBJETIVOS DEL CURSOUna vez finalizado este curso, el alumno ser capaz de: Planificar e implementar soluciones de tecnologa de informacin en organizaciones privadas y pblicas, as como colaborar en el diseo, construccin y mantenimiento de sistemas informticos y proyectos de software. Aprendizaje bsico del negocio financiero. Aportar los conocimientos necesarios para un programador, en los principales componentes de los diferentes lenguajes de uso financieros. Aprender a interpretar las reglas sintcticas, para programar de manera estructurada y conocer las instrucciones utilizadas. Aprender la terminologa aplicada con respecto, a los componentes de entrada y salida, distintas variables y formacin de estructuras de datos.

2Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

1- REQUISITOS GENERALESPara la realizacin del curso de programacin COBOL, es necesario disponer de un entorno de desarrollo host COBOL/HP-UX/ORACLE en el que se podrn editar, archivar, compilar, linkeditar programas COBOL y ejecutar scripts Shell de UNIX a travs de la herramienta (Utilcan). Adems, cada alumno contar con un PC con el siguiente software instalado. Microsoft Windows XP Professional Service Pack 3 Utilcan Para poder trabajar con esta herramienta, ser necesario que en sistemas nos den de alta el usuario correspondiente en UNIX, que tendr las siglas del nombre del usuario Editor UltraEdit 32 para programacin COBOL Editor Microfocus Net Express ( incluye la posibilidad de compilar programas en local, expandir copys y otras facilidades para la programacin COBOL) Cliente Oracle SQL*Plus Cliente de conexin a SSH al HOST de desarrollo Putty: Cliente SSH WinSCP: Cliente grfico FTP

3Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

1- TEMARIO.a. Programacin COBOL1.1 1.1.1 Objetivos Conocer los principales componentes de un programa COBOL, aprendiendo a interpretar la sintaxis de este lenguaje de programacin, sus reglas sintcticas generales y los requerimientos de su escritura en un procesador de textos. Aprender a estructurar un programa COBOL completo y cules son los criterios de ejecucin. Conocer las instrucciones utilizadas para la programacin COBOL. Utilizar la terminologa empleada con los archivos, los conceptos principales, sus caractersticas, los tipos bsicos y la operativa requerida para su manejo. Aprender a solucionar los problemas con archivos. Conocer los criterios que favorecen la calidad final de los programas en aspectos como: legibilidad, eficiencia, fiabilidad, documentacin, etc. 1.1.1 Contenido 1. Elementos del lenguaje COBOL. 1.1 Constantes figurativas: 1.2 Constantes identificadas por un nombre. 1.3 Identificadores 1.4 Operadores. 1.5 Operadores de relacin, de Lgicos. 1.6 Expresiones aritmticas. 1.7 Orden de ejecucin. 1.8 Expresiones de BOOLE 2. Estructura de un programa Cobol. 2.1 Descripcin General 2.2 Identification division. 2.3 Environment divisin. 3. La divisin DATA 3.1 Introduccin 3.2 Seccin de ficheros, de trabajo. 3.3 Descripcin de una estructura registro. 3.4 Nmero de nivel, Nombre de datos. PICTURE. CAMPOS ALFABTICOS. CAMPOS ALFANUMRICOS. 3.5 CAMPOS NUMRICOS, PICTURE para la edicin, USAGE , VALUE, SIGN, JUSTIFIED, BLANK, OCCURS, REDEFINES. 3.6 Seccin de enlace, de comunicaciones, de informes, de pantalla. 4. La divisin PROCEDURE. 4.1 Sentencias bsicas. 5. Sentencias de control

4Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

6. Cadenas de caracteres. 7. Manipulacin de tablas. 8. Ficheros de entrada y salida. 9. Clasificacin y fusin de ficheros. 10.Comunicacin entre programas. 11.Visualizacin de pantallas.

5Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

a. Programacin SQL1.1 1.1.1 1. Objetivos Crear consultas avanzadas con SQL Crear y modificar la estructura de la base de datos con SQL Crear, actualizar y eliminar registros de una base de datos Automatizar todas las tareas de tratamiento de datos con SQL

2. 3.

4. 5. 6. 7.

1.1.1 Contenido Componentes del SQL 1.1.Lenguaje de definicin de datos (LDD) 1.2.Lenguaje de manipulacin de datos (LMD) 1.3.Tipos de sentencias Tipos de datos Estructuras de las tablas 3.1.Creacin de tablas nuevas 3.2.La clusula constraint 3.3.Creacin de ndices 3.4.Modificar el diseo de una tabla 3.5.Eliminacin 3.6.Vistas 3.7.Operaciones sobre vistas 3.8.Vistas de ms de una tabla Operadores lgicos Consultas bsicas Operadores lgicos Sentencias SQL 7.1.BETWEEN 7.2.COMMIT/ROLLBACK 7.3.CONTAINS 7.4.COUNT 7.5.BORRADO 7.6.DISTINCT 7.7.EXIST 7.8.GROUP BY 7.9.HAVING 7.10.IN 7.11.INSERT INTO 7.12.LIKE 7.13.MAX,MIN 7.14.ORDER BY 7.15.SELECT Y SUBSELECT 7.16.SELECCIN DE COLUMNAS

6Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

7.17.CLUSULA FROM 7.18.CLUSULA WHERE 7.19.SUBCONSULTA 7.20.UNION, UNION ALL 7.21.UPDATE

7Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

a. Programacin estructurada1.1 1.1.1 Objetivos Comprender la justificacin de la programacin estructurada. Conocer en qu consiste la programacin estructurada. Utilizar la programacin estructurada en el diseo de aplicaciones. Mantener mejor las aplicaciones.

1.1.1 Contenido 1. La visin clsica de la programacin estructurada: la programacin sin goto. 2. La visin moderna de la programacin estructurada: la segmentacin. 3. Programacin estructurada y orientacin a objetos.

8Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

COBOL

9Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

Contenido 1- Elementos del lenguaje COBOL............................................................3 Constantes figurativas:............................................................................3 Constantes identificadas por un nombre.................................................3 Identificadores.........................................................................................3 Operadores..............................................................................................3 Operadores de relacin............................................................................4 Operadores de Lgicos............................................................................4 Expresiones aritmticas...........................................................................4 Orden de ejecucin..................................................................................4 Expresiones de BOOLE.............................................................................5 2Estructura de un programa Cobol.........................................................6 Descripcin General.................................................................................6 Identification division...............................................................................6 Environment division...............................................................................6 3La divisin DATA.................................................................................10 INTRODUCCIN......................................................................................10 Seccin de ficheros................................................................................10 Seccin de trabajo.................................................................................10 Descripcin de una estructura registro..................................................10 Nmero de nivel.....................................................................................11 Nombre de datos...................................................................................12 PICTURE.................................................................................................12 CAMPOS ALFABTICOS...........................................................................12 CAMPOS ALFANUMRICOS.....................................................................12 CAMPOS NUMRICOS.............................................................................13 PICTURE para la edicin.........................................................................13 USAGE....................................................................................................14 VALUE....................................................................................................15 SIGN.......................................................................................................15

10Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

JUSTIFIED...............................................................................................15 BLANK....................................................................................................15 OCCURS.................................................................................................16 REDEFINES.............................................................................................16 Seccion de enlace..................................................................................16 Seccin de comunicaciones...................................................................16 Seccin de informes...............................................................................17 Seccin de pantalla................................................................................17 4La divisin PROCEDURE......................................................................18 Introduccin...........................................................................................18 Sentencias bsicas.................................................................................18 567891011Sentencias de control.........................................................................27 Cadenas de caracteres.......................................................................33 Manipulacin de tablas.......................................................................38 FICHEROS DE ENTRADA Y SALIDA.......................................................41 CLASIFICACIN Y FUSIN DE FICHEROS.............................................64 COMUNICACIN ENTRE PROGRAMAS..............................................68 VISUALIZACIN DE PANTALLAS.......................................................71

11Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

11- VISUALIZACIN DE PANTALLAS.1- Elementos del lenguaje COBOL.

IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION PROCEDURE DIVISION Constantes figurativas: Una constante figurativa es una constante predefinida en COBOL que puede utilizarse en cualquier parte de la WORKING-STORAGE SECTION o PROCEDURE DIVISION para asignar su valor a un campo. Zero- Designa el valor 0 en el caso de datos numricos. Tambin puede ser referenciada por los nombres ZEROS o ZEROES. Space- Esta constante se utiliza para asignar a un campo no numrico uno o mas espacios en blanco. Tambin puede ser referenciada por el nombre SPACES. High-value- Se utiliza para asignar a literales alfanumricos el valor mas alto posible del cdigo de caracteres que estemos utilizando (Valor FF en ASCII). Tambin puede ser referenciada por el nombre de HIGH-VALUES. Low-Value- Se utiliza para asignar a literales alfanumricos el valor mas bajo posible del cdigo de caracteres que estemos utilizando (Valor 00 en ASCII). Tambin puede ser referenciada por el nombre de LOW-VALUES. ALL literal- representa una repeticin del literal especificado. Constantes identificadas por un nombre. Estn formadas por un identificador al que asociamos un valor. Se describen en la DATA DIVISION con nivel 78. Una constante identificada por un nombre se utiliza en cualquier lugar donde un literal pueda aparecer en un formato. Identificadores. Los identificadores son nombres creados por el programador. Para formar un identificador hay que tener en cuenta las siguientes reglas: Un identificador consta de un mximo de 30 caracteres. Estos caracteres pueden ser solamente letras, dgitos y el guin. No deben empezar ni terminar en un guin. Un identificador definido por el usuario no puede tener el mismo nombre que una palabra reservada. Un identificador debe contener obligatoriamente al menos una letra, excepto cuando se trate de un nombre de prrafo o de seccin. Cualquier identificador utilizado en la PROCEDURE DIVISION debe estar previamente definido en la ENVIRONMENT DIVISION o en la DATA DIVISION. Operadores. Los operadores son smbolos que indican como son manipulados los datos. Carcter Significado Ejemplo

12Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu

+ * / ** = ()

Suma Resta Multiplicacin Divisin Potenciacin Asignacin Dar prioridad

A+B AB A*B A/B A ** B C=A+B D = (A + B) * C

Operadores de relacin. Los operadores de relacin se utilizan para comparar dos valores numricos o dos valores alfanumricos (no numricos). El resultado puede ser verdadero o falso. Carcter = < > = Significado Igual que Menor que Mayor que Menor igual Mayor igual Ejemplo A=B AB A = BEstos operadores, tienen todos igual prioridad. Operadores de Lgicos. Los operadores lgicos nos permiten combinar varias expresiones de relacin. Igual que los operadores de relacin, se utilizan normalmente para tomar decisiones. Un operador lgico toma una combinacin de valores verdaderos-falsos y devuelve un resultado verdadero o falso.Los operadores lgicos colocados en orden de prioridad son los siguientes: NOT, AND, OR.Las tablas de verdad correspondientes a estos operadores son las siguientes:A B Not A V V FA AND B VA OR B V 13Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euV F F V F FF V VF F FV V FExpresiones aritmticas. Una expresin aritmtica puede ser una constante, una variable o un conjunto de constantes y variables unidas por operadores aritmticos.Para su codificacin hay que tener en cuenta que:* El parntesis izquierdo no debe ir seguido de un espacio. * El parntesis derecho no debe ir precedido de un espacio. * El signo = u los operadores +, -, *, - y ** deben ir precedidos y seguidos de un espacio.Orden de ejecucin. A la hora de evaluar una expresin, la prioridad de las operaciones es la siguiente:1- Primero se evalan las operaciones entre parntesis, de los mas internos a los mas externos. 2- Despus, y siguiendo el orden que se describe a continuacin se evalan los operadores aritmticos: ** *, / +,-Los operadores escritos sobre una misma lnea tienen la misma prioridad. Cuando en una expresin intervienen varios operadores con la misma prioridad, estos se evalan de izquierda a derecha.Expresiones de BOOLE. Una expresin de BOOLE da como resultado un valor verdadero o falso. Los operadores que intervienen en una expresin de BOOLE pueden ser: Operadores de relacin y operadores lgicos.14Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSi en una expresin de BOOLE intervienen varios tipos de operadores primero se evalan los operadores aritmticos, despus los operadores de relacin y por ultimo los operadores lgicos. Ejemplo: ((A = 0) AND ((B*2) NOT = 0)) OR (C=0) 2 5 1 3 6 415Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu2-Estructura de un programa Cobol.Descripcin General. Un programa fuente sintcticamente correctas.COBOLesunconjuntodesentenciasCOBOLLas sentencias, entradas, prrafos y secciones de un programa COBOL son agrupadas en cuatro divisiones que forman la estructura general de dicho programa.El formato general y el orden de presentacin de las entradas y sentencias que constituyen un programa COBOL es:IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. [END PROGRAM id-programa]Estos nombres representan las cabeceras de las cuatro divisiones mencionadas y la cabecera de final de programa que es opcional y valida bajo las normas ANS85. En esta ultima, id-programa debe coincidir con el nombre especificado en el parrafo PROGRAM-ID.Identification division.La division de IDENTIFICACION, sirve para proporcionar un nombre para identificar el programa. Opcionalmente se puede especificar informacin acerca del autor, fecha en que fue escrito, etc.. El formato general para la divisin es el siguiente.IDENTIFICATION DIVISION. PROGRAM-ID. Nombre del programa. [AUTHOR. Nombre del programador.]16Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu[INSTALATION. Lugar de instalacin.] [DATE-WRITTEN. Fecha en que fue escrito.] [DATE-COMPILED. Fecha en que fue compilado.] [SECURITY. Entrada de comentarios.]Solo las dos primeras lineas, IDENTIFICATION DIVISION y PROGRAM-ID, son obligatorias.Program-id.Este parrafo sirve para espeficar el nombre del programa. Este nombre sera utilizado por el compilador o durante la ejecucin para indicar en que programa ocurrio algun error.El nombre del programa debe ajustarse a las reglas de formacin de un identificador COBOL, vistas en el capitulo anterior.El resto de los parrafos son opcionales, pueden aparecer en cualquier orden, y su utilizacin queda perfectamente definida en el formato descrito.Si un comentario ocupa mas de una linea, no esta permitido utilizar el guin como caracter de continuacin, sin embargo puede ser continuado en las lineas siguientes, comenzando en el margen B. Environment division.La division de ENTORNO permite definir el tipo de ordenador para el que fue escrito el programa, asi como los dispositivos perifericos necesarios para soportar los ficheros utilizados en el programa.El formato general de la seccin es el siguiente: ENVIRONMENT DIVISION. [CONFIGURATION SECTION.17Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSOURCE-COMPUTER. Modelo de ordenador. OBJECT-COMPUTER. Modelo de ordenador. SPECIAL-NAMES. Nombres especiales.] [INPUT-OUTPUT SECTION. FILE-CONTROL. Control de ficheros. [I-O CONTROL. Control de entrada / Salida.] ]Seccion de configuracin.Esta seccin es opcional. Su utilidad es documentar el programa COBOL, indicando el modelo de ordenador utilizado y asociar los nombres nemonicos especificados por el programador a nombres utilizados por el compilador. A continuacin se describen los parrafos que la componen.Parrafo SOURCE: Sirve para especificar el modelo de ordenador que va a compilar el programa. Su formato es el siguiente: SOURCE COMPUTER. Modelo de ordenador. [WITH DEBUGING MODE.]La opcin WITH DEBUGING MODE permite introducir en el fichero fuente COBOL, codigo que nos servira de ayuda para depurar el programa.Parrafo OBJECT: Sirve para especificar el modelo de ordenador que va a ejecutas el programa. Su formato es el siguiente: OBJECT COMPUTER. Modelo de ordenador.18Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euMemory SIZE enteroWORDS CHARACTERS MODULES[PROGRAM COLLATING SEQUENCE IS codigo] [SEGMENT-LIMIT IS numero-segmento]. ]La clausula MEMORY SIZE tiene como finalidad documentar el programa y especifica el tamao de la memoria necesaria para poder ejecutar el programa expresado en palabras, caracteres o modulos.La clausula SEQUENCE, especifica la secuencia de caracteres utilzada en comparaciones y clasificaciones no numericas. Si esta se omite se utiliza el codigo ASCII o EBCDIC. En nuestro caso se utiliza el codigo ASCII La clausula SEGMENT-LIMIT solo sirve de comentario. La segmentacin en COBOL tiene sentido en la PROCEDURE DIVISION, la cual y para este proposito, estara dividida completamentamente en secciones, cada una de las cuales estara clasificada como una porcion fija o como un segmento independiente del programa objeto. El numero de segmento esta comprendido entre 1 y 49. Parrafo SPECIAL-NAMES:El fomato de este parrafo es el siguiente:SPECIAL-NAMES [Nombre de funcin IS nombre nemnico] [ALPHABET] [DECIMAL-PIOINT IS COMMA] [CURRENCY SIGN IS literal]Nombre de funcin es un nombre reconocido por el compilador, por ejemplo PRINTER y nombre nemotecnico es un nombre creado por el programador.19Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euLa clausula ALPHABET se utiliza para asignar un nombre a un conjunto especifico de caracteres o a una determinada secuencia de clasificacin. Su formato es el siguiente:STANDARD-1 STANDARD-2 ALPHABET nombre-alfabeto IS NATIVE ASCII EBCDICALPHABET nombre-alfabeto IS literal-1 THRU literal-2 ALSO literal-3El juego de caracteres STANDARD-1 o ASCII es el codigo American Standard Code for Information Interchange. STANDARD-2 es el codigo ISO 7-bit.La clausula NATIVE se refiere al codigo ASCII o EBCDIC dependiendo de la version COBOL.Cuando se especifica un nombre de alfabeto en una clausula CODE-SET en la descripcin de fichero, es para especificar el codigo de caracteres que se quiere utilizar.Si se especifica la opcin de literal, el nombre de alfabeto no puede referenciarse en la clausula CODE-SET. La secuencia de clasificacin identificada esta definida de acuerdo con las siguientes reglas: 1- El valor de cada literal especifica: A) El valor ordinal de un caracter dentro del juego de caracteres nativo, si el literal es numerico. B) El caracter actual dentro del juego de caracteres nativo, si el literal no es numerico. Si el literal no es numerico y esta formado por varios caracteres, cada caracter, comenzando con el caracter mas a la izquierda, es asignado a posiciones sucesivas, ascendentemente, en la secuencia de clasificacin que esta especificando.20Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu2- El orden en el que los literales aparecen en la clausula ALPHABET, en secuencia ascendente, especifica el nmero ordinal del caracter dentro de la secuencia de clasificacin.3- Cualquier caracter dentro de la secuenca nativa de clasificacin que este explicitamente espresado en el literal, asume una posicin, en la secuencia de clasificacin, mayor que cualquiera de los caracteres explicitamente especificados.4- Si se especifica la opcin THRU, el conjunto de caracteres contiguos, del codigo nativo, que comienzan con el caracter especificado por el literal-1 y que termina con el caracter especificado por el literal-2, es asignado a posiciones sucesivas, ascendentemente, en la secuencia de clasificacin que se esta especificando.5- Si se especifica la opcin ALSO, los caracteres del codigo nativo especificados por literal-1 y literal-3 se asignan a la misma posicin en la secuencia de clasificacin que se esta especificando.Los caracteres que ocupan las posiciones mas baja y mas alta en la secuencia de clasificacin definida, se asocian con las constantes figurativas LOW-VALUE y HIGHVALUE respectivamente. Si estas posiciones son ocupadas por mas de un caracter, el valor de la constante figurativa correspondiente se asocia al ultimo caracter especificado.La clausula DECIMAL-POINT IS COMMA permite transformar, en la edicin de resultados, el punto decimal en los numeros, en coma.La funcin de la clausula CURRENCY IS literal es la de reemplazar el signo $ de la moneda americana, que se usa en la clausula PICTURE, por el correspondiente signo de la moneda local. El literal esta limitado a un solo caracter, el cual debe especificarse en la clausula PICTURE correspondiente, en lugar del caracter $.Seccion de entrada-salida.Esta seccin es opcional. Permite declarar los ficheros de E/S que utiliza el programa, asi como definir las tecnicas especiales de E/S. 21Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu3-La divisin DATA.INTRODUCCIN.La divisin de datos se utiliza para realizar una descripcin completa de los ficheros que intervienen en el programa, de sus registros lgicos y de las variables intermedias o de trabajo.El formato general para esta divisin es el siguiente: DATA DIVISION. [FILE SECTION. Descripcin del fichero Descripcin del registro. ... ][WORKING-STORAGE SECTION [77 Descripcin de campos individuales. ] [01 Descripcin de registros. ]] [LINKAGE SECTION. [77 Descripcin de campos individuales. ] [01 Descripcin de registros. ]] [COMMUNICATION SECTION. [Descripcin comunicacin. ] [Descripcin de registros. ] ] [REPORT SECTION. [Descripcin de informes.]] [SCREEN SECTION. 01 Descripcin de pantallas.]Seccin de ficheros.22Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euEn la FILE SECTION debe describirse toda la informacin referente a los ficheros utilizados en el programa.Seccin de trabajo.En la WORKING-STORAGE SECTION se describen los campos utilizados por el programa como campos intermedios o de trabajo. El formato es el siguiente: [WORKING-STORAGE SECTION. [77 Descripcin de campos individuales.] [01 Descripcin de registros.]]Los campos que se especifican en la SECCIN DE TRABAJO pueden agruparse siguiendo el formato empleado en el apartado descripcin de una estructura registro, expuesto a continuacin, o bien ser campos de independientes en cuyo caso van precedidos por el numero de nivel 77. Descripcin de una estructura registro.Una descripcin de registro consiste en un conjunto de descripciones de datos, las cuales describen las caractersticas de un registro en particular. Cada descripcin de dar esta formada por un numero de nivel seguido de un nombre de datos, o de la clusula FILLER, seguido de una serie de clusulas si es que estas son requeridas.Una descripcin de registro puede tener una estructura jerarquizada compuesta por una o mas inscripciones jerarquizadas o campos que escribiremos de acuerdo con el siguiente formato:nombre de datos nmero de nivel FILLER[REDEFINES] [PICTURE] [USAGE] [VALUE]23Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu[SIGN] [JUSTIFIED RIGTH] [BLANK WHEN ZERO] [OCCURS]El orden de estas clusulas puede ser cualquiera, excepto la clusula REDEFINES, que debe ser la primera, en el caso de especificarse. Toda inscripcin debe terminar con un punto.El nombre del registro lleva numero de nivel 01 y el resto de los campos lleva un numero de nivel de 02 a 49.Nmero de nivel.Sirve para indicar la relacin existente entre un campo y el resto de los campos del registro.Los campos de datos lo podemos clasificar en:- Campos elementales: Un campo elemental no puede subdividirse o no es necesario subdividirlo para ser tratado por el programa. - Campos compuesto: Un campo compuesto esta formado por varios campos elementales. - Campos independientes : Un campo independiente es un campo de trabajo que ser definido en la seccin de trabajo.Una estructura jerarquizada, permite trabajara con registros completos, con campos compuestos y con campos elementales.Los nmeros de nivel que pueden utilizarse son: del 01 al 49, 66, 77, 78 y 88. El nivel superior es el 01.Las normas a seguir para utilizar los nmeros de nivel son las siguientes: 24Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu* Un campo compuesto tiene un nivel superior que cualquiera de sus campos elementales. * El numero de nivel 01 solo puede preceder al nombre del registro. * Los nmeros del 02 al 49 pueden preceder a cualquier campo del registro, elemental o compuesto. * Los numero de nivel utilizados no tienen porque ser correlativos. * El numero de nivel 77 se utiliza para describir campos independientes en la WORKING. * El numero de nivel 88 se utiliza para describir nombres de condicin. El formato es el siguiente:THROUGTH 88 nombre de condicin VALUE literal-1 THRU literal-2 literal-3 THRU THROUGTH literal-4* El numero de nivel 66 se utiliza nicamente con la clusula RENAMES. Permite asignar un nuevo nombre a un campo elemental, a un campo compuesto o a un conjunto de campos elementales. Su formato es el siguiente:THRU 66 nombre de dato-1; RENAMES nombre de dato-2 nombre de dato-3 THROUGHLa clusula RENAMES no puede formar parte de la descripcin de un campo y es obligatorio especificarla inmediatamente despus de la descripcin del registro.Un campo con numero de nivel 01, 77 u 88 no puede ser renombrado por esta clusula.Ni nombre de dato-2 ni nombre de dato-3 pueden tener la clusula OCCURS, ni pueden estar subordinados a un campo que contenga la clusula OCCURS.25Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu* El numero de nivel 78 se utiliza para definir constantes identificadas por un nombre. Cada referencia a una constante, es reemplazada por el compilador COBOL, por su valor.El formato general es el siguiente:literal 78 nombre constante; VALUE IS NEXT +/enteroNombre de datosSirve para nombrar el campo con el fin de poder referenciarlo en el programa y debe escribirse a continuacin del numero de nivel. Si en la PROCEDURE DIVISION no se va a referenciar alguno de los campos nombrados, el nombre de cada uno de estos campos, puede ser sustituido por la palabra FILLER. PICTURE. Esta clusula permite declarar el tipo y el tamao de un campo elemental. El tipo determina la informacin que puede almacenarse en el campo, as como las operaciones de que con l puedan realizarse. Su formato es el siguiente:PICTURE IS especificacin de formato PICEl tipo de campo, depende de los caracteres que se empleen para definir la especificacin de formato. Los campos los podemos clasificar en alfabticos, alfanumricos y numricos.La longitud del campo viene dada por el numero de caracteres empleados en la especificacin de formato para declarar el campo. El mximo numero de caracteres permitido es 30. CAMPOS ALFABTICOS.26Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euPermiten almacenar nicamente letras y/o blancos. El carcter que se emplea para definir un campo de este tipo es la A.CAMPOS ALFANUMRICOS.Permiten almacenar cualquier carcter del juego de caracteres ASCII. El carcter que se emplea para definir un campo de este tipo es la X.CAMPOS NUMRICOS.Permiten almacenar cualquier valor numrico. Tener en cuenta que en COBOL no se permiten nmeros superiores a 18 cifras. Los caracteres que se emplean para definir un campo de este tipo sin: 9, S, V y P.El significado de cada uno de los caracteres que pueden intervenir en una especificacin de formato para un campo numrico es:9 SRepresenta un cifra del 01 al 9. Indica la aparicin del signo + o -. El signo no es obligatorio, pero es conveniente ponerlo porque sino COBOL, despus de cada operacin lo suprime sistemticamente, lo que repercute en un mayor tiempo de ejecucin. Cuando se pone, debe ser el primer carcter de la especificacin de formato. Representa la posicin de un punto decimal implcito. Se utiliza internamente para alinear las partes decimales de los campos, cuando se quiere realizar una operacin. Indica una cifra virtual, representando un cero. Para la que no se ha reservado una posicin de memoria. PICTURE para la edicin.VP27Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euPara visualizar por pantalla o escribir por la impresora un campo, adems de los caracteres A, X, 9, V y P se dispone de los caracteres:Z * . , 0 B / CR DB $ + -El significado de cada uno de estos caracteres es el siguiente:ZRepresenta una cifra del 0 al 9. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco. Representa una cifra del 0 al 9. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un *. Los caracteres Z y * no pueden ir precedidos, pero si seguidos del carcter 9.*. ,El punto hace que se inserte un punto decimal para separar la parte entera de la parte decimal. La coma hace que se inserte este mismo carcter en el lugar que se indica en la especificacin de formato.La clusula DECIMAL-POINT IS COMMA en la ENVIRONMENT DIVISION, permite invertir el papel del punto y la coma en las especificaciones de formato en la edicin. B 0 / CR Permite que se inserte un espacio en blanco en el lugar que se indica en la especificacin de formato. Permite que se inserte un cero en el lugar de que se indica en la especificacin de formato. Permite que se inserte una barra en el lugar de que se indica en la especificacin de formato. Smbolo bancario indicativo de crdito. Solo puede colocarse a la derecha de la especificacin de formato. CR aparece sobre la lnea que se imprime si el valor es negativo. Si el valor es positivo aparecern en su lugar 2 espacios en blanco. Smbolo bancario indicativo de dbito. Solo puede colocarse a la derecha de la especificacin de formato. DB aparece sobre la lnea que se imprime si el valor es negativo. Si el valor es positivoDB28Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euaparecern en su lugar 2 espacios en blanco. $ + Un carcter $ colocado en el primer lugar en la especificacin de formato, permite la aparicin de este carcter en el lugar indicado. Un carcter + colocado en primer o ultimo lugar en la especificacin de formato, permite la aparicin de un + para valores positivos y de un - para valores negativos en el lugar indicado. Un carcter + colocado en primer o ultimo lugar en la especificacin de formato, permite la aparicin de un espacio en blanco para valores positivos o un - para valores negativos en el lugar indicado.-$$... La aparicin en una especificacin de formato de n caracteres $, permite editar un valor de n-1 cifras. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco, excepto a la izquierda de la primera cifra significativa que se inserta un carcter $. ++... La aparicin en una especificacin de formato de n caracteres +, permite editar un valor de n-1 cifras. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco, excepto a la izquierda de la primera cifra significativa que se inserta un carcter + para los valores positivos o un - para los valores negativos. -La aparicin en una especificacin de formato de n caracteres +, permite editar un valor de n-1 cifras. Si la cifra a escribir se corresponde con un 0 no significativo, se escribe en su lugar un espacio en blanco, excepto a la izquierda de la primera cifra significativa que se inserta un carcter - para los valores negativos.La clusula DECIMAL-POINT IS COMMA, permite utilizar la coma decimal en lugar del punto decimal. Sin embargo, este problema puede ser resuelto sin necesidad de especificar esta clusula. Para ello indicaremos en la especificacin de formato el lugar de la coma mediante el carcter V e insertaremos a su izquierda o derecha el carcter coma1 . USAGE.Esta clusula permite indicar cono se almacenar en memoria, valor en un campo numrico. Su formato es el siguiente:1 77 hola pic +ZZBV,99. O 77 hola pic +ZZB,V99.29Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euDS L Y IPA C MU A I N L O P T TO A UA E SG C MU A I N LX O P T TO A C MU A I N L3 O P T TO A C MU A I N L4 O P T TO A C MU A I N L5 O P T TO A o o o o o CM OP C MO PX C MO P3 C MO P4 C MO P5DISPLAY es la opcin por defecto. Con esta opcin, cara carcter sea numrico o no, ocupa un byte o octeto en memoria, representado en ASCII. Los valores numricos son almacenados en base 10.COMP y COMP-4 tienen el mismo significado. Se emplean con campos numricos y los valores son almacenados en los mismos en binario puro. Empleando la representacin complemento a 2.COMP-3 se emplea solo con campos numricos y hace que un valor sea almacenado en binario decimal empaquetado (BCD). El semiocteto menos significativo contiene el signo.COMP-5 es un formato similar a COMP, con la diferencia de que el valor que puede almacenarse, no depende del numero de 9 indicados en la clusula PIC, si no del numero binario mas grande que pueda almacenarse en ese espacio.COMP-X es un formato similar a COMP. Con respecto a este tiene las siguientes diferencias:* a) La especificacin de formato puede estar formada totalmente por X. * b) Tanto si la especificacin de formato esta constituida por X o por 9, el valor que puede almacenarse queda limitado al numero binario mas grande que pueda almacenarse. * c) El uso de COMP-X con elementos utilizados en operaciones aritmticas, esta restringido a las operaciones ADD, SUBSTRACT, MULTIPLY y DIVIDE no permitindose el empleo de ON SIZE ERROR. Si el resultado obtenido con estas operaciones es demasiado grande, se trunca. Si el resultado no es un entero, se 30Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eutrunca la parte decimal. Si el resultado es negativo se almacena en complemento a 2. VALUE.Esta clusula puede utilizarse en esta seccin, para asignar un valor a un campo con nivel 88, nombres de condicin, para asignar un valor a una constante identificada por un nombre o bien para inicializar campos de datos con un determinado valor. Formato: VALUE literal. SIGN.Esta clusula especifica la posicin y el modo de representacin del signo operacional de un campo numrico en cuya especificacin de formato se ha especificado S. Su formato es el siguiente:TRAILING SIGN LEADING SEPARATE CHARACTERLa clusula SIGN se aplica a campos numricos descritos como USAGE IS DISPLAY. Si la clusula SEPARATE no se especifica, el signo del numero es incorporado en el dgito de la derecha (TRAILING) o en el dgito de la izquierda (LEADING). En este caso el carcter S de la PICTURE no se tiene en cuenta para determinar el tamao del campo.Si la clusula SEPARATE se especifica, entonces el signo es almacenado como un carcter separado adicional a los dgitos. En esta caso el carcter S se tiene en cuenta para determinar el tamao del campo.Si la clusula SIGN no se especifica, generalmente la posicin por defecto es a la izquierda. JUSTIFIED.31Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euEsta clusula permite justificar un valor alfabtico o alfanumrico a la derecha. Su formato es el siguiente:JUSTIFIED JUST RIGTHEsta clusula puede especificarse solamente con campos elementales u no puede especificarse para un campo descrito como numrico o de edicin.BLANK.Esta clusula llena un campo numrico con espacios cuando su valor sea cero. De esta forma, eliminan todos los caracteres de insercin, en caso de que la zona a editar sea nula. Su formato es el siguiente:BLANK WHEN ZERO.Esta clusula puede especificarse solamente con campos elementales con formato DISPLAY o con campos numricos de edicin. OCCURS.numricosEsta clusula permite definir una estructura de datos denominada tabla. Una tabla es un conjunto de elementos todos del mismo tipo, esto es, con idnticos atributos. Su formato es el siguiente:OCCURS n TIMES.La clusula OCCURS indica el numero de veces, n, que se repite un elemento (campo simple o compuesto) con la misma descripcin.32Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euEl subndice correspondiente al primer elemento es 1. El subndice puede ser un numero entero o un nombre de datos. Si es un nombre de datos se recomienda declararlo con formato binario (COMP).La clusula OCCURS no puede especificarse en una descripcin con numero de nivel 01 o 77.Una tabla en COBOL puede tener hasta 3 subndices. En este caso se dice que la tabla es de 3 dimensiones.La clusula OCCURS y VALUE son incompatibles, lo cual no permite inicializar una tabla en su propia declaracin. REDEFINES.Esta clusula permite dar a un campo o a un rea de memoria mas de un nombre y mas de un formato. Su formato es el siguiente:nombre de dato-1 REDEFINES nombre de dato-2 FILLERLa clusula REDEFINES ha de ser la primera que siga al nombre de datos.Los campos nombre de dato-1 y campos nombre de dato-2 han de estar declarados al mismo nivel, pero no a nivel 66 u 88.La redefinicin de un campo compuesto se hace inmediatamente despus del ultimo de los campos elementales que forman parte de aquel.Esta clusula va a permitir poder inicializar una tabla en el momento de declararla.Seccion de enlace.33Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euEsta seccin permite declarar campos de memoria para ser utilizados por otros programas y por consiguiente conservar los datos de un programa para otro. Seccin de comunicaciones.Esta seccion permite procesar mensajes y controlar el flujo de los mismos. Seccin de informes.Esta seccin permite crear un dormato especifico para imprimir un fichero de salida. Seccin de pantalla.Esta seccin permite controlar la representacin de los datos en pantalla.34Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu4-La divisin PROCEDURE.Introduccin.La DIVISIN DE PROCEDIMIENTOS indica la secuencia necesarias, sentencias COBOL, para resolver un problema dado.deoperacionesEl formato general para esta divisin es el siguiente:USING PROCEDURE DIVISION CHAINING nombre de dato-1 [nombre de dato-2]...].[DECLARATIVES. {Nombre de Seccin SECTION [numero-segmento].[sentencia USE]. [Nombre de prrafo. [sentencia] ...]...}... END DECLARATIVAS. ] {Nombre de Seccin SECTION [numero-segmento].[sentencia USE]. [Nombre de prrafo. [sentencia] ...]...}...La clusula USING se especifica solamente en programas que luego son llamados (CALL) o enlazados (CHAIN). La sentencia USE cuando es ejecutada la seccin.Como las otras divisiones, la PROCEDURE DIVISION, puede ser dividida en secciones y estas a su vez en prrafos. Cada prrafo generalmente agrupar varias sentencias. La divisin en secciones es opcional y es poco utilizada, en cambio la divisin en prrafos es frecuente.Opcionalmente la PROCEDURE DIVISION puede contener secciones DECLARATIVAS. En caso de utilizarlas, estas deben ser las primeras en definirse. Su finalidad es el tratamiento de errores.35Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSentencias bsicasVisualizar datos. DISPLAY.Esta secuencia permite visualizar datos por pantalla o imprimirlos directamente en la impresora. Su formato es el siguiente:Formato 1:nombre de datos DISPLAY literal [WITH NO ADVANCING] literal nombre de datos UPON nombre de funcin nombre nemonicoEl nombre mnemnico debe ser un nombre asociado a un nombre de funcin, nombre reconocido por el compilador en el prrafo SPECIAL-NAMES.El literal puede ser una constante figurativa, excepto ALL, una constante de caracteres o un literal numrico. La opcin NO ADVANCING hace que el cursor no avance de lnea, una vez que se ha ejecutado la sentencia DISPLAY.Cuando utilizamos la clusula UPON, el nombre simblico debe declararse en el prrafo SPECIAL-NAMES. Si en lugar de utilizar un nombre mnemnico utilizamos un nombre de funcin el resultado es el mismo.Formato 2:nombre de datos-1 DISPLAY literal-1 AT LINE NUMBER entero-1 COL nombre de datos-2 COLUMN NUMBER entero-2 nombre de datos-3[ UPON CRT ] [ MODE IS BLOCK ] [ WITH opciones ]36Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euLos campos elementales deben tener como USAGE, DISPLAY.La clusula AT da la posicin de pantalla donde va a comenzar la operacin de escritura.La frase UPON CRT, es la opcin por defecto e indica visualizar los datos indicados por pantalla.La frase MODE IS BLOCK hay que especificarla cuando nombre de datos-1 corresponde a un campo compuesto y para que los datos elementales nombrados con FILLER sean tenidos en cuenta. Esto es, nombre de datos-1 es considerado como un campo elemental.Si no se especifica nombre de datos-1 o literal-1, DISPLAY, sin mas mueve el cursor a la posicin indicada.Si nombre de datos-1 es una constante figurativa, tiene un efecto especial que indicamos a continuacin: SPACE LOW-VALUE ALL X01 ALL X02 ALL X07 Limpia la pantalla desde la posicin del cursor especificada, hasta el final de la misma. Mueve el cursor a la posicin especificada. Limpia desde la posicin del cursor especificada, hasta el final de la lnea. Limpia toda la pantalla. Suena, enva un pitido.Opciones.BELL o BEEP BLINKEsta clusula emite un sonido cada vez que DISPLAY es ejecutado. Esta clusula hace parpadear el elemento37Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euvisualizado. HIGHLIGTH REVERSE-VIDEO Esta clusula hace que el elemento visualizado aparezca en alta intensidad Esta clusula hace que el elemento visualizado aparezca en vdeo inverso. Esta clusula se utiliza con campos elementales y especifica el tamao del campo. Si el tamao especificado es menor que el especificado en la clusula PIC, solamente aparecer la porcin de la parte izquierda y si el tamao especificado es mas grande se rellena con blancos. Esta clusula hace que el visualizado aparezca subrayado. elementoNombre de datos SIZE IS enteroUNDERLINE FOREGROUND-COLOR IS entero BACKGROUND-COLOR IS entero BLANK SCREEN BLANK LINEEsta clusula especifica el color en el que es visualizado el elemento. Entero es un valor entre 0 y 7. Esta clusula especifica el color de fondo sobre el que es visualizado el elemento. Entero es un valor entre 0 y 7. Borra la pantalla. Borra una lnea.Leer datos del teclado. ACCEPT.Esta sentencia permite asignar a uno o mas campos de datos. Valores desde el teclado. Su formato es el siguiente:DATE DAY TIMEACCEPT nombre de datos FROMEsta sentencia permite asignar a nombre de datos el valor de las constantes DATE, DAY y TIME.El contenido de estas constantes es:38Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euDATE es una constante de seis cifras de la forma AAMMDD, donde AA son las dos ultimas cifras del ao, MM es el mes y DD es el da. DAY es una constante de cinco cifras de la forma AANNN, donde AA son las dos ultimas del ao y NNN es el da del ao.TIME es una constante de 8 cifras HHMMSSCC, donde HH es la hora (00..23), MM son los minutos, SS son los segundos y CC son las centsimas de segundo.Formato 2:nombre-nemonico ACCEPT nombre de datos FROM nombre de funcionEl nombre mnemnico debe ser un nombre asociado a un nombre de funcin, nombre reconocido por el compilador, en el prrafo SPECIAL-NAMES. Formato 3:nombre de datos-2 ACCEPT nombre de datos-1 AT LINE NUMBER entero-1 EXCEPTION [FROM CRT] [MODE IS BLOCK] [WITHopciones] EXCEPTION NOT ON ESCAPE sentencia-2 [END-ACCEPT] ON ESCAPECOLUMN NUMBER COLnombre de datos-3 entero-2sentencia-1Una sentencia ACCEPT es tratada bajo este formato si va seguida de alguna de las clusulas AT, UPON, MODE o WITH, sin es considerada como una sentencia ACCEPT estndar (ANSI) vista anteriormente.Los campos elementales en nombre de datos-1 deben tener una USAGE DISPLAY. La clusula AT da la posicin de pantalla donde va a comenzar la operacin de lectura. Si no se especifica, se supone la lnea 1, columna 1.39Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euLas clusulas LINE y COL pueden aparecer en cualquier orden y sirven para especificar la lnea y la columna respectivamente, donde va a comenzar la lectura. El numero de lnea viene especificado por nombre de datos-2 o por entero-1 y el numero de columna por nombre de datos-3 o por entero-3.La frase UPON CRT, es la opcin por defecto e indica aceptar el dato indicado por la consola.Si nombre de datos-1 corresponde a un campo compuesto, y la frase MODE IS BLOCK no se ha especificado, entonces los campos elementales correspondientes que no sean FILLER son aceptados en el orden que estn especificados y separados por un numero de espacios en blanco igual a la longitud del campo FILLER correspondiente. Si esta frase se especifica entonces nombre de datos-1 es considerado como un campo elemental.Opciones: BELL o BEEP BLINK HIGHLIGHT REVERSE-VIDEO esta clusula emite un sonido cada vez que ACCEPT es ejecutado. Esta clusula hace parpadear el elemento aceptado. Esta clusula hace que el elemento aceptado aparezca en alta intensidad. Esta clusula hace que el elemento aceptado aparezca en vdeo inverso. Esta clusula se utiliza con campos elementales y especifica el tamao del campo. Si el tamao especificado es menor que el especificado en la clusula PIC, prevalece el tamao especificado por la clusula SIZE y si el tamao es mas grande prevalece el especificado por la clusula PIC. Esta clusula hace que el elemento aceptado aparezca subrayado. Especifica el color en el que se escribe el elemento aceptado. Especifica el color de fondo sobre el que se escribe el elemento aceptadonombre de datos SIZE IS enteroUNDERLINE FOREGROUND-COLOR IS entero BACKGROUND-COLOR IS entero40Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eunombre de datos PROMPT CHARACTER IS literalEsta clusula marca sobre la pantalla con el carcter especificado, los posiciones vacas mientras se ejecuta la operacin ACCEPT. PROMPT sin carcter utiliza el carcter por defecto (carcter de subrayado). Esta clusula termina automticamente un operacin ACCEPT cuando se tecla el ultimo carcter. Esta clusula obliga a dejar el campo completamente vaco o completamente lleno. Esta clusula obliga a no dejar el campo completamente vaco. Esta clusula impide que los caracteres tecleados aparezcan en la pantalla. Esta clusula permite visualizar el contenido del campo antes de efectuar la entrada. Esta clusula ajusta el contenido de un campo numrico editado o no editado, a la derecha una vez que se finaliza ACCEPT. Para ello es necesario que se especifique simultneamente la clusula SIZE.AUTOFULL o LENGTH-CHECKREQUIRED o EMPTY-CHECK SECURE o NO-ECHO UPDATE RIGHT-JUSTIFYSi se especifica la frase ON EXCEPTION y la operacin ACCEPT no termina satisfactoriamente, se ejecuta sentencia-1, que es una sentencia imperativa (no condicional). Si se especifica la frase NOT ON EXCEPTION y la operacin ACCEPT termina satisfactoriamente, se ejecuta la sentencia-2, que es tambin una sentencia imperativa.Opcionalmente se puede utilizar la frase END-ACCEPT la cual delimita el mbito del ACCEPT.Movimientos de datos. MOVE:Esta sentencia permite transferir datos de un campo de memoria a otro o a otros. Su formato es el que sigue: Formato 1: 41Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eunombre dato-1 MOVE literal TO nombre dato-2 [nombre dato-3]Los datos contenidos en el campo nombre dato-1 o en el literal son movidos al campo nombre datos-2. Despus de realizarse esta operacin de mover, los dos campos contendrn los mismos datos.Si a continuacin de la clusula TO especificamos mas de un campo, el contenido del campo nombre dato-1 se mueva a todos ellos.Normas para su utilizacin.En la transferencia de un campo elemental a otro elemental se pueden presentar los dos casos siguientes.1- Movimiento de un campo numrico a otro numrico (no de edicin o de edicin). En este caso los campos origen y receptor se alinean por el punto decimal. Si el tamao del campo receptor es menor que el tamao del campo emisor, se produce un truncamiento de la parte entera y/o decimal. En caso contrario, se rellena con ceros no significativos cualquiera de las partes.En caso de que el campo receptor sea de edicin, se siguen las mismas reglas expuestas para la clusula PICTURE.2- Movimiento de un campo de cualquier tipo a otro de tipo alfabtico o alfanumrico. (No de edicin o de edicin). En este caso el contenido del campo emisor se va colocando en el campo receptor de izquierda a derecha, excepto cuando en el campo receptor se haya declarado la clusula JUSTIFIED RIGTH, en cuyo caso, el contenido ser colocado de derecha a izquierda.42Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSi el tamao del campo receptor es menor que el campo emisor se produce truncamiento. En caso contrario se rellena con espacios en blanco.Si el campo receptor es de edicin, se siguen las mismas reglas expuestas para la clusula PICTURE.En la transferencia de un campo compuesto se puede realizar de dos formas:1- Como un campo elemental, cuya longitud es la suma de los campos elementales que lo forman. En este caso el campo receptor es considerado como un campo elemental alfanumrico.2- Moviendo los campos elementales uno a uno.Formato 2:CORRESPONDING CORRMOVEnombre dato-1 TO nombre dato-2Cuando se utiliza esta clusula todos los campos tienen que ser compuestos.Utilizando la clusula CORR con la sentencia MOVE, es posible mover un numero variable de campos elementales pertenecientes a nombre dato-1 a nombre dato-2 que tengan el mismo nombre.Los campos con igual nombre tienen que ocupar la misma posicin jerrquica en ambos campos compuestos.Si los campos elementales pertenecen a subgrupos del campo compuesto, los nombres de estos subgrupos tienen tambin que coincidir en ambos campos compuestos.Sentencia de asignacin. COMPUTE. 43Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euEsta sentencia permite asignar a uno o mas campos, el valor de un literal numrico, de otro campo numrico o de una expresin aritmtica. Su formato es el siguiente.nombre dato-3 literal numerico expresion aritmeticaCOMPUTE nombre dato-1 [ROUNDED] [nombre dato-2 [ROUNDED]]=[ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-COMPUTE]Sentencia-1 imperativas).ysentencia-2sonsentenciasnocondicionales(sentenciasLa frase END-COMPUTE solo puede ser utilizada con la frase SIZE ERROR.Opcin ROUNDED.Esta opcin, que sigue al nombre del campo que deber contener el resultado, permite redondear dicho resultado. Este redondeo consiste en aadir una unidad en la cifra menos significativa almacenada, si la primera decimal truncada es 5 o mayor de 5.Opcin ON SIZE ERROR.Durante la ejecucin, se puede dar un resultado cuyo numero de cifras enteras supere el tamao de la parte entera del campo receptor. Esto produce un truncamiento de las cifras mas significativas del resultado. La opcin ON SIZE ERROR, permite tomar una determinada accin, si se produce este caso, ejecutando la sentencia imperativa escrita a continuacin de la misma. De esta forma se controla cualquier anomala que pueda ocurrir en la ejecucin de una operacin aritmtica. Un ejemplo tpico es la divisin por cero.Por el contrario, la sentencia imperativa que sigue a la frase NOT ON SIZE ERROR, se ejecuta, si durante la ejecucin de una operacin aritmtica no ocurre ninguna anomala.44Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSentencia ADDEsta sentencia permite sumar dos o mas operandos numricos y almacenar el resultado en uno o varios campos elementales.Formato 1:nom dato-1 bre A D D literal num erico [N T O O SIZ ER O N E R R sentencia-2] [EN -A D D D ] ... TO [nom dato-2 bre [R U D ]] O N ED ... [O N SIZE ER O R R sentencia-1]Opcin TO.Esta opcin hace que los valores de los operandos a su izquierda sean aadidos a los valores a su derecha. Todos los operandos tienen que ser numricos.La frase END-ADD puede ser solamente utilizada con la frase SIZE ERROR.Formato 2:nombre dato-1 ADD literal numerico [NOT ON SIZE ERROR sentencia-2] [END-ADD]... GIVING[nombre dato-2 [ROUNDED]] ... [ON SIZE ERROR sentencia-1]Opcin GIVING.La suma de los operandos que preceden a la palabra GIVING, pueden ser almacenados en cada uno de los campos que siguen a dicha palabra. Los campos elementales que estn a continuacin de la palabra GIVING pueden ser numricos o numricos editados.45Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euFormato 3:CORRESPONDINGADDCORRnombre dato-1 TO nombre dato-2 [ROUNDED] [ON SIZE ERROR sentencia-1][NOT ON SIZE ERROR sentencia-2] [END-ADD]Los campos elementales de nombre dato-1, sern sumados a los campos de igual nombre de nombre dato-2. El resultado queda almacenado en los campos elementales de nombre dato-2.Sentencia SUBTRACT.La sentencia SUBTRACT es utilizada para restar un dato numrico, o la suma de dos o mas datos numricos, de uno o mas campos dejando el resultado en uno o mas campos. Formato 1:SUBTRACTnombre dato-1 literal... FROM[nombre dato-2 ROUNDED] [ON SIZE ERROR sentencia-1][NOT ON SIZE ERROR sentencia-2] [END-SUBTRACT]Con este formato, todos los operandos que preceden a la palabra FROM se suman y el total es restado de nombre dato-2, almacenando el resultado en el mismo campo, y repitiendo el proceso para el resto de los campos que siguen a la palabra FROM.Formato 2:SUBTRACTnombre dato-1 literal... FROMnombre dato-2 literal-2GIVINGnombre dato-3 [ROUNDED][ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-SUBTRACT]Con este formato, todos los operandos que preceden a la palabra FROM son sumados y el total, es restado al valor actual de literal-2 o de nombre dato-2, almacenando el resultado en los campos que siguen a la palabra GIVING.46Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euFormato 3:SUBTRACTCORRESPONDING CORRnombre dato-1 FROM nombre dato-2 [ROUNDED][ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-SUBTRACT]Cuando se utiliza este formato los campos elementales de nombre dato-1 son restados de los correspondientes campos elementales de nombre dato-2.Sentencia MULTIPLY.La sentencia MULTIPLY es utilizada para multiplicar un dato numrico por otro u otros datos numricos y dejar el resultado en uno o mas campos.Formato 1:MULTIPLYnombre dato-1 literalBY[nombre dato-2 ROUNDED] [ON SIZE ERROR sentencia-1][NOT ON SIZE ERROR sentencia-2] [END-MULTIPLY]Con este formato, el operando que precede a la palabra BY se multiplica por el valor que la sigue, almacenando el resultado en nombre dato-2, y repitiendo el proceso para todos los campos que siguen a BY.La frase END-MULTIPLY puede ser solamente utilizada con la frase SIZE ERROR.Formato 2:47Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euMULTIPLYnombre dato-1 literalBYnombre dato-2 literal-2GIVINGnombre dato-3 [ROUNDED][ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-MULTIPLY]Con este formato, el operando literal o nombre dato-1 se multiplica por literal-2 o nombre dato-2, almacenando los resultados en los campos que siguen a la palabra GIVING.Sentencia DIVIDE.La sentencia DIVIDE es utilizada para dividir uno o mas datos numricos por otro y dejar el resultado en uno o mas campos.Formato 1:nombre dato-1 DIVIDE literal INTO nombre dato-2 [ROUNDED] ... [ON SIZE ERROR sentencia-1][NOT ON SIZE ERROR sentencia-2] [END-DIVIDE]Con este formato, el operando que precede a la palabra INTO acta como divisor del valor actual de nombre dato-2, almacenando el resultado en este mismo campo, y repitiendo el proceso para el resto de los campos que siguen a la palabra INTO.La frase END-DIVIDE puede ser utilizada solamente en el caso de que se especifique la frase SIZE ERROR.Formato 2:nombre dato-1 DIVIDE literal INTO literal-2 nombre dato-2 GIVING nombre dato-3 [ROUNDED][ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-DIVIDE]48Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euCon este formato el operando literal o nombre dato-1 acta como divisor de nombre dato-2 o literal-2, almacenando el resultado en los campos que siguen a la palabra GIVING.Formato 3:nombre dato-1 DIVIDE literal BY literal-2 nombre dato-2 GIVING nombre dato-3 [ROUNDED][ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-DIVIDE]Con este formato el operando literal o nombre dato-1 se dividen por el valor de literal-2 o nombre dato-2, almacenando los resultados en los campos que siguen a la palabra GIVING.Formato 4:nombre dato-1 DIVIDE literal INTO literal-2 nombre dato-2 GIVING nombre dato-3 [ROUNDED]REMAINDER nombre dato-4 [ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-DIVIDE]Con este formato el operando literal o nombre dato-1 acta como divisor de nombre dato-2 o literal-2, almacenando el valor en los campos que siguen a la palabra GIVING y el resto de la divisin en el campo nombre dato-4. El resto puede ser entero o decimal y se calcula restando del dividendo el producto del cociente por el divisor. El calculo del resto, no se tiene en cuenta el redondeo en caso de que se haya especificado la clusula ROUNDED.Formato 5:nombre dato-1 DIVIDE literal BY literal-2 nombre dato-2 GIVING nombre dato-3 [ROUNDED] REMAINDER nombre dato-4[ON SIZE ERROR sentencia-1] [NOT ON SIZE ERROR sentencia-2] [END-DIVIDE]49Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euCon este formato el operando literal o nombre dato-1 se divide por el valor actual de nombre dato-2 o literal-2, almacenando el valor en los campos que siguen a la palabra GIVING y el resto de la divisin en el campo nombre dato-4. El resto puede ser entero o decimal y se calcula restando del dividendo el producto del cociente por el divisor. El calculo del resto, no se tiene en cuenta el redondeo en caso de que se haya especificado la clusula ROUNDED.50Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu5-Sentencias de control.Ejecucin condicional. Sentencia IF.La sentencia IF toma una decisin referente a la accin a ejecutar en un programa, basndose en el resultado, verdadero o falso, de una condicin. Su formato es:accin-1 IF condicin [THEN] NEXT SENTENCE ELSE NEXT SENTENCE accin-2 [END-IF]La condicin viene dada por una expresin de BOOLE.Si en la condicin intervienen operadores de diferentes tipos, los operadores aritmticos tienen mayor prioridad, despus se ejecutan los operadores de relacin y por ultimo los operadores lgicos.La forma en que se ejecuta la sentencia IF es la siguiente:Si el resultado de la condicin es verdadero, se ejecutar lo indicado por la accin-1. Si el resultado de la condicin es falso, se ejecutar lo indicado por la accin-2. Si el resultado de la condicin es falso, y la clusula ELSE se ha omitido, la accin-1 se ignora. En cualquier caso de los anteriormente expuestos, la ejecucin continua con la siguiente sentencia ejecutable.El mbito de la sentencia IF finaliza de cualquiera de las formas siguientes:1- Por un punto. 2- Por la clusula END-IF. 51Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euCuando la accin-1 o la accin-2 estn formadas por varias sentencias, solamente la ultima finaliza con un punto, ya que este indica el final de una sentencia IF.Si se especifica la frase END-IF no se puede utilizar la frase NEXT SENTENCE.Pruebas de relacin:El formato general para formar un condicin de relacin es:[NOT] > [NOT] < [NOT] = [NOT] GREATER THAN [NOT] LESS THAN [NOT] EQUAL TOnombre dato-1 literal expr-aritmeticaISnombre dato-1 literal expr-aritmeticaCondiciones combinadas.Una condicin combinada esta formada por un conjunto de condiciones simples unidas por los operadores OR y AND. El formato es el siguiente:AND condicin simple OR condicin simpleTambin, hay que tener presente que el operador NOT puede preceder a una condicin simple o a una condicin combinada.Pruebas de clase.Permiten saber si un campo es numrico o alfabtico.52Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euNUMERIC nombre datos IS [NOT] ALPHABETICPruebas de signo. Permiten determinar si el valor de un campo numrico de una expresin aritmtica es positivo, negativo o cero. El formato general es el siguiente:nombre datos POSITIVE IS [NOT] NEGATIVE expr-aritmetica ZEROPruebas de nombre de condicin.Permiten probar si un nombre de condicin al que se le ha asociado un determinado valor, coincide con el valor del campo de datos del cual depende.Anidamiento de sentencias IF.Las sentencias IF...THEN pueden estar anidadas. Esto quiere decir que como accin-1 o accin-2, de acuerdo con el formato, puede escribirse otra sentencia IF.Estructura IF.La estructura presentada a continuacin, aparece con bastante frecuencia y es por lo que la damos un tratamiento por separado. Esta estructura es consecuencia del anidamiento de sentencias IF.53Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euIF condicin-1 . sentencias-1 . ELSE IFcondicin-2 . sentencias-2 . ELSE IFcondicin-3 . sentencias-3 . ELSE . sentencias-n . [END-IF]Si se cumple la condicin-1, se ejecutan las sentencias-1 y si no se cumplen se examinan secuencialmente las condiciones siguientes hasta ELSE, ejecutndose las sentencias correspondientes al primer ELSE IF, cuya expresin sea cierta. Si todas las expresiones son falsas, se ejecutan las sentencias-n correspondientes al ultimo ELSE. En cualquier caso, se continua con la siguiente sentencia en la estructura.Llamada a procedimientos. Sentencia PERFORM.La sentencia PERFORM es utilizada para transferir explcitamente el control a uno o mas procedimientos y devolver el control implcitamente, cuando la ejecucin del procedimiento especificado, finalice. La sentencia PERFORM se puede utilizar para controlar la ejecucin de una o mas sentencias, las cuales estn dentro del mbito de la sentencia PERFORM. Formato 1:PERFORM procedimiento-1 [THRU procedimiento-2]Si no se especifica la sentencia THRU, la sentencia PERFORM ejecuta una vez, el conjunto de sentencias que forman el procedimiento-1. Si la opcin THRU se especifica, entonces se ejecutan, una vez todos los procedimientos existentes en el programa entre procedimiento-1 y procedimiento-2, ambos inclusive.Formato 2:54Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euentero PERFORM procedimiento-1 [THRU procedimiento-2] nombre datos TIMESSi no se especifica la opcin THRU, la sentencia PERFORM ejecuta el numero de veces especificado por entero o por un nombre de datos, le conjunto de sentencias que forman procedimiento-1. Si la opcin THRU se especifica, entonces se ejecutan el numero de veces especificado, todos los procedimientos existentes en el programa entre procedimiento-1 y procedimiento-2, ambos inclusive.Formato 3:PERFORMentero nombre datosTIMES {sentencia}..... END-PERFORMCuando se emplea este formato, la sentencia PERFORM ejecuta el numero de veces especificado por entero o por nombre de datos, el conjunto de sentencias que hay entre PERFORM y END-PERFORM. Un punto, como final de alguna de las sentencias de esta estructura, dara lugar a un error, ya que se entendera como final de la sentencia PERFORM.Formato 4:AFTER PERFORM procedimiento-1 [THRU procedimiento-2] WITH TEST BEFORE UNTIL condicinSi no se especifica la opcin THRU, la sentencia PERFORM ejecuta el conjunto de sentencias que forman el procedimiento-1 hasta que la condicin sea verdad. Si la opcin THRU se especifica, entonces se ejecutan, hasta que la condicin sea verdad, todos los procedimientos existentes en el programa entre procedimiento-1 y procedimiento-2, ambos inclusive.La ejecucin, si no se ha especificado la opcin WITH TEST, se realiza de la forma siguiente:55Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu1- Se evala la condicin. Si es cierta, se da por finalizada la ejecucin de la sentencia PERFORM y se pasa a la sentencia siguiente en el programa, si es falsa se pasa al punto 2. 2- Se ejecuta el procedimiento-1 hasta el procedimiento-2, si ha sido especificado, y se vuelve al punto 1. La opcin TEST BEFORE, evala la condicin antes de la ejecucin, esto quiere decir que la ejecucin se efectuara 0 o mas veces. Es la opcin por defecto.La opcin TEST AFTER, evala la condicin despus de la ejecucin, esto quiere decir que la ejecucin se efectuara una o mas veces.Formato 5:BEFORE PERFORM WITH TEST AFTER {sentencia} ... END-PERFORM UNTIL condicinCuando se emplea este formato, la sentencia PERFORM ejecuta el conjunto de sentencias que hay entre PERFORM y END-PERFORM hasta que la condicin sea verdad. Un punto, como final de alguna de las sentencias de esta estructura, dara lugar a un error, ya que se entendera como final de la sentencia PERFORM.Formato 6:BEFORE PERFORM procedimiento-1 [THRU procedimiento-2] nombre dato-1 VARYING nombre indice-1 UNTIL condicin FROM nombre dato-2 literal nombre indice-2 WITH TEST AFTER nombre dato-3 BY nombre indice-3La ejecucin, si no se ha especificado la opcin TEST AFTER, se realiza de la forma siguiente: 56Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu1- El nombre dato-1 se inicializa al valor especificado por literal o nombre dato-2 que sigue a FROM. 2- Se evala la condicin. Si es cierta, se da por finalizada la ejecucin de la sentencia PERFORM y se pasa a la sentencia siguiente en el programa. Si es falsa se pasa al punto 3. 3- Se ejecuta el procedimiento-1 hasta el procedimiento-2, si ha sido especificado. 4- Se suma a nombre dato-1 el valor especificado por nombre dato-3 que sigue a BY, y se vuelve al punto 2.Formato 7:BEFORE PERFORM WITH TEST AFTER nombre dato-3 BY nombre indice-3 UNTIL condicin {sentencia} ... END-PERFORM VARYING nombre indice-1 nombre dato-1 FROM nombre dato-2 literal nombre indice-2La ejecucin, si no se ha especificado la opcin TEST AFTER, se realiza de la forma siguiente: 1- El nombre dato-1 se inicializa al valor especificado por literal o nombre dato-2 que sigue a FROM. 2- Se evala la condicin. Si es cierta, se da por finalizada la ejecucin de la sentencia PERFORM y se pasa a la sentencia siguiente en el programa. Si es falsa se pasa al punto 3. 3- Se ejecutan las sentencias entre PERFORM y END-PERFORM. 4- Se suma a nombre dato-1 el valor especificado por nombre dato-3 que sigue a BY, y se vuelve al punto 2.Formato 8:57Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euBEFORE PERFORM procedimiento-1 [THRU procedimiento-2] nombre dato-1 VARYING nombre indice-1 UNTIL condicin-1 nombre dato-4 AFTER nombre indice-4 FROM nombre dato-5 literal-2 nombre indice-5 nombre dato-6 BY nombre indice-6 FROM nombre dato-2 literal nombre indice-2 WITH TEST AFTER nombre dato-3 BY nombre indice-3UNTIL condicin-2La ejecucin, si no se ha especificado la opcin TEST AFTER, se realiza de la forma siguiente: 1- El nombre dato-1 y el nombre dato-4 se inicializan a los valores respectivos que siguen a cada FROM. 2- Se evala la condicin-1. Si es cierta, se da por finalizada la ejecucin de la sentencia PERFORM y se pasa a la sentencia siguiente en el programa. Si es falsa se pasa al punto 3. 3- Se evala la condicin-2. Si es cierta, el nombre dato-4 se inicializa al valor especificado por literal-2 o nombre dato-4 que sigue a FROM, tambin se suma a nombre dato-1 el valor especificado por nombre dato-3 que sigue a BY y se continua en el punto 2. Si es falsa se pasa al punto 4. 4- Se ejecutan las sentencias entre procedimiento-1 y procedimiento-2, si ha sido especificado. 5- Se suma a nombre dato-4 el valor especificado por nombre dato-6 que sigue a BY, y se vuelve al punto 3.Los nombres dato y/o pueden ser enteros o reales, positivos o negativos y cero excepto los nombres de ndice que deben ser enteros.Anidamiento de sentencias PERFORM.Dentro del mbito de una sentencia PERFORM, puede especificarse otra sentencia PERFORM, aunque hay que tener presentes las siguientes reglas: 58Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu1- El procedimiento PERFORM ejecutado desde el mbito de otro PERFORM debe ser totalmente exterior o totalmente interior a este. 2- Los mbitos de dos PERFORM se pueden solapar cuando las sentencias de llamada para su ejecucin estn fuera de estos mbitos. 3- Las sentencias PERFORM pueden ser anidadas libremente. 4- Un procedimiento PERFORM puede llamarse asimismo, esto es, la recursividad esta permitida.Sentencia EXIT.Esta sentencia se utiliza como complemento de la sentencia PERFORM, para proporcionar un punto final para uno o mas procedimientos, a fin de permitir la salida desde cualquier punto.Formato: EXITLa sentencia EXIT forma por si sola un prrafo identificado por un nombre.Sentencia de bifurcacin GO.Esta sentencia permite transferir el control desde un punto de la divisin PROCEDURE a otro.Formato 1: GO TO [nombre procedimiento]Se puede omitir la escritura del nombre de procedimiento utilizando la sentencia GO TO en combinacin con la sentencia ALTER, especificando en esta ultima el nombre del procedimiento al que se debe bifurcar.Formato 2: 59Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euGO TO nombre procedimiento-1 [nombre procedimiento-2]... DEPENDING ON nombre datosSentencia ALTER.Esta sentencia permite modificar el punto al cual ha de bifurcar una sentencia GO. Su formato es el siguiente:ALTER nombre procedimiento-1 TO [PROCEED TO] nombre procedimiento-2 [nombre procedimiento-3 TO [PROCEED TO] nombre procedimiento-4] ...Sentencia STOP.Esta sentencia permite suspender temporal o definitivamente la ejecucin de un programa.RUN STOP literalLa sentencia STOP RUN termina el programa y devuelve el control al sistema operativo. Por eso es la ultima sentencia que se ejecuta.La sentencia STOP literal, suspende la ejecucin del programa y enva el literal especificado a la pantalla. A continuacin el operador puede continuar la ejecucin del programa o bien detener la misma.60Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu6-Cadenas de caracteres.Introduccin.Una cadena de caracteres es un literal no numrico esto es, una secuencia de caracteres (en nuestro caso ASCII) encerrados entre comillas simples o dobles.Sentencia EXAMINE.Esta sentencia cuenta el numero de ocurrencias de un carcter dado en un campo de datos y si es preciso, este carcter puede ser reemplazado por otro.Formato 1:UNTIL FIRST EXAMINE nombre dato TALLYING ALL LEADING [REPLACING BY carcter-2] carcter-1Este formato permite examinar y/o reemplazar caracteres en un campo de datos. Formato 2:ALL LEADING carcter-3 BY carcter-4 UNTIL FIRST FIRSTEXAMINE nombre dato REPLACINGEste otro formato permite solo reemplazar caracteres en un campo de datos.El campo denominado por nombre dato tiene que ser un campo de caracteres.61Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euCarcter representa un nico carcter. Si el campo es numrico el carcter debe ser un dgito numrico (0 a 9), un dgito del 0 al 9 no numrico (0 a 9) o la constante figurativa ZERO. Si el campo no es numrico, el carcter puede ser numrico, no numrico o cualquier constante figurativa excepto ALL.La opcin TALLYING crea automticamente un campo entero denominado TALLY que acta como contador. La cuenta representa el numero de: 1- Caracteres diferentes del carcter-1 hasta la aparicin del carcter igual a carcter-1 (UNTIL FIRST). 2- Veces que se repite el carcter-1 en el campo nombre dato (ALL). 3- Veces que aparece el carcter-1 antes de encontrar uno distinto a el (LEADING).Cuando se utiliza la opcin REPLACING, las reglas de sustitucin son las siguientes: 1- El carcter-1 o el carcter-3 queda sustituido por el carcter-2 o por el carcter-4 (ALL). 2- La sustitucin por carcter-2 o carcter-4 termina cuando aparece un carcter distinto al carcter-1 o carcter-3 (LEADING). 3- El primer carcter o carcter-3 que aparezca es sustituido por el carcter-2 o carcter-4 (FIRST). 4- La sustitucin por carcter-2 o por carcter-4 finaliza cuando aparece un carcter-1 o carcter-3, o cuando se llega al final del campo (UNTIL FIRST).Sentencia TRANSFORM.Esta sentencia permite alterar todos o parte de los caracteres de un campo de acuerdo con una regla de transformacin. Formato:TRANSFORM nombre dato-1 CHARACTERS FROM dato-1 TO dato-2.62Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euDato-1 y dato-2 representan una constante figurativa, un literal no numrico o un nombre de dato. Por lo tanto, existen nueve posibles combinaciones que determinan otras tantas reglas de transformacin. Ambos sern de la misma longitud o numero de caracteres.Nombre dato-1 debe ser un campo elemental no numrico o un campo compuesto.Sentencia INSPECT.Esta sentencia permite contar, reemplazar, o contar y reemplazar ocurrencias de caracteres simples o grupos de caracteres en un campo de datos.Formato 1:INSPECT nombre dato-1 TALLYING nombre dato-2 FOR CHARACTERS BEFORE INITIAL AFTER nombre dato-4 literal-2 ...Formato 2:INSPECT nombre dato-1 TALLYING nombre dato-2 ALL FOR LEADING literal-1 AFTER nombre datos-3 BEFORE INITIAL nombre dato-4 ... ...Formato 3:INSPECT nombre dato-1 TALLYING nombre dato-2 REPLACING CHARACTERS nombre dato-5 BY literal-3 AFTER BEFORE INITIAL nombre dato-4 literal-2 ...63Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euFormato 4:ALL INSPECT nombre dato-1 REPLACING LEADING FIRST BEFORE INITIAL AFTER nombre dato-4 literal-2 ... ... literal-1 nombre dato-3 BY literal-3 nombre dato-5Formato 5:INSPECT nombre dato-1 TALLYING nombre dato-2 FOR {opciones contar} REPLACING {opciones reemplazar}Formato 6:literal-4 INSPECT nombre dato-1 CONVERTING nombre dato-6 BEFORE INITIAL AFTER nombre dato-4 literal-2 ... TO nombre dato-7 literal-5Nombre dato-1 es el campo a examinar. Puede ser un campo elemental o un campo compuesto.Nombre dato-2 es un campo numrico elemental que se utiliza como contador.Nombre dato-3 ... Nombre dato-7 se refieren a un campo elemental numrico o no numrico.64Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euLos literal-1,...,literal-5 y los campos denominados por nombre dato-3,.., nombre dato-7, pueden tener cualquier numero de caracteres.TALLYING indica que hay que contar el numero de veces que aparece la cadena de caracteres designada por nombre dato-3. La cuenta se lleva en nombre dato-2.CHARACTERS indica que hay que contar todos los caracteres del campo denominado por nombre dato-1.ALL indica que hay que contar todas las incidencias.LEADING indica que hay que contar solo las primeras ocurrencias contiguas.BEFORE INITIAL indica que el conteo se debe interrumpir despus de la primera ocurrencia designada por nombre dato-4.AFTER INITIAL indica que el conteo debe comenzar despus de la primera ocurrencia designada por nombre dato-4.REPLACING indica que el campo denominado por nombre dato-1, hay que reemplazar algunos o todos los caracteres por otros especficos en la sentencia INSPECT. Las opciones que se pueden especificar con REPLACING son las mismas que se han especificado para TALLYING y tienen el mismo significado, si pensamos en que hay que reemplazar en lugar de contar. Aparece una opcin mas que es FIRST.FIRST indica que solo se reemplaza la primera ocurrencia del campo denominado nombre dato-1.CONVERTING indica que hay que convertir cada carcter de una cadena de caracteres a los correspondientes caracteres de otra. Ambas cadenas deben tener la misma longitud.Sentencia STRING.65Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euEsta sentencia permite enlazar (concatenar) el contenido total o parcial de dos o mas campos, almacenarlo el resultado en un solo campo.Formato:nombre dato-1 STRING literal-1 ... DELIMITED BY nombre dato-2 literal-2 SIZE...INTO nombre dato-3 [WITH POINTER nombre dato-4] [ON OVERFLOW sentencia-1] [NOT ON OVERFLOW sentencia-2] [END-STRING]Nombre dato-1 o literal-1, representan las cadenas que deseamos enlazar y nombre dato-3 indica el campo donde se almacenar el resultado. Este campo no debe contener smbolos de edicin. Los campos emisores y receptores no deben ser numricos.Los campos utilizados como delimitadores (DELIMITED BY nombre dato-2), son campos elementales no numricos que indican hasta que carcter hay que mover, excluido este.La opcin SIZE indica que, el numero de caracteres que tienen que ser transferidos es como mucho igual al tamao del campo receptor.Cada literal puede ser un literal no numrico o una constante figurativa excepto ALL.La opcin POINTER permite especificar por medio del campo nombre dato-4. La posicin en la que va a ser almacenado el primer carcter transferido. Este valor por defecto es 1 y es incrementado en 1 por cada carcter transferido.66Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSi el valor nombre dato-4 es menor que 1 o toma un valor mayor que el tamao del campo receptor, la transferencia de caracteres a este campo se interrumpe y se ejecuta la sentencia-1, si se ha especificado la opcin ON OVERFLOW. En otro caso, la transferencia se realiza totalmente y se ejecuta la sentencia-2, si se ha especificado la opcin NOT ON OVERFLOW.Sentencia UNSTRING.Esta sentencia permite dividir el contenido de un campo en varios campos.UNSTRING nombre dato-1 nombre dato-2 DELIMITED BY [ALL] literal-1 OR [ALL] literal-2 nombre dato-3INTO {nombre dato-4 [DELIMITER IN nombre dato-5] [COUNT IN nombre dato-6]} [WITH POINTER nombre dato-7] [TALLYING IN nombre dato-8] [ON OVERFLOW sentencia-1] [NOTON OVERFLOW sentencia-2] [END-UNSTRING]Nombre dato-1 indica la cadena que hay que separar. El resultado se almacena en el campo o los campos representados en nombre campo-4. Los campos utilizados como delimitadores (DELIMITED), son campos elementales alfanumricos que indican por donde hay que separar el campo denominado por nombre dato-1. Si se utiliza la clusula ALL, las posibles ocurrencias consecutivas indicadas por estos campos, se trataran como si fuese una nica ocurrencia.Cada literal puede ser un literal no numrico o una constante figurativa excepto ALL.Si se especifica la opcin DELIMITER IN, los caracteres delimitadores son tratados como datos alfanumricos elementales y almacenados en los campos referenciados por nombre dato-5.67Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSi se especifica la opcin COUNT IN, el valor correspondiente al numero de caracteres examinados, excluyendo los delimitadores, es almacenado en el campo referenciado por nombre dato-6.DELIMITER y COUNT solamente pueden utilizarse si se ha especificado la opcin DELIMITED BY.Si se especifica la opcin POINTER la cadena identificada por nombre dato-1 es examinada a partir de la posicin especificada por el campo nombre dato-7. Esta posicin por defecto es 1. Esta campo es incrementado automticamente en una unidad por cada carcter examinado.Si se especifica la opcin TALLYING, el valor correspondiente al numero de campos receptores activados durante la ejecucin de una sentencia UNSTRING, es almacenado en nombre dato-8.Si se especifica la opcin OVERFLOW y el valor del campo nombre dato-7 es menor que 1 o mayor que el tamao de la zona emisora, o bien todos los campos receptores se han activado y aun quedan caracteres por examinar en el campo emisor, la sentencia-1 se ejecuta. Si no se da una condicin OVERFLOW y se ha especificado la sentencia NOT ON OVERFLOW entonces se ejecuta la sentencia-2.La clusula END-UNSTRING delimita el mbito de esta sentencia.68Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu7-Manipulacin de tablas.Introduccin.Una tabla es un conjunto de elementos del mismo tipo, que comparten en comn un nombre comn pero que son distinguibles por la posicin que ocupa cada uno de ellos en la tabla. Cada elemento de la tabla puede contener un dato numrico o una cadena de caracteres o una combinacin de ambos. La representacin de una tabla se hace mediante variables suscritas o de subndices y puede tener una o varias dimensiones.Descripcin de una tabla.La descripcin de una tabla se hace en la seccin FILE y en la seccin WORKING-STORAGE utilizando la clusula OCCURS.Clusula OCCURS.Declara una estructura de datos denominada tabla. Su formato es el siguiente:OCCURS [entero-1 TO] entero-2 TIMES [DEPENDING ON nombre dato-1] ASCENDING KEY IS nombre dato-2 DESCENDING [INDEXED BY indice-1 [indice-2] ... ] [nombre dato-3] ... ...La clusula OCCURS no puede especificarse en una descripcin de nivel 01, 77, 88 o 66.Entero indica el numero de veces que se descripcin.repite un campo con la misma69Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euCuando el numero de veces que se repite el campo con la misma descripcin es variable, se emplea la especificacin entero-1 TO entero-2 donde el valor de entero-1 es menor que el valor de entero-2.Cuando se especifica la clusula DEPENDING, es para indicar el numero de veces que se repite el campo con la misma descripcin es variable y depende del campo nombrado por nombre dato-1.Las clusulas ASCENDING o DESCENDING, indican si los elementos de la tabla estan ordenados ascendentemente o descendentemente por uno o mas campos denominados por nombre dato-2 y nombre dato-3 ..., que formen parte de dichos elementos.La clusula INDEXED se utiliza para especificar el nombre de ndice o ndices, cuando en una tabla ordenada se realiza una bsqueda binaria.Sentencia SET.Permite transferir el valor de un literal, nombre de datos o de un ndice a uno mas identificadores. Formato 1:indice-1 SET nombre dato-1 [nombre dato-2] [indice-2] TO indice-3 entero nombre dato-3Cuando se ejecuta esta sentencia el valor del operando que sigue a TO es transferido a los operandos que siguen a SET.Formato 2 :UP BY SET indice-1 [indice-2] ... DOWN BY entero nombre dato70Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euEste formato permite ir incrementando (UP BY) o decrementando (DOWN BY) el ndice o ndices en el valor especificado por nombre dato o entero.Clusula USAGE INDEX.Esta clusula declara un campo un campo para ser utilizado como un ndice.[USAGE IS] INDEXUn campo de ndice solo puede ser referenciado por la sentencias SET y SEARCH.BSQUEDA SECUENCIAL. Sentencia SEARCH.Esta sentencia permite realizar una bsqueda secuencial entre los elementos de una tabla hasta que el contenido de uno de ellos satisfaga una determinada condicin.nombre dato-2 SEARCH nombre dato-1 VARYING indice-1 sentencia-2 WHEN condicin-1 NEXT SENTENCE [END-SEARCH] WHEN condicin-2 NEXT SENTENCE sentencia-3 [AT END sentencia-1]Nombre dato-1 se refiere al elemento de la tabla, por lo tanto, su descripcin debe contener una clusula OCCURS mas la clusula INDEXED BY. Puede ser tambin un campo subordinado a otro que contenga una clusula OCCURS.Cuando se especifica nombre dato-2 debe ser descrito por medio de la clusula USAGE IS INDEX o como un campo elemental entero. El valor de este campo evoluciona paralelamente al ndice de la tabla y se emplea cuando:a) Aparte de realizar la bsqueda de un determinado elemento de la tabla se desea conocer su posicin. 71Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eub) Se desea incrementar simultneamente el ndice de otra tabla diferente a la tabla en la que se esta realizando la bsqueda.Las condiciones de las clusulas WHEN se evalan en el orden en que estan descritas.Las sentencias 1, 2 o 3, son sentencias imperativas, esto es cualquier sentencia no condicional.Una sentencia SEARCH se ejecuta de la forma siguiente:1. Se inicializa el ndice asociado con nombre dato-1, por medio de una sentencia SET, con un valor que se corresponde con el numero de elemento de la tabla donde se desee que comience la bsqueda. 2. Si el valor del ndice asociado es mayor que el numero de elementos de la tabla, la bsqueda termina y se ejecuta la sentencia que sigue a la clusula AT END, si esta se ha especificado.3. Se evalan las condiciones de las clusulas WHEN en el orden que estan descritas. Si se satisface alguna de las condiciones, la bsqueda termina y se ejecuta la sentencia asociada con la condicin satisfecha. Si no se satisface ninguna de las condiciones se incrementa el valor de valor del ndice asociado con nombre dato-1 y se continua en el paso 2.BSQUEDA BINARIA. Sentencia SEARCH ALL.Esta sentencia realiza una bsqueda binaria en una tabla.SEARCH nombre dato-1 [AT END sentencia-1] sentencia-2 WHEN condicin NEXT SENTENCE72Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euNombre dato-1 se refiere al elemento de la tabla, por lo tanto, su descripcin debe contener una clusula OCCURS mas la clusula INDEXED BY y adems la tabla debe estar ordenada por uno o mas campos pertenecientes a dicho elemento, cuestin que indicaremos con la clusula ASCENDING KEY o con la clusula DESCENDING KEY.73Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.eu8-FICHEROS DE ENTRADA Y SALIDA.Fichero:Un fichero es una coleccin de informacin que almacenamos en un soporte para poder manipularla en cualquier momento. Esta informacin se almacena como un conjunto de registros, conteniendo todos ellos generalmente los mismos campos. Campo elemental almacena un dato numrico o de caracteres.Organizaciones bsicas:Existen tres organizaciones bsicas de los registros de un fichero, de cuya combinacin se derivan multitud de organizaciones posibles. Estas son:- Secuencial. - Relativa. - Secuencial Indexada.Modos de acceso:En cuanto a los modos o tipos de acceso, distinguimos dos:- Acceso secuencial. - Acceso aleatorio o directo.Se habla de acceso secuencial cuando se van accediendo a posiciones sucesivas, esto es tras acceder a la posicin N, se accede a la posicin N+1, y se habla de acceso aleatorio o directo cuando se accede directamente a la posicin deseada, sin necesidad de acceder a las posiciones que le preceden.Segn el tipo el tipo de organizacin empleada para crear un fichero el modo de acceso puede ser:74Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euORGANIZACIN Secuencial Relativa Secuencial indexadaCREACIN Secuencial Secuencial o aleatoria Secuencial o aleatoriaRECUPERACIN Secuencial Secuencial o aleatoria Secuencial o aleatoriaSeccin de entrada Salida:Esta seccin es opcional. El nombre de la misma, INPUT-OUTPUT SECTION, deber figurar cuando se especifique alguno de sus prrafos. Su Formato es el siguiente:INPUT-OUTPUT SECTION. FILE-CONTROL. { entrada de control de los ficheros } ... I-O CONTROL. { entrada de control de E/S } ...Prrafo FILE-CONTROL.Este prrafo se utiliza para dar un nombre a cada fichero que se utiliza en el programa, al mismo tiempo que se le asigna el equipo perifrico correspondiente. Tambin da informacin acerca de como esta organizado el fichero y cual es el modo de acceso.Este prrafo esta formado exclusivamente por las sentencias SELECT, existiendo una por cada fichero que se utiliza en el programa. Su formato es el siguiente:75Telf.: +34 948 36 26 00 Fax: +34 948 12 91 52 www.incita.euSELECT [OPTIONAL] nombre-fichero-1ASSIGN TO dispositivo entero-1 [RESERVE NO ALTERNATE AREAS AREA[ORGANIZATIONIS organizacin] [ACCESS MODE IS modo-de acceso] [LOCK MODE IS modo-de cierre] [RECORD KEY IS clave] [FILE STATUS IS nombre-de-dato]La palabra OPTIONAL, puede ser solamente especificada con ficheros abiertos en modo INPUT, I-O o EXTEND