Sei sulla pagina 1di 11

La orientacin del curso / manual la enfocar a mi entorno de trabajo, es decir RM bajo UNIX,

pero como os he dicho antes, no hay muchas diferencias.


Al pensar en Cobol como lenguaje de programacin debemos de tener presente que nos
referimos a un lenguaje dedicado a gestin de datos con una magnfica transportabilidad entre
los distintos sistemas, yo he ejecutado el mismo programa en MS-DOS y UNIX sin modificar ni
una linea de cdigo y copiando solo el objeto.
Si se le llaman lenguajes de programacin, es porque realmente se consideran como cualquier
idioma, es decir tiene su gramtica, sus verbos, sus frases, sus prrafos y el cobol adems tiene
una gran similitud con el ingls, ya que todo su entorno est sacado de ste idioma. Cobol
adems es un lenguaje estructurado y sus partes se diferencias claramente en Divisiones.
Estas son 4, son obligatorias y cada una de ellas tiene una misin diferente dentro de cada
programa como veremos a continuacin.
El programa cobol se escribe secuencialmente en lneas de 80 caracteres o menos con la
siguiente divisin:

La parte (1) comprende las columnas de la 1 a la 6 ambas inclusive y se utiliza para numerar las
lneas, aunque hoy en da prcticamente no se utilizan.
La parte (2) comprende la columna 7 y en ella podemos encontrar, un guin (-) que nos indica
que esta lnea es continuacin de la anterior pero que por su tamao ocupa mas de una lnea, un
asteristo (*) que nos indica que el texto que viene a continuacin es un comentario y por lo
tanto que el compilador lo ignore, o bien puede servir dependiendo de los compiladores para
indicaciones del debug.
La parte (3) se le llama Area A comprende las columnas 8 a 11 ambas inclusive y aqu es donde
se escriben los nombre de las divisiones, de las secciones, de los prrafos, los indicadores de FD
(File Description) y los niveles de variables 01 y 77.
La parte (4) llamada Area B comprende desde la columna 12 a la 72 y en ellas se incluirn todas
las instrucciones del programa, las lineas de las secciones y los niveles de variables mayores a
01.
La parte (5) de la columna 73 a la 80 no se utiliza y por lo tanto es ignorada por el compilador.
El punto es un signo de vital importancia en cobol ya que nos indica el final de una linea, en el
han de terminar todas las secciones, divisiones y prrafos. Si al final de una linea el compilador
no encuentra el punto, interpretar que la instruccin contina hasta que aparezca el punto de
fin de linea.
Al igual que en otros lenguajes, el cobol dispone de palabras reservadas que no debemos de
utilizar como nombres de variables o de prrafos, adems stos no deben de exceder de 30
caracteres (depende del compilador).
Las variables y constantes que se pueden utilizar son numricas, alfabticas o alfanumricas.
Las numricas al contrario de la mayora de los lenguajes actuales o las bases de datos no
miden su tamao por bytes sino por dgitos, es decir, que una variable de 6 dgitos podr
contener nmeros desde 0 hasta 999999 si es de valor absoluto o incluyendo los negativos si
lleva signo. Para las alfanumricas en cambio no hay cambio alguna y su tamao viene indicado
por el nmero de caracteres que ocupa.

Existen adems en cobol unas variables que vienen con un valor propio y que se pueden utilizar
libremente, tambin llamadas Constantes Figurativas, como ZERO, SPACE, LOW-VALUES, HIGHVALUES, etc...
Quisiera respetar para todo el manual las mismas pautas, color Amarillo para las palabras
reservadas cobol, subrayado para las obligatorias, en cursiva los comentarios y en normal el
resto.
Nota final:

Es obvio que cada manual estar orientado a la manera de trabajar de quien lo escribe, con ello
quiero decir que habr cosas que no explicar mucho o incluso otras que omitir porque yo no
las haya utilizado nunca.
Una explicacin perfectamente detallada deber venir en los manuales de cada uno de los
compiladores que del lenguaje Cobol existen hoy en dia.
Espero que podais comprender sto, eso si, os puedo asegurar que todos mis programas utilizan
solo lo que aqui voy a exponer y ninguno nunca me ha dado ningn problema.

Identification Division
Esta es la primera linea de todo programa Cobol e identifica a la primera divisin donde se especifica el nombre del
programa, el del autor y dems datos, su sintaxis sera la siguiente:
IDENTIFICATION DIVISION.
PROGRAM-IDNombre del programa.
AUTHOR Nombre del autor.
INSTALLATION Lugar donde est instalado.
DATE-WRITTEN Fecha de creacin.
DATE-COMPILED Fecha de compilacin.
REMARKSComentarios.
Vemos que el nico prrafo obligatorio adems del nombre de divisin es el que hace referencia al nombre del programa,
los dems nombre de autor, lugar de instalacin, fechas de creacin y compilacin y comentarios son opcionales, eso si, si
se incluyen se deben de poner cumpliendo las normas.
Podemos incluir adems todos los comentarios o explicaciones que creamos oportunas incluyendo en la columna 7 un
asterisco (*) que nos indica que el compilador har caso omiso de lo que venga a continuacin, por ejemplo.
* /////// Este programa es para hacer algo ///////
* // atencin a la seccin de la fecha ////
Ejemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. MANCLI.
AUTHOR. ANDRES MONTES.
INSTALLATION. WWW.
REMARKS. Programa para mantenimiento de fichero de clientes.

Nota final:
Poco mas podemos decir de sta division, obviamente las dems no son tan pequeas, sin embargo posee dos de las lineas
mas importantes de cualquier programa cobol.

Environment Division
Es la segunda division por orden de aparicin, y en ella se especifican, el ordenador donde se escribi y se ejecutar el
programa, asi como la relacion entre los ficheros a utilizar con sus correspondencias externas, es decir con los
dispositivos a los que har referencia el programa objeto cuando vaya a establecer comunicacin con dicho fichero.
Diremos antes de continuar que en los primeros cobol haba muchas partes que eran obligatorias en cada programa,
pero hoy en dia, por ejemplo, sta divisin ya no es obligatoria, asi como ninguna de sus partes. Su sintaxis sera la
siguiente:
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. Ordenador donde se escribi el fuente.
OBJECT-COMPUTER. Ordenador donde se ejecuta el objeto.
SPECIAL-NAMES. Cambiar valores para constantes del lenguaje, pueden variar en cada compilador.
Como se aprecia en su sintaxis, sta segunda division se divide a su vez en dos secciones, que se describen a
continuacion:
CONFIGURATION SECTION: Donde describimos los tipos de ordenadores en que se escribio y se ejecutar el programa, o
bien el nombre del compilador y asignacin de valores a ciertas constantes utilizadas por el compilador, estos valores se
introducen en sus respectivas lineas como se ve arriba.
Para la linea de SPECIAL-NAMES el uso mas habitual es el de cambiar el punto decimal usado por los ingleses por la coma
y asi poder especificar los puntos para los miles, su formato sera el siguiente:
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
Tambin podriamos cambiar el valor del smbolo de la moneda con:
CURRENCY SIGN IS literal , suele ser un solo caracter y no puede coincidir con ninguno de los que usamos para definir las
variables, es decir ni A,ni Z,ni 9,ni -,ni +,ni X, etc...
O hacer que todas las letras introducidas sean maysculas o minsculas o que no haya diferencias entre ambas con la
clausula ALPHABET.
INPUT-OUTPUT SECION: Es la siguiente seccin dentro de la Environment, donde se especificarn todos los ficheros que
vamos a utilizar, su tipo, su modo de acceso asi como el medio en que estarn, esta seccin solo ser obligatoria cuando
vayamos a utilizar ficheros. Esta tiene dos prrafos FILE-CONTROL e I-O-CONTROL.
123456789012
AB
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT [OPTIONAL] Nombre-de-archivo
ASSIGN TO Tipo-de-dispositivo
ORGANIZATION IS Tipo de organizacion
ACCESS MODE IS Mode de acceso al fichero
RECORD KEY IS Clave del registro
ALTERNATE RECORD KEY IS Claves alternativas registro
WITH DUPLICATES
FILE STATUS IS Variable de estado del fichero.
Vamos a explicar cada una de las clusulas que encontramos dentro de la Input-Output Section.

Clusula SELECT es aqui donde especificamos el nombre lgico que va a tener el fichero dentro del programa, suele ser
una palabra que identifique lo mas claro posible el contenido del fichero, por ejemplo ARTICULOS, PROVEEDORES,
CLIENTES.
Clusula OPTIONAL si indicamos esta opcin al hacer un OPEN I-O, si el archivo no existe, se crea. Con lo cual nos
evitamos tener que abrirlo como OUTPUT y cerrarlo, antes de poder utilizarlo por primera vez.
Clusula ASSIGN aqui especificamos el tipo de dispositivo, si es una impresora PRINTER, si es un fichero sobre el que
vamos a grabarRANDOM o DISC, se pueden utilizar otros como INPUT, INPUT-OUTPUT, CASSETTE, MAGNETIC-TAPE,
pero sin duda los mas utilizados son los dos primeros para identificar si el fichero utilizar una salida impresa o se
utilizar sobre disco. Para identificar ficheros utilizados para clasificar utilizaremos SORT.
Clusula ORGANIZATION aqui indicamos la organizacin de los registros de nuestro fichero, podr ser SEQUENTIAL,
RELATIVE o INDEXED, si nuestro archivo fuera secuencial se podran omitir sta clausula asi como las restantes.
De sta organizacin se deriva el formato del fichero, SEQUENTIAL si los registros se graban secuencialmente conforme
se dan entrada sin importar si estn o no repetidos, un ejemplo claro son los archivos de impresora, todos los listados
son secuenciales.
RELATIVE, si cada registro es identificado por un valor entero con su posicin relativa (practicamente no se utiliza).
INDEXED es la mas utilizada e identifica a ficheros que sus registros son accesibles mediante una clave unica e irrepetible
o por varias que pueden estar duplicadas, cualquier fichero de mantenimiento, por ejemplo de ARTICULOS, podra
ser INDEXED, y cada cdigo ser nico para cada artculo y con el nos iremos a su posicin y podremos ver todos los
demas datos que hagan referencia al registro.
Existe tambin para los archivos de texto, tipo AUTOEXEC.BAT la posibilidad de asignarlos directamente
especificando LINE SEQUENTIALen sta clausula.
Clusula ACCESS MODE indica el modo de acceso al fichero, puede serSEQUENTIAL, RANDOM o DYNAMIC, si no se
especifica ninguno o si el fichero es SEQUENTIAL entiende que el modo ser SEQUENTIAL.
RANDOM indica que accederemos a el aleatoriamente por su clave yDYNAMIC (la mas utilizada) con la que podremos
acceder al fichero en el modo que queramos dentro del programa, unas veces secuencialmente, si nos interesa, otras
veces por su clave.
Clusula RECORD KEY se utiliza solo si el fichero es indexado y en el decimos cual es el nombre de la clave por la cual
accederemos a los registros. Esta deber ser alfanmerica y tendr que estar especificada en laFD del fichero. Si el
archivo fuera RELATIVE, esta clausula se sustituira por RELATIVE KEY e indicar el nmero de registro del fichero, deber
estar declarado en la WORKING-STORAGE SECTION como una variable numrica sin signo.
Clusula ALTERNATE RECORD KEY solo para ficheros indexados e identifican una o mas claves alternadas para nuestros
registros, por ejemplo en un fichero de clientes cuya clave principal sera el cdigo, podramos asignar como clave
alternativa el NIF, y podramos acceder a el por las dos claves, bien por cdigo o bien por NIF, ser tambin alfanumrico
y deber tambin estar declarado en la FD. Si aparece WITH DUPLICATES, indica que sta clave alternativa pudiera estar
duplicada, por ejemplo si hubieramos escogido como clave alternada adems del NIF, el Nombre del cliente, podra
darse el caso de que dos clientes tuvieran el mismo nombre.
Clusula FILE STATUS aqui damos un nombre de una variable que especificaremos en la WORKING como un campo
alfanumrico de dos caracteres donde el programa depositar el cdigo de error que ocurra en el fichero, dependiendo
del valor nosotros podremos operar o hacer alguna accin en concreto.
El prrafo I-O CONTROL se utiliza par indicarle al programa cuantos archivos van a utilizar el mismo area de memoria
para trabajar, os puedo decir poco mas de ste prrafo porque yo no lo he utilizado nunca (lo que no quiere decir que
no sea til).

Ejemplo:

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. RMCOBOL.
OBJECT-COMPUTER. RMCOBOL.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CLIENTES ASSIGN TO RANDOM "C:DATOSCLIENTES.DAT" ORGANIZATION
INDEXED
ACCESS DYNAMIC RECORD KEY KEY-CLIENTE ALTERNATE RECORD KEY-CLIENTE1
FILE STATUS STACLI.
SELECT IMPRESORA ASSIGN TO PRINT "PRINTER".
Hemos declarado el archivo CLIENTES como indexado con dos claves, una
principal KEY-CLIENTE y otra alternativa KEY-CLIENTE1 y hemos asignado una
variable para guardar los posibles cdigos de error para cuando operemos con
ste fichero STACLI. Al indicarle el acceso dinmico le decimos que una vez dentro
del programa podremos acceder al fichero secuencialmente o bien directacmente
al registro que queramos por cualquiera de las claves.
Como el fichero IMPRESORA es secuencial no es necesario ninguna aclaracin, al
darle el nombre PRINTER cojer la impresora que tengamos por defecto, si le
damos cualquier otro nombre que no identificara a ninguna impresora, el
resultado sera grabar todo lo que debera salir por la impresora en un archivo con
ese nombre.

Nota final:
Creo que es una de las partes mas interesantes de la programacin cobol y que cuando he utilizado alguno de stos
nuevos lenguajes orientados a objetos y que utilizan bases de datos, siempre he echado en falta. Para mi siempre es
grato dirigirme a la Environment de cualquier programa y saber con exactitud todos los ficheros que se van a utilizar en
ese programa.
Apreciar que para cada especificacin de fichero en la Select solo se pone el punto al final de todas las clausulas del
prrafo.
Al asignar la impresora, si asignamos el nombre PRINTER, ste hace referencia a la impresora por defecto pero tambien
podramos utilizar un nombre para especificar una impresora de red, por ejemplo, si en nuestra red existe una
impresora que esta en PENTIUMHPLASER, podemos identificar un nombre en el Autoexec.bat para asignar ese valor a
una variable de entorno como: IMPRE="PENTIUMHPLASER" y luego en el programa especificar como nombre de
dispositivo de la impresora IMPRE,SELECT IMPRESORA ASSIGN TO PRINT IMPRE.
En realidad haciendo sto ltimo podemos asignar cualquier archivo que est en cualquier direccin de la red, ya que el
nombre que damos es lgico y su asignacin la podemos definir con una variable de entorno donde queramos.

Data Division
Es la tercera division por orden de aparicin, y es donde se declaran absolutamente todos los nombres de campos,
registros, variables, es decir donde nombramos cada dato que vayamos a utilizar en nuestro programa. Para almacenar
todos estos nombres de datos, sta DIVISION se divide en varias secciones, cada una de ellas orientada a un tipo de
datos diferente.

FILE SECTION. Aqui describiremos todos los campos que componen los registros de todos los archivos que
vayamos a utilizar, que previamente habremos declarado en la INPUT-OUTPUT SECTION dentro de
la ENVIRONMENT DIVISION.

WORKING-STORAGE SECTION. En ella declararemos todas las variables no referentes a archivos, pero que
durante la ejecucin del programa vayamos a utilizar.

LINKAGE SECTION. Esta es la seccin donde se registrarn las variables que nos servirn para enlazar el
programa principal con el que llamemos mediante la orden CALL.

COMMUNICATION SECTION. (No la he utilizado nunca).

SCREEN SECTION. En sta seccin podremos describir los atributos y campos a utilizar en las pantallas.

Al igual que en la anterior DIVISION ninguna de sus partes es obligatoria, pero si vamos a utilizar alguna variable, aunque
solo sea una, tendremos que incluirla en laWORKING-STORAGE SECTION y esto nos obligar tambien a definir la DATA
DIVISION. Pasemos a continuacin a explicar mas a fondo cada una de ellas.
FILE SECTION.
En esta seccin describiremos los campos que van a componer el registro de cada uno de los archivos con los que vamos
a trabajar, sta sera su sintaxis:

FD Nombre del fichero.


BLOCK CONTAINS Numero de registros por bloque RECORDS
RECORD CONTAINS Nmero de caracteres por registroCHARACTERS
LABEL RECORD Etiqueta de registro
DATA RECORD Nombre del registro.
Vamos a explicar un poco mas detalladamente cada clusula de la FILE SECTION. Quiero dejar claro que sta es mas
amplia, pero que como en el resto del manual voy a explicar lo que creo que es mas importante y en definitiva lo que
mas se utiliza.
Clusula FD nombre del fichero que previamente habiamos descrito en la clusula SELECT de la INPUT-OUTPUT
SECTION en la ENVIRONMENT DIVISION.
Clusula BLOCK CONTAINS cuando queremos que por cada bloque en disco se graben mas de un registro, aqui
especificamos el nmero de ellos que va a contener cada bloque, (512, 1024), si no se especifica se supone que cada
registro va a ocupar un bloque de memoria, o bien ser el propio compilador el que haga el clculo mas apropiado.
Clusula RECORD CONTAINS el nmero de caracteres que tiene el registro sumando todos sus campos, puede ser fija
o variable. Si es fija utilizamos un valor y si es variable un rango desde hasta, si no se espicifica ser el propio
compilador quien la determine.
Clusula LABEL RECORD puede tener dos valoresSTANDARD u OMITTED , el primer caso indica que cada vez que se
accede a un registro el compilador har las comprobaciones estandares descritas por el propio compilador y en el
segundo stas sern omitidas. Para el caso de los ficheros de datos en disco se suele poner STANDARD y cuando el
fichero es de impresora se indica OMITTED.
Clusula DATA RECORD debido a que un mismo fichero puede tener varias descripciones de registro, aqui indicamos

los nombre de stas que debern estar descritas a nivel 01. Normalmente no se utiliza y casi siempre se suele utilizar
una sola descripcin por fichero, por lo que no suele aparecer en casi ningn programa.
A continuacin vendra la descripcin de todos los campos que comprenden el registro, pero antes de ver sto es
aconsejable tener claro como se define una variable con todas sus opciones ya que a fin de cuentas, los campos de un
registro no son mas que eso, variables, con la nica condicin de que al formar parte de un registro la informacin
que contiene nos identifica los datos que se guardarn en el medio en que est el fichero (disco, impresora).
Antes de seguir adelante quisiera decir que siendo el cobol un lenguaje orientado casi exclusivamente al manejo de
ficheros de datos, es sin duda, sta parte que hemos visto la mas importante. Un buen anlisis de los ficheros a
utilizar antes de empezar es fundamental y nos evitar muchos calentamientos de cabeza, tener claro cuales van a
ser sus claves tanto la principal como las alternativas, definir bien todos sus campos y dejar espacio libre para un
posible aumento de datos. Esto lo digo porque si creamos un fichero con 80 caracteres por registro y al cabo de un
tiempo debemos de introducir un nuevo campo que no habiamos preveido, tendremos que modificar toda su
estructura rehaciendo el fichero y recompilando todos los programas a los que afecte, si en cambio dejamos un poco
de espacio nos evitaremos la reestructuracin del archivo, sto se consigue utilizando el nombre de
variable FILLER como veremos un poco mas abajo.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
COMMUNICATION SECTION
SCREEN SECTION
Para la WORKING y la LINKAGE las normas son las mismas, asi que las veremos conjuntamente. Las otras dos
secciones, COMMUNICATION ySCREEN no las veremos en el manual.
Nmero de Nivel ...... Nombre de campo ...... PIC, VALUE, REDEFINES, OCCURS, JUST, SIGN, SYNC.
Cada campo declarado debe de llevar un nmero de nivel que le informe al compilador del tipo de campo que es:
El nivel 01, identifica la primera entrada de un registro o la primera entrada de un campo que se va a subdividir.
El nivel 77, identifica a una variable que no se va a subdividir y que no forma parte de ningn registro.
El nivel 88, identifica los posibles valores condicionales de una variable previamente definida.
Los niveles 02 al 49 indicarn las distintas subdivisiones de un campo cuya primera entrada ha sido definida a
nivel 01. Los niveles 01 y 77 debern de ir siempre en el Area A (Col 8) el resto es independiente.
A continuacin pondremos el nombre del campo, que no podr ser ninguna palabra cobol ni llevar ningn carcter
extrao, principalmente se utilizarn letras y nmeros o guiones. Es posible que algn campo que definamos nunca
vaya a ser usado por el programa pero si en cambio es necesario que exista para que nos reserve el espacio, le
llamaremos FILLER.
Y finalmente podrn venir una serie de clusulas como:

PICTURE / PIC esta palabra es la que utilizamos para identificar el tipo de datos que va a contener la variable. Los
posible valores son:
DE CAMPOS.
9 - Para campos numricos.
A - Para campos alfabticos.
X - Para campos alfanumricos.
S - Indica variable con signo.
V - Indica punto decimal.
DE EDICIN.
$ - Representa la aparicin del signo $ delante del campo numrico.

. - Indica separacin de miles.


, - Indica punto decimal. (estas dos pueden variar segn hayamos especificado en SPECIAL-NAMES DECIMAL-POINT IS
COMMA).
Z - Representa un espacio para el 0 a la izquierda en campos numricos.
* - Igual pero se cambia el 0 por *.
B - Indica un espacio en blanco.
- + - Indican la aparicin del signo correspondiente.
Puede haber mas pero los mas utilizados son los que se han comentado.
Para indicar la longitud del campo se puede repetir el smbolo tantas veces como longitud tenga o expresarla entre
parntesis, es decir para definir una variable alfanumrica de 10 caracteres se pondra:
PIC X(10) o PIC XXXXXXXXXX. Los valores S y V solo pueden aparecer una vez por cada variable.
A continuacion vamos a ver un ejemplo de todo lo que hemos explicado para que se vaya quedando claro.
WORKING-STORAGE SECTION.
01 DOMICILIO.
02 TIPO PIC XX.
02 NOMBRE PIC X(20).
02 NUMERO PIC 9(4).
Fijaros que hemos definido 4 variables, la primera no tiene PIC, por que indica que est subdividida en las 3 restantes.
La segunda "TIPO" nos dice que es una variable alfanmerica y que puede contener 2 caracteres como mximo, la
utilizariamos para guardar el tipo de calle, avenida, paseo, plaza, etc.. Para la tercera "NOMBRE" va a ser tambin
alfanumrica pero con una longitud mxima de 20 caracteres y nos servir para guardar el nombre de la calle, plaza,
avenida, etc y la ltima "NUMERO" indica una variable numrica de 4 dgitos, que quiere decir que puede contener
valores entre 0 y 9999.
Observad que en Cobol no se guardan las varables numricas por bytes como ocurre con todos los lenguajes actuales
sino por nmero de dgitos, con ello quizs desaprovechamos mas la memoria pero en cambio tenemos un control
mejor del dato que puede contener nuestra variable.
Si TIPO fuera "AV", NOMBRE "DE LOS DESAMPARADOS " y NUMERO "15", si nos refiriramos a la variable DOMICILIO
sta tendra el siguiente valor:"AVDE LOS DESAMPARADOS 0015".
Vamos a ver algunos ejemplos mas de variables posibles:
WORKING-STORAGE SECTION.
77 FECHA PIC 9(8).
77 FECHA-EDIT PIC ZZ/ZZ/ZZZZ.
77 IMPORTE PIC S9(8)V99.
77 IMPORTE-EDIT PIC ZZ.ZZZ.ZZZ,ZZ-.
01 ESTADO PIC 9.
88 SOLTERO VALUE 1.
88 CASADO VALUE 2.
88 DIVORCIADO VALUE 3.
Suponiendo que el valor de FECHA es 01111998 (1 Nov de 1998) y FECHA-EDIT es el mismo, ste ltimo se
representara: 01/11/1998.
Si IMPORTE es 12815V37 en negativo e IMPORTE-EDIT el mismo, ste se representara: 12.815,37-.

VALUE esta palabra a continuacin del PIC indica el valor inicial que contendr la variable hasta que ste sea
modificado. Por ejemplo podemos definir una variable:

WORKING-STORAGE SECTION.
01 RAYA PIC X(10) VALUE "----------".
01 MINOMBRE PIC X(30) VALUE "ANDRES MONTES".
Asi tendremos una variable llamada RAYA que contiene 10 guiones y otra llamada MINOMBRE que contiene eso, mi
nombre, si os fijais con sta clusula convertimos cualquier variable en una constante. En cualquier momento del
programa podremos cambiar ese valor. Para las variables numricas es conveniente ponerlas siempre con VALUE 0
para que al empezar cada programa estemos seguros de que no nos arrastra ningn valor. Normalmente al ejecutar
un programa se ponen todas las variables a 0, pero si ese programa ha sido llamado desde otro no pasar eso, por eso
no viene mal inicializarlas todas a 0.

REDEFINES esta clusula se utiliza para dar mas de un nombre y formato a un mismo campo. Este debe de ir a
continuacin del nombre de campo y antes del nombre del campo a que hace referencia, deben de estar en el mismo
nivel y uno a continuacin del otro en el orden de declaraciones.
WORKING-STORAGE SECTION.
01 DIAS PIC X(21) VALUE "LUNMARMIEJUEVIESABDOM".
01 TADIA REDEFINES DIAS.
02 DIA PIC XXX OCCURS 7 TIMES.
He incluido la clusula OCCURS para que sea vea un ejemplo prctico, aunque todava no lo he explicado, pero como
veis a partir de ste momento DIAS y TADIA tendrn siempre el mismo valor pero con diferente nombre y formato de
datos.

OCCURS esta clusula es la que se utiliza para declarar tablas. Una tabla es un conjunto de elementos con un mismo
tipo y longitud que se denominan con el mismo nombre y se diferencian por un subndice. No se puede especificar en
niveles 01, 77 88. Puede tener varios formatos:
WORKING-STORAGE SECTION.
01 NUMERO-DIAS PIC 99.
01 TABLA.
02 DIA PIC XXX OCCURS 7 TIMES.
02 MES PIC 99 OCCURS 28 TO 31 DEPENDING NUMERO-DIAS.
02 OTRA PIC X(5) OCCURS 5 INDEXED BY IN-OTRA.
En la primera "DIA" indico que esa tabla va a tener 7 elementos que llamaremos DIA (nn) y entre parntesis el orden
dentro de la tabla. Si hubiramos guardado en sta tabla las 3 primeras letras de cada dia de la semana, para obtener
el valor del lunes pediriamos DIA (1), para el del Jueves DIA (4) y para el del domingo DIA (7).
En la segunda "MES" le indicamos que los elementos de la tabla pueden variar dependiendo del valor de la variable
"NUMERO-DIAS" que ha de estar definida antes de la tabla y siempre dentro de los mrgenes de 28 y 31.
En la tercera le indicamos adems que la variable IN-OTRA va a ser la encargada de dirigirnos por los elementos de la
tabla, sta variable no puede estar definida antes.

JUST la justificacin de los valores de los campos suele ser a la izda. para los alfanumricos y a la derecha para los
numricos, si en cambio queremos cambiar este orden tendremos que incluir sta clusula.
WORKING-STORAGE SECTION.
01 NOMBRE PIC X(10).

01 NOMBRE1 PIC X(10) JUST RIGHT.


Si le diramos el mismo valor a las dos variables "ANDRES", la primera nos dara "ANDRES
" ANDRES", la diferencia, su justificacin.

" y la segunda

USAGE con sta clusula determinamos el formato en que se guarda el contenido de las variables (numricas, ya que
las alfanumricas siempre ocuparn un byte por cada caracter). Con todos los campos se puede operar (obviamente)
pero solo los que se definan como DISPLAY sern editables directamente. Tiene varias posibilidades:

DISPLAY, es la forma por defecto e indica que cada dgito ocupar un byte, es la que se toma por defecto y la
que memoria ocupa.

BINARY, COMP-1, COMP-3, COMP-6, son diferentes formas de compactacin de los datos. COMP-6 (la mas
usual) guarda dos dgitos en cada byte, COMP-3 es igual pero admite signo el cual ira en los cuatro ltimos
bites del ltimo byte. Las restantes formas se utilizan menos.

WORKING-STORAGE SECTION.
01 IMPORTE PIC 9(8). Ocupa 8 bytes uno por cada dgito.
01 FECHA PIC 9(8) COMP-6. Ocupa 4 bytes, uno cada 2 dgitos.
01 PRECIO PIC S9(8)V99 COMP-3. Ocupa 6 bytes, uno para los dos decimales, cuatro para la parte entera y uno para el
signo.
Cuando el tamao es impar el signo no ocupa ya que comparte byte con el ltimo dgito, el punto decimal tampoco
ocupa espacio, ya que solo indica su posicin. Estas tres formas que he utilizado son las mas comunes, yo por ejemplo
como las capacidades de los ordenadores son tan grandes ahora, cuando defino las variables en la WORKING nunca
utilizo ninguna compactacin es decir no utilizo la clusula USAGE (que por cierto y como habreis visto se puede
omitir) y por defecto toma DISPLAY (un byte por caracter).
LINKAGE SECTION. En sta seccin se declaran las variables de igual forma solo que las que aqui declaremos nos van a
servir de enlace para pasar informacin a otro programa que ser llamado por el principal.

Ejemplo:
DATA DIVISION.
FILE SECTION.
FD CLIENTES BLOCK CONTAINS 4 RECORDS
RECORD CONTAINS 128 CHARACTERS
LABEL RECORD STANDARD.
01 REG-CLIENTE.
02 KEY-CLIENTE.
r 03 CLICOD
rPIC 9(4) COMP-6.
02 CLINOM PIC X(30).
02 CLIDIR PIC X(30).
02 CLIPOB PIC X(20).
02 CLIPRO PIC X(20).
02 CLINIF PIC X(9).
02 FILLER PIC X(17).
FD IMPRESORA LABEL RECORD OMITTED.
01 LINEA PIC X(132).
WORKING-STORAGE SECTION.

01 TABLA.
02 FILLER PIC X(12) VALUE "LUNMARMIEJUE" .
02 FILLER PIC X(9) VALUE "VIESABDOM" .
01 TABLAIDA REDEFINES TABLA.
02 ELEDIA PIC XXX OCCURS 7 TIMES.
01 FECHA PIC 9(8).
01 IMPORTE PIC S9(8)V99.
01 VALORES.
02 UNO PIC 99 VALUE 0.
02 DOS PIC 9(6)
02 TRES PIC 9(4)V99.
01 LINPA.
02 LIMPOR PIC ZZ.ZZZ.ZZZ,ZZ-.
Como veis he diseado el fichero CLIENTES para que cada bloque de 512 Kb, ocupe 4
registros, dejando 17 caracteres (FILLER), para una posible ampliacin del registro.
En la descripcin del archivo IMPRESORA se declara una variable a nivel 01 que hace
referencia al total del registro para luego ir moviendo a ste campo el valor de lo que
queramos imprimir.
En la WORKING se han declarado algunos campos con distintos formatos, fijaros en la
tabla que gracias al REDEFINES hemos llenado con las tres primeras iniciales de cada dia,
asi al referirnos a la variable ELDIA (2) su contenido ser "MAR".

Nota final:
La DATA DIVISION nos sirve para tener todas nuestras variables bien definidas, ya sean independientes o que formen
parte de algn fichero para poder operar con ellas en la PROCEDURE DIVISION. Me acuerdo de cuando empezamos a
estudiar que para otros lenguajes no era necesaria la declaracin de variables previamente y en cambio ahora en la
mayora de los lenguajes se exige que se declaren, eso significa que el Cobol no iba mal encaminado.
Tenemos que tener siempre muy claro que con cualquier campo podemos hacer lo que queramos, por ejemplo si en
un registro de 120 caracteres nosotros en un programa solo vamos a utilizar los 40 primeros podemos definir todo lo
restante como un campo FILLER y listo o viceversa si un campo de un registro lo tenemos definido como alfanumrico
de 30 en un programa necesitamos los 10 primeros caracteres por un lado y los veinte restantes por otro, puese nada
se subdivide para ese programa y no pasa nada.
Espero que haya quedado por lo menos medio clara la explicacin de sta tercera DIVISION, evidentemente con la
prctica es con lo que mas vamos a aprender siempre claro est que tengamos al menos unas nociones mnimas.
Tenemos que tener en cuenta que como en todos los lenguajes, ya sean de programacin o de habla (espaol, ingls,
frances) son muchas las opciones que nos ofrecen pero al final siempre utilizamos las que mas nos gustan o las que
consideramos mas tiles.
Una cosa que considero importante es dar a las variables un nombre un poco lgico que nos recuerde su contenido,
por ejemplo si queremos guardar la fecha, pues llamarla FECHA, si queremos guardar el N.I.F. del gerente, NIFGEREN,
etc ...

Potrebbero piacerti anche