Sei sulla pagina 1di 91

MANUAL DE COBOL

Elaborado por Sergio Oswaldo Rojas Bernal Pgina 1



CONTENIDO CURSO DE COBOL



CAPITULO I INTRODUCCIN Y GENERALIDADES

INTRODUCCIN
TIPOS DE DATOS
TIPOS DE PALABRAS
REAS DE TRABAJO
TIPOS DE CONSTANTES


CAPITULO II ESTRUCTURA DEL COBOL

IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION


CAPITULO III VERBOS DE ENTRADA/SALIDA/ASIGNACIN/UTILITARIOS

DISPLAY
ACCEPT
MOVE

CAPITULO IV VERBOS ARITMETICOS

ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE

CAPITULO V CONDICIONALES

IF



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 2

EVALUATE

CAPITULO VI VERBOS DE CONTROL

PERFORM
o BSICO
o ANIDADOS
o TIMES
o UNTIL
o THRU
o VARYING
o COMBINADO
o LINEA
TIMES
UNTIL
VARYING


CAPITULO VII FORMATOS DE EDICION

MASCARAS


CAPITULO VIII TABLAS DE MEMORIA

OCCURS
DEPENDING ON
ORDENAMIENTOS
BUSQUEDAS


CAPITULO IX ARCHIVOS SECUENCIALES

OPEN
CLOSE
READ
WRITE
REWRITE



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 3

LINEAS DE BALANCE
BUSQUEDAS EN ARCHIVOS


CAPITULO X ARCHIVOS INDEXADOS

OPEN
CLOSE
READ
WRITE
REWRITE
START
DELETE

CAPITULO XI SUBPROGRAMACION
CALL
LINK
COPY


CAPITULO XII BUSQUEDAS EN ARCHIVOS

SIMPLES
LINEAS DE BALANCES



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 4

CURSO DE COBOL

CAPITULO INTRODUCCIN Y GENERALIDADES


INTRODUCCION

C COMMAND
O
B BUSINESS
O ORIENTED
L LANGUAJE


HISTORIA

1959
1974 ANSI
1985 RMCOBOL/85
1991 COBOL ENTERPRISE (HOST)
2002 (COBOL ANSI-2002)
2007 Se esta preparando una nueva versin.

Existen varios compiladores que permiten emplear COBOL como lenguaje de
scripting y de servicio Web, Tambin existen compiladores que permiten generar
cdigo COBOL para la plataforma .NET Y EJB(Enterprise Java Beans).

REAL COBOL
COBOL-I
COBOL-II
MICROFOCUS COBOL
VICOBOL.



TIPOS DE DATOS

TIPO DATO FORMATO LONGITUD VALORES



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 5

ALFABETICOS A 256 car. A..Z, a..z
NUMERICOS 9 18 dig. 0..9
ALFANUMERICO
S
X 256 car. A..Z, a..z,0..9,
caracteres
especiales.


TIPOS DE PALABRAS

USUARIO
30 Caracteres mximo
No caracteres especiales (-)

EJM:
LEER-ARCHIVO-MAESTRO

-CONTADOR
CONTADOR-

RESERVADAS
READ, DISPLAY, MOVE,etc.



REAS DE TRABAJO

A Columnas 8 a la 11
B Columnas 12 a la 72

1-6 Enumeracin automtica de las lneas
7 * -
73-80 No se utilizan

TIPOS DE CONSTANTES

ALFABETICAS
NUMERICAS
ALFANUMERICAS



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 6

FIGURATIVAS
ZERO
ZEROS 0
ZERUES

SPACE
SPACES Espacios en blanco

LOW-VALUES Valores Nulos
HIGH-VALUES Mximo valor

ALL

QUOTTE Comilla Sencilla ()
QUOTTES Comilla Doble ()




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 7

CAPITULO II ESTRUCTURA DEL COBOL


IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION


8
IDENTIFICATION DIVISION.
PROGRAM-ID. Nombre del programa.
AUTHOR. Nombre del autor.
INSTALLATION. Lugar donde est instalado.
DATE-WRITTEN. Fecha de creacin.
DATE-COMPILED. (Fecha de compilacin.)
REMARKS. Comentarios.


EJM:
8
IDENTIFICATION DIVISION.
PROGRAM-ID. PRUEBA.
AUTHOR. SERGIO OSWALDO ROJAS BERNAL.
INSTALLATION. BBVA COLOMBIA.
DATE-WRITTEN. 23-AGO-2010.
DATE-COMPILED.
REMARKS. PROGRAMA QUE GENERA UNA PRUEBA DE COBOL.








8 12
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 8

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.
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.

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 podramos 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...





EJM:
8 12
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 390.
OBJECT-COMPUTER. IBM 390.
SPECIAL-NAMES.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 9

DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT NOMINA ASSIGN TO DISK DATOS
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS VAR-ESTADO.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 10


8 12
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
COMMUNICATION SECTION.
SCREEN SECTION.
REPORT SECTION.


Niveles : 01 y 77
Subniveles : 02..49
Subnivel : 88 nombres de condicin

8 12
FILE SECTION.
FD Nombre del fichero.
BLOCK CONTAINS Numero de registros por bloque RECORDS
RECORD CONTAINS Nmero de caracteres por registro
CHARACTERS
LABEL RECORD Etiqueta de registro
DATA RECORD Nombre del registro.
01 Nombre del registro.
02 CAMPO 1.
02 CAMPO 2.
02 CAMPO 3.
02 CAMPO 4.
.
.
02 CAMPO n.





8 12
WORKING-STORAGE SECTION.
01 VAR-ENTERA PIC 9(8) VALUE ZEROS.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 11

01 VAR-ENTERA PIC 99999999 VALUE ZEROS.
01 VAR-ALFABE PIC A(30) VALUE SPACES.
01 VAR-ALFANU PIC X(50) VALUE SPACES
01 RAYA PIC X(80) VALUE ALL -.
01 VAR-REAL PIC 9(8)V99 VALUE ZEROS.
01 VAR-REAL2 PIC 9(8)V9(2) VALUE ZEROS.
01 VAR-SIGNO PIC S9(8)V99 VALUE ZEROS.
77 IVA PIC 9V99 VALUE 0.16.



LINKAGE SECTION.
01 PAR-FECHA PIC 9(8).
01 PAR-SALDO PIC S9(8)V99.


COMMUNICATION SECTION.
SCREEN SECTION.
REPORT SECTION.





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 12

8 12
PROCEDURE DIVISION (USING Variable, Variable ...).
DECLARATIVES.
Nombre-seccionSECTION.
USE AFTER ERROR PROCEDURE ON tipo.
Nombre-parrafo.
Sentencias.
.....
END DECLARATIVES.
Nombre-seccion SECTION.
Nombre-parrafo.
Sentencias.


PROCEDURE DIVISION (USING Variable, Variable ...).
Cuando especificamos USING en la linea de PROCEDURE DIVISION , despus
deberemos de dar los nombres de variables que hayamos definido en la LINKAGE
SECTION, para compartir en el programa, lo que nos indicar que ste ha sido
llamado por otro programa y que esas variables traern un valor procedente del
programa llamador, que a su vez utiliz la instruccin CALL con las mismas
variables.

Se pondran tantos prrafos y secciones como quisieramos controlar, siempre
teniendo en cuenta que sta se acaba cuando se indique END DECLARATIVES.
Si no quisieramos utilizar sta seccin, podriamos de igual manera controlar los
errores en nuestro programa preguntando siempre por la variable de error de cada
fichero que se defini como FILE STATUS en la FILE-CONTROL.

PROCEDURE DIVISION.
INICIO.
Instruccin1
nstruccin2
Instruccin3
Instruccin-n
STOP RUN.






MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 13

CAPITULO III VERBOS DE
ENTRADA/SALIDA/ASIGNACIN Y UTILITARIOS



ACCEPT: Verbo de Entrada

Formato para aceptar datos del sistema o variables de entorno.

ACCEPT variable FROM (DATE, DAY, DAY-OF-WEEK, TIME, CENTURY-
DATE, CENTURY-DAY, ESCAPE-KEY,

Segn la opcin escogida, as ser el valor que contendr la variable usada,
una vez completada la sentencia. Veamos cada una de las opciones:

DATE, devuelve la fecha en formato AAMMDD, por lo que la variable
debe de estar definida con PIC 9(6).
CENTURY-DATE, igual que DATE, pero acepta la fecha con 8
dgitos en formato SSAAMMDD. Definir con PIC 9(8).
DAY, devuelve el ao y el da del ao en que estamos con el formato
AADDD, siendo el valor 1, para el 1 de Enero y as sucesivamente.
Debe de estar definida con PIC 9(5).
CENTURY-DAY, igual que DAY, pero acepta 4 dgitos para el ao,
quedando el formato AAAADDD. Definir con PIC 9(7).
DAY-OF-WEEK, devuelve un dgito que indica el da de la semana,
siendo 1 el Lunes, 2 el Martes, ... Aqu, la variable debe de estar
definida como PIC 9.
TIME, devuelve la hora con formato HHMMSSMM, la variable debe
de estar como PIC 9(8).
ESCAPE-KEY, devuelve el cdigo de la tecla de excepcin pulsada,
debe de estar definida con PIC 99 y segn el compilador los valores
pueden ser distintos, pero los bsicos suelen ser los mismos, por
ejemplo: ENTER=13, FLECHA ARRIBA=52, FLECHA-ABAJO=53 y
las teclas de funcin desde F01 hasta F8 tomaran los valores del 1
al 8, TAB=9.
EJEMPLO:
ACCEPT VAR-ENTERA
ACCEPT VAR-FECHA FROM DATE



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 14

ACCEPT VAR-HORA FROM TIME


DISPLAY: Verbo de salida

DISPLAY variable, literal CLAUSULAS ... LINE, COL, SIZE, HIGH, LOW,
REVERSE, BEEP, BLINK, ERASE.

DISPLAY REGISTROS LEIDOS :
DISPLAY VAR-ENTERA



MOVE, Verbo de Asignacin
.

Formato:

MOVE variable, valor TO variable, variable, variable, ....

EJEMPLO:
A=B

MOVE B TO A

A= 0

MOVE 0 TO A
MOVE ZEROS TO A




INITIALIZE, se utiliza para inicializar variables segn su tipo, es decir
pondr a ceros todas las variables numricas o de edicin y a espacios en
blanco las alfabticas y alfanumricas.
WORKING-STORAGE SECTION.
01 CANCEN1-REG.
10 EL1LOT-EMISORA PIC X(10).



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 15

10 EL1LOT-FECHA-ALTASOP PIC X(10).
10 EL1LOT-NORDEN-SOPORTE PIC S9(5).
10 EL1LOT-NUM-LOTE PIC S9(5).
10 EL1LOT-COD-CLASE-SERV PIC X(3).
10 EL1LOT-TIPO-LOTE PIC X(1).
10 EL1LOT-CLAS-LOTE PIC X(1).
10 EL1LOT-IDENT-CIA PIC X(10).
10 EL1LOT-NOMBRE-CIA PIC X(16).
10 EL1LOT-COD-ENTI-REC PIC X(8).
10 EL1LOT-RUTYTRAN-ACH PIC X(10).
10 EL1LOT-DESCR-TRANS PIC X(10).
10 EL1LOT-IND-RESP-OPS PIC X(2).
10 EL1LOT-MOTIVODEVO PIC X(8).
10 EL1LOT-DISCR-DATA PIC X(20).
10 EL1LOT-COD-EST-LOT PIC X(2).
10 EL1LOT-FECALTA PIC X(10).
10 EL1LOT-FECPROC PIC X(10).
10 EL1LOT-FECEFECT PIC X(10).
10 EL1LOT-FECENVIO PIC X(10).
10 EL1LOT-FECDEVOL PIC X(10).
10 EL1LOT-NUM-REGS PIC S9(8).


PROCEDURE DIVISION.
INICIO.
INITIALIZE CANCEN1-REG.




INSPECT, esta sentencia se utiliza para contar, reemplazar o contar y
reemplazar caracteres o grupos de caracteres dentro de un campo. Se
puede contar las veces que aparece un caracter, o cambiar todos esos
caracteres por otros, etc ...

Esta instruccin tiene formatos diferentes segn lo que se desee hacer,
as que vamos a ver cada uno de ellos por separado.

Formato 1:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 16


INSPECT campo1
TALLYING variable1 FOR ( CHARACTERS)
(( BEFORE/AFTER) INITIAL) Cadena1
(ALL)(LEADING) Cadena2 ...
(Se puede repetir de nuevo)

Este formato es el utilizado para contar el nmero de veces que aparece
Identificador1 en el campo1 y guardar el valor en la variable1 que
previamente hayamos definido en la WORKING.

CHARACTERS, indica que cuente todos los caracteres del
campo incluso los espacios en blanco.
ALL, indica que tiene que buscar en todos los caracteres del
campo, la cadena especificada en Cadena2.
LEADING, indica que tiene que buscar la cadena especificada en
Cadena2, pero solo hasta que encontremos uno diferente, si nada
mas empezar es diferente el resultado sera directamente 0.
BEFORE INITIAL, busca solo hasta que aparezca la cadena
especificada como Cadena1.
AFTER INITIAL, empieza a buscar justo despus de la cadena
especificada en Cadena1.




EJEMPLO:
WORKING-STORAGE SECTION.
WORKING-STORAGE SECTION.
77 TEXTO PIC X(15) VALUE "PAGINA DE COBOL".
77 CONTA PIC 9(8).
...
PROCEDURE DIVISION.
INICIO.
INSPECT TEXTO TALLYING CONTA FOR CHARACTERS.
...
El valor de conta ser de 15 que son los caracteres que tiene la variable
TEXTO.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 17

INSPECT TEXTO TALLYING CONTA FOR ALL "A".
...
El valor de conta ser de 2 que son las veces que aparece la letra A en la
variable TEXTO.

INSPECT TEXTO TALLYING CONTA FOR LEADING "A".
...
El valor de conta ser de 0 porque no aparece ninguna A en el primer
carcter de la variable TEXTO.

INSPECT TEXTO TALLYING CONTA FOR ALL "A"
BEFORE INITIAL "N".
...
El valor de CONTA ser de 1 que son las veces que aparece la letra A en la
variable TEXTO hasta la aparicin del caracter N.

INSPECT TEXTO TALLYING CONTA FOR ALL "A"
AFTER INITIAL "G".
...
El valor de CONTA ser de 1 que son las veces que aparece la letra A en la
variable TEXTO, empezando a contar desde el caracter G.
77 TEXTO PIC X(15) VALUE "PAGINA DE COBOL".
77 CONTA PIC 9(8)....
Formato 2:

INSPECT campo1
REPLACING variable1 CHARACTERS BY Cambio1
(( BEFORE/AFTER) INITIAL)Cadena1
(ALL)(LEADING)( FIRST) Cadena2...
(Se puede repetir de nuevo)

Con este formato podemos cambiar caracteres de Campo1, su
funcionamiento es igual que el anterior formato solo que en vez de
contar reemplaza.

WORKING-STORAGE SECTION.
77 TEXTO PIC X(15) VALUE "PAGINA DE COBOL".
77 CONTA PIC 9(8).
...



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 18

PROCEDURE DIVISION.
INICIO.
INSPECT TEXTO REPLACING CHARACTERS BY "H".
...
El valor de TEXTO ser "HHHHHHHHHHHHHHH", es decir cambia todos
los caracteres por el caracter H.

INSPECT TEXTO REPLACING ALL "A" BY "I".
...
El valor de TEXTO ser "PIGINI DE COBOL", es decir ha cambiado todas
las A por I.

INSPECT TEXTO REPLACING FIRST "A" BY "O".
...
El valor de TEXTO ser "POGINA DE COBOL", solo cambia la primera A
por una O.


MOVE "PAGIPATOPETOPA" TO TEXTO.
INSPECT TEXTO REPLACING ALL "PA" BY "--"
AFTER INITIAL "G" BEFORE INITIAL "T".
...
Complicando un poco mas, el valor de TEXTO despus de la sentencia
INSPECT ser PAGI--TOPETOPA, es decir se cambia todas las PA por --
pero empezando a buscar a partir de la primera letra G y justo hasta la letra
T.

MOVE "PAGIPATOPETOPA" TO TEXTO.
INSPECT TEXTO TALLYING CONTA FOR ALL "PA"
REPLACING ALL "TO" BY "PO" AFTER INITIAL "OP".
...
Aqu hemos mezclado ambos formatos y el resultado es el siguiente. El
valor de CONTA es 3 que son las veces que aparece la cadena PA en
TEXTO y despus se ejecuta el REPLACING y el resultado da que TEXTO
vale PAGIPATOPEPOPA, ya que ha cambiado todos los TO por PO pero
despus de la cadena OP.


Formato 3:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 19



INSPECT campo1
CONVERTING Identificador1 TO Identificador2
(( BEFORE/AFTER) INITIAL) Cadena1 ... (Se puede repetir de nuevo)

Con este formato convertimos los caracteres que se especifiquen en
identificador1 por los que pongamos en identificador2, respetando el
orden.

Veamos algunos ejemplos, se suele utilizar mucho para que al aceptar
un campo nos de igual se ha sido introducido en maysculas o en
minsculas ya que lo convertiramos a alguno de los formatos.





WORKING-STORAGE SECTION.
77 TEXTO PIC X(15) VALUE "PAGINA DE COBOL".
...
PROCEDURE DIVISION.
INICIO.
INSPECT TEXTO CONVERTING "AO"TO "12".
...
El valor de TEXTO ser "P1GIN1 DE C2B2L", convertir todas las A por 1 y
todas las O por 2.

INSPECT TEXTO CONVERTING "
ABCDEFGHIJKLMNOPQRSTUVWXYZ"
TO "abcdefghijklmnopqrstuvwxyz".
...
El valor de TEXTO ser "pagina de cobol" ya que ha convertido todas las
letras maysculas por minsculas.


STRING, se utiliza para unir o concatenar campos o partes de estos y el
resultado almacenarlo en otro campo. En la unin se pueden incluir tanto
variables como literales o constantes de texto.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 20


STRING campo1, literal1
DELIMITED BY (campo2, literal2)(SIZE)
INTO Campo3
(WITH POINTER Identificador1)
( ON OVERFLOW Sentencia1)
( NOT ON OVERFLOW Sentencia2)

DELIMITED BY, indica hasta donde vamos a "coger" del campo para
concatenar sin contar ese caracter o cadena que se especifique en
campo2 o literal2, es decir si tenemos un campo con un valor =
"HOLA" y especificamos DELIMITED BY "L" a la hora de la
concatenacin nos hubiera cogido solo el HO, ya que al encontrarse
la primera L hubiera parado.
SIZE, indica que se pasar todo el contenido del campo1 o literal1
sin limitaciones.
INTO, con esto indicamos en que variable se guardar el resultado,
campo3.
WITH POINTER, si incluimos esta clusula el valor de identificador1
ser en la posicin en que empezar a contener datos la variable
que recibe el STRING. Ese identificador1 debe estar definido como
binario. Por defecto el valor es 1.
ON OVERFLOW, se ejecutara Sentencia1 si hubiera habido un error
al hacer la concatenacin, por ejemplo si se especifica Identificador1
con un valor superior al tamao del Campo3.
NOT ON OVERFLOW, se ejecutar Sentencia2 si no existe error en
la operacin.

EJEMPLO:

STRING "HOY ES " VAR-DIA " DE " VAR-MES " DE "
VAR-ANO
DELIMITED BY SIZE
INTO VAR-ENCADENA

Obtendriamos en VAR-ENCADENA:
HOY ES 16 DE AGOSTO DE 2010
.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 21


MOVE 4 TO PUNTO.
STRING "HOY ES " DIA " DE " DELIMITED BY SIZE
TMES (MES) DELIMITED BY " "
" DE " ANIO DELIMITED BY SIZE INTO CONSTRING
WITH POINTER PUNTO.

Es decir habr empezado a concatenar a partir de la posicin 4 del
campo CONSTRING. Si el valor de CONSTRING previamente era
espacios habra dejado 3 espacios en blanco y si hubiera sido cualquier
otro hubiera respetado los 3 primeros caracteres que tuviera.
UNSTRING, hace exactamente lo contrario de que hemos visto que haca
STRING, es decir divide el contenido de un campo en otros.

UNSTRING campo1, literal1
DELIMITED BY (campo2, literal2)(ALL)
OR (campo2, literal2)(ALL)
(Se puede repetir de nuevo)
INTO Campo3, Campo4, ....
( DELIMITER Identificador1)
( COUNT Identificador2)
(Se puede repetir de nuevo)
(WITH POINTER Identificador3)
(TALLYING Identificador4)
( ON OVERFLOW Sentencia1)
( NOT ON OVERFLOW Sentencia2)

DELIMITED BY, indica el lmite hasta donde vamos cogiendo el campo1
para partirlo. Igual que en STRING, solo que con la funcin a la inversa.
OR, es igual que DELIMITED y se utiliza si hay varios delimitadores
sobre los que buscar.
INTO, indica en que campo o campos se guardar la informacin que
vaya fragmentando.
DELIMITER, va a contener en cada caso el elemento separador, si
hemos incluido en DELIMITED varios, Identificador1 guardar el
carcter que de los elegidos ha sido el causante de la fragmentacin.
COUNT, cuenta el nmero de caracteres incluidos en la fragmentacin.
DELIMITER y COUNT, se podrn usar si se ha especificado
DELIMITED. Podemos usar tantos DELIMITER y COUNT como campos



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 22

se vayan a crear en la fragmentacin.
TALLYING, si especificamos esta opcin la instruccin nos guardar en
Identificador4 el nmero de campos que se han utilizado en la
fragmentacin.
POINTER, indica desde que posicin va a ser examinado el campo que
desea desfragmentar, por defecto su valor es 1, es decir desde el primer
caracter.
ON OVERFLOW, se ejecutara Sentencia1 si hubiera habido un error al
hacer la operacin.
NOT ON OVERFLOW, se ejecutar Sentencia2 si no existe error en la
operacin.

WORKING-STORAGE SECTION.
01 LAFECHA PIC X(30) VALUE "HOY ES 16 DE AGOSTO DE 2010".
01 TEXTOS.
02 TEXTO1 PIC X(20).
02 TEXTO2 PIC X(20).
02 DIA
02 TEXTO3 PIC X(20).
02 ELMES PIC X(10).
02 TEXTO4 PIC X(20).
02 ELAO PIC X(10).


PROCEDURE DIVISION.
INICIO.
UNSTRING LAFECHA DELIMITED BY " "
INTO TEXTO1 TEXTO2 DIA TEXTO3
ELMES COUNT LETRAS TEXTO4 ANIO.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 23


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:
FILLER
REDEFINES nombre de dato-2
nombre de dato-1


La 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 88.

La redefinicin de un campo compuesto se hace inmediatamente
despus del ltimo de los campos elementales que forman parte de
aquel.

Esta clusula va a permitir poder inicializar una tabla en el momento
de declararla.


WORKING-STORAGE SECTION.
01 VAR-FECHA PIC X(10).
01 VAR-FECHA-PAR REDEFINES VAR-FECHA.
02 AO PIC 9(4).
02 FILLER PIC X(1).
02 MES PIC 9(2).
02 FILLER PIC X(1).
02 DIA PIC 9(2).





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 24


CAPITULO IV VERBOS ARITMETICOS



ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE


ADD: Suma

FORMATOS:
12
1.- ADD variable1 variable 2.... TO variable (ROUNDED) (ON SIZE
ERROR ) instruccin NOT ON SIZE ERROR instruccin
END-ADD

2.- ADD variable1 variable 2... GIVING variable (ROUNDED) (ON SIZE
ERROR ) instruccin NOT ON SIZE ERROR instruccin
END-ADD

A = A + B

ADD B TO A

A = A + B + 10 + J

ADD J 10 B TO A

A = B + J + C + D + 10

ADD 10 D C J B GIVING A


SUBTRACT: Resta



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 25


FORMATOS:

1.- SUBTRACT variable1 variable 2... FROM variable (ROUNDED) (ON
SIZE ERROR ) instruccin NOT ON SIZE ERROR instruccin
END-SUBTRACT


2.- SUBTRACT variable1 variable 2... FROM variable GIVING variable
(ROUNDED) (ON SIZE ERROR) instruccin NOT ON SIZE ERROR
instruccin
END-SUBTRACT


A = A - B

SUBTRACT B FROM A

A = A - B - 10 - J

SUBTRACT J 10 B FROM A

A = B - J - C - D - 10

SUBTRACT 10 D C J FROM B GIVING A








MULTIPLAY: Multiplicacin.

FORMATOS:

1.- MULTIPLY variable BY variable ( ROUNDED) (ON SIZE ERROR )
instruccin NOT ON SIZE ERROR instruccin



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 26

END-MULTIPLY


2.- MULTIPLY variable literal BY variable literal GIVING variable
(ROUNDED) (ON SIZE ERROR ) instruccin NOT ON SIZE ERROR
instruccin
END-MULTIPLY

A = A * B

MULTIPLY B BY A

C = A * B

MULTIPLY B BY A GIVING C




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 27

DIVIDE: Divisin

FORMATOS:

1.- DIVIDE variable literal INTO variable (ROUNDED) (ON SIZE
ERROR ) instruccin (REMAINDER ) variable NOT ON SIZE ERROR
instruccin
END-DIVIDE


2.- DIVIDE variable literal (BY INTO) variable literal GIVING
variable (ROUNDED) (REMAINDER ) variable (ON SIZE ERROR )
instruccin
NOT ON SIZE ERROR instruccin
END-DIVIDE


A = A / B

DIVIDE B INTO A


C = A / B

DIVIDE B INTO A GIVING C


C = A / B; Residuo en R

DIVIDE B INTO A GIVING C REMAINDER R


*Usando el BY

A = A / B

DIVIDE A BY B GIVING A





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 28

C = A / B

DIVIDE A BY B GIVING C


C = A / B; Residuo en R

DIVIDE A BY B GIVING C REMAINDER R





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 29

COMPUTE: Combinacin de operadores aritmticos.

COMPUTE , con sta orden podemos realizar todos los clculos aritmticos
posibles en una sola instruccin, utilizando los operadores +(suma) -(resta)
*(multiplicacin) /(divisin) **(potenciacin), adems de utilizar parntesis
para especificar mejor la operacin a realizar.

FORMATO:

1.- COMPUTE variable (ROUNDED) = expresin aritmtica (ON
SIZE ERROR) instruccin NOT ON SIZE ERROR instruccin
END-COMPUTE




Jerarquas:

1. ( )
2. **
3. * /
4. + -





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 30

CAPITULO V CONDICIONALES




CONDICIONALES


1. 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:
IF [THEN]
NEXT SENTENCE NEXT SENTENCE
ELSE [END-IF]
condicin
accin-1 accin-2



El mbito de la sentencia IF finaliza de cualquiera de las formas siguientes:

1- Por un punto.
2- Por la clusula END-IF.

TIPOS DE IF
CLASE
SIGNO
RELACION
NOMBRES DE CONDICION
ANIDADOS












MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 31

CLASE: Nos permiten saber el contenido de un identificador o variable

Permiten saber si un campo es numrico o alfabtico.
nombre datos IS [NOT]
NUMERIC
ALPHABETIC

ALPHABETIC-UPPER
ALPHABETIC-LOWER

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
expr-aritmetica
IS [NOT]
POSITIVE
NEGATIVE
ZERO




RELACION:

El formato general para formar un condicin de relacin es:
[NOT]
[NOT]
[NOT]
[NOT]
[NOT]
[NOT]
THAN
THAN
TO EQUAL
LESS
GREATER
>
<
=
nombre dato-1
literal
expr-aritmetica
IS
nombre dato-1
literal
expr-aritmetica





Condiciones combinadas.

Una condicin combinada esta formada por un conjunto de
condiciones simples unidas por los operadores OR y AND. El formato
es el siguiente:
condicin simple condicin simple
AND
OR




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 32

Nombres 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.

ANIDADOS:
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.

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.
IF
ELSE IF
[END-IF]
ELSE
condicin-1
sentencias-1
.
.
.
condicin-2
sentencias-2
.
condicin-3 ELSE IF
.
.
sentencias-3
sentencias-n
.
.






2. EVALUATE

EVALUATE identificador/valor lgico ALSO identificador/valor lgico
WHEN valor/nom-con Sent1 ALSO valor/nom-con Sent1
WHEN valor/nom-con Sent2 ALSO valor/nom-con Sent2
WHEN valor/nom-con Sent3 ALSO valor/nom-con Sent3

WHEN OTHER ALSO ANY




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 33

END-EVALUATE
EJEMPLO
EVALUATE TIPO
WHEN 1 MOVE C TO VAR-DESCRI
WHEN 2 MOVE T TO VAR-DESCRI
WHEN 3 MOVE N TO VAR-DESCRI
WHEN OTHER DISPLAY ERROR DE TIPO
END-EVALUATE

EVALUATE EDAD ALSO SEXO
WHEN 18 ALSO M ADD 1 TO CON-MUJERES
WHEN 18 ALSO H ADD 1 TO CON-HOMBRES
WHEN 30 ALSO ANY ADD 1 TO CON-EDAD-30
WHEN OTHER ADD 1 TO CON-OTROS
END-EVALUATE

EVALUATE TRUE
WHEN MUJER ADD 1 TO CON-MUJERES
WHEN HOMBRE ADD 1 TO CON-HOMBRES
WHEN OTHER ADD 1 TO CON-OTROS
END-EVALUATE


CAPITULO VI VERBOS DE CONTROL


PERFORM
CALL
LINK



PERFORM

La sentencia PERFORM es utilizada para transferir explcitamente el control a
uno o mas procedimientos y devolver el control implcitamente, cuando la



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 34

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.

Los tipos de PERFORM que maneja el COBOL son:

BSICO
ANIDADOS
TIMES
UNTIL
THRU
VARYING
COMBINADO
LINEA
o TIMES
o UNTIL
o VARYING




BASICO


8 12
PROCEDURE DIVISION.
Nombre-Perform.
Sentencia1
Sentencia1
Sentencia1
Sentencia-n.

EJEMPLO:

8 12
000223-ARMA-REG-SOL.
MOVE SAP-
CANAL TO SOL-COD-CAN



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 35

MOVE SAP-FEC-SOL-ULTI TO SOL-FEC-SOL
INITIALIZE VARIABLES-FECHA
MOVE '2' TO WS-OPC-FEC
MOVE SAP-FECINI TO WS-FEC-08. .



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 36


ANIDADO
o Dentro del mbito de una sentencia PERFORM, puede
especificarse otra sentencia PERFORM, aunque hay que tener
presentes las siguientes reglas:
o 1- El procedimiento PERFORM ejecutado desde el mbito
de otro PERFORM debe ser totalmente exterior o totalmente
interior a este.
o 2- Los mbitos de dos PERFORM se pueden solapar
cuando las sentencias de llamada para su ejecucin estn
fuera de estos mbitos.
o 3- Las sentencias PERFORM pueden ser anidadas
libremente.
o 4- Un procedimiento PERFORM puede llamarse asimismo,
esto es, la recursividad esta permitida.


EJEMPLO:

8 12
PROCEDURE DIVISION.
MAINLINE.
PERFORM 010000-INICIO
PERFORM 020000-PROCESO
PERFORM 030000-FIN
. STOP RUN.
.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 37


TIMES

Cuando se emplea este formato, la sentencia PERFORM ejecuta el nmero
de veces especificado por entero o por nombre de datos.

FORMATO:

PERFORM procedimiento |entero | TIMES
|variable|

EJEMPLO:

PERFORM LEER 5 TIMES

PERFORM LEER K TIMES


LEER.
Sentencia-1
Sentencia-2
Sentencia-n.






MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 38



UNTIL

Ejecuta el PERFORM mientras que la condicin sea falsa; cuando la
condicin sea verdadera suspende la ejecucin del Perform y continua el
programa.


FORMATO:

PERFORM procedimiento [WITH TEST] |BEFORE | UNTIL Condicin
|AFTER|



EJEMPLO:

PERFORM LEER UNTIL X > 5



LEER.
ADD 1 TO X
Sentencia-2
Sentencia-n.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 39

THRU

Permite ejecutar una serie de performs en forma consecutiva, entre
procedimiento-1 y procedimiento-2, incluyendo ambos.

FORMATO:

PERFORM procedimiento-1 [THRU procedimiento-2]


EJEMPLO:

PROCEDURE DIVISION.
INICIO.
PERFORM M1
PERFORM M2 THRU M5
PERFORM M3
STOP RUN.

M1.
Sentencias.

M2.
Sentencias.
AA1.
Sentencias.
BJ2.
Sentencias.
FD3.
Sentencias.
JK4.
Sentencias.
M5.
Sentencias.
M3.
Sentencias.

VARYING




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 40

PERFORM
WITH TEST
BEFORE
AFTER
procedimiento-1
VARYING FROM BY
UNTIL
nombre indice-1
nombre dato-1
literal
nombre dato-2
nombre indice-2 nombre indice-3
nombre dato-3
condicin-1
AFTER FROM BY
nombre indice-4
nombre dato-4
literal-2
nombre dato-5
nombre indice-5 nombre indice-6
nombre dato-6
UNTIL condicin-2


Realiza el PERFORM de la siguiente forma:


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.


EJEMPLO:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 41


Hacer la suma de todos los elementos de una tabla de 2 dimensiones.
01 TABLA.
05 FILAS OCCURS 10 TIMES.
10 COLUMNAS OCCURS 10 TIMES PIC 99.

PROCEDURE DIVISION.
INICIO.
................ PERFORM SUMA VARYING INDICE1
FROM 1 BY 1
UNTIL INDICE1 > 10
AFTER INDICE2
FROM 1 BY 1
UNTIL INDICE2 > 10.
.....................
SUMA.
ADD COLUMNAS ( INDICE1, INDICE2 ) TO ACUMULADOR.


Nota: El Orden con que se incrementa el Acumulador es el Sgte.

ADD COLUMNAS ( 1, 1 ) TO ACUMULADOR.
( 1, 2 ) TO ACUMULADOR.
( 1, 3 ) TO ACUMULADOR.
.
( 1, 10 ) TO ACUMULADOR.
( 2, 1 ) TO ACUMULADOR.
( 2, 2 ) TO ACUMULADOR.
( 2, 3 ) TO ACUMULADOR.
.
( 2, 10 ) TO ACUMULADOR.
.

( 10, 1 ) TO ACUMULADOR.
( 10, 2 ) TO ACUMULADOR.
( 10, 3 ) TO ACUMULADOR.
.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 42

( 10, 10) TO ACUMULADOR.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 43

COMBINADOS



o THRU CON VARYING
PERFORM WITH TEST
BEFORE
AFTER
[THRU procedimiento-1 procedimiento-2]
VARYING FROM BY
UNTIL
nombre indice-1
nombre dato-1
literal
nombre dato-2
nombre indice-2 nombre indice-3
nombre dato-3
condicin






o THRU CON UNTIL

PERFORM WITH TEST
BEFORE
AFTER
[THRU procedimiento-1 procedimiento-2]
UNTIL condicin





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 44


EN LINEA


o UNTIL EN LINEA

FORMATO:
PERFORM WITH TEST
AFTER
BEFORE
UNTIL
END-PERFORM
{sentencia}
condicin
...


Cuando 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.


EJEMPLO:

021100-INICIALIZA-MAPA.
MOVE 1 TO WRK-IND-X
PERFORM UNTIL WRK-IND-X > 10
MOVE SPACES TO SAP-SELEC(WRK-IND-X)
SAP-LINEA(WRK-IND-X)
ADD 1 TO WRK-IND-X
END-PERFORM
SET CAA-88-ACCION-TERMINAL TO TRUE
SET CAA-88-ESTADO-CONTIN TO TRUE
MOVE 100 TO VAR-NUM.




VARYING EN LINEA





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 45

FORMATO:
PERFORM WITH TEST
BEFORE
AFTER
VARYING FROM
BY UNTIL
nombre indice-1
nombre dato-1
literal
nombre dato-2
nombre indice-2
nombre indice-3
nombre dato-3
condicin


La 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.

EJEMPLO:

021100-INICIALIZA-MAPA.
MOVE 1O TO WRK-IND
PERFORM VARYING X FROM 1 BY 1 UNTIL X > 5
MOVE SPACES TO SAP-LINEA(X)
END-PERFORM
SET CAA-88-ACCION-TERMINAL TO TRUE
SET CAA-88-ESTADO-CONTIN TO TRUE
MOVE 100 TO VAR-NUM.
TIMES EN LINEA

Cuando 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,



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 46

ya que se entendera como final de la sentencia PERFORM.

PERFORM TIMES END-PERFORM
entero
nombre datos
{sentencia}.....



EJEMPLO:

021100-INICIALIZA-MAPA.
MOVE 1 TO X
PERFORM 5 TIMES
MOVE SPACES TO SAP-LINEA(X)
ADD 1 TO X
END-PERFORM
SET CAA-88-ACCION-TERMINAL TO TRUE
SET CAA-88-ESTADO-CONTIN TO TRUE
MOVE 100 TO VAR-NUM.












CAPITULO VII FORMATOS DE EDICION



Se utilizan para presentar de una forma clara por pantalla o por la impresora los
campos o datos numricos.

El significado de cada uno de estos caracteres es el siguiente:




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 47

Z 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 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 Permite que se inserte un espacio en blanco en el lugar que se indica
en la especificacin de formato.
0 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.
CR 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.
DB 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 positivo
aparecern 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.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 48

$$..
.
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.











CAPITULO VIII TABLAS DE MEMORIA



DEFINICION
Es un conjunto de valores almacenados en posicin de almacenamiento
consecutivo y con un nombre de dato asignado. La referencia a un elemento
especifico de la tabla se hace mediante el uso de un slo nombre con un
subndice que identifica la posicin de un elemento en particular.
CLAUSULA OCCURS:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 49

Define el tamao de la tabla. No puede aparecer en lneas a nivel 01, ni 77, ni 88.
FORMATO A:
OCCURS entero1 [TIMES]

FORMATO B:
OCCURS entero1 [TIMES] PIC ...

Ejemplo:
Crea una tabla de 5 elementos y cada elemento compuesto por 2 campos con la
picture indicada.

01 TABLA.
05 ELEMENTO OCCURS 5.
10 N-VENDEDOR PIC XXX.
10 TOTAL-VENDIDO PIC 9(6).


Ejemplo:
Crea una tabla de 100 elementos de 2 caracteres numricos.

01 TABLA.
05 ELEMENTOS OCCURS 100 PIC 99.

01 TABLA.
05 ELEMENTOS OCCURS 100 PIC 99 VALUE ZERO.


CLAUSULA REDEFINES EN TABLAS

FUNCION:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 50

Redefine una zona de memoria:
Obligatoriamente debe siempre ir despus del campo que redefinimos
Tiene que llevar el mismo nmero de nivel que el campo que redefinimos.
No puede ponerse una clusula REDEFINES junto con una instruccin OCCURS.

FORMATO:
nmero-de-nivel nombre-dato1 REDEFINES nombre-dato2




Ejemplo:
Redefinimos un campo alfanumrico en una tabla en la que cada elemento es un
mes del alto.
01 MESES.
05 NOMBRE-MESES
10 FILLER PIC X(9) VALUE "ENERO ".
10 FILLER PIC X(9) VALUE "MARZO ".
.
.
.
10 FILLER PIC X(9) VALUE "DICIEMBRE".
05 TABLA-MESES REDEFINE NOMBRE-MESES.
10 MES PIC X(9) OCCURS 12 TIMES.

INSTRUCCION MOVE EN TABLAS
El uso de la instruccin MOVE TABLA TO ..... da como resultado el movimiento de
todos sus elementos. Para referenciar un elemento de la tabla se indica el nombre
de dicho elemento y el ndice entre parntesis separado por un espacio.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 51

Cuando hacemos referencia a un grupo de elementos se consideran
alfanumricos para propsitos del MOVE.
Ejemplo:
Mover un elemento de la tabla a una variable.
01 TABLA.
05 ELEMENTO OCCURS 50 TIMES.
10 ELE1 PIC 9(6)V99.
10 ELE2 PIC 9(6)V99.
.
.
.
MOVE ELE1 ( 34 ) TO IMPORTE.


Ejemplo:
Mover las letras de la A a la F a una tabla.
01 TABLA.
05 LETRAS OCCURS 6 TIMES PIC X.
.
.
.
MOVE "ABCDEF" TO TABLA.



TABLAS DE VARIAS DIMENSIONES
El concepto de DIMENSIN se refiere a categorias por medio de las cuales los
datos son organizados dentro de las tablas.
Puede haber tablas de hasta 7 dimensiones. La forma de referenciar un elemento
es por medio de tantos subndices como sea la dimensin de la tabla, separados
por espacios.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 52

Ejemplo:
Crear un tabla que tenga 5 departamentos y dentro de cada departamento 5
vendedores con sus ventas.
01 TABLA-DEPARTAMENTOS.
05 DEPARTAMENTOS OCCURS 5 TIMES.
10 VENTAS OCCURS 5 TIMES PIC 9(7).


Preguntar si el vendedor 5 del departamento 1 ha vendido ms de $ 25.000.

IF VENTAS ( 1, 5 ) > 25.000


TABLAS VARIABLES
Se dice que una tabla es variable cuando su tamao vara de una ejecucin a otra.

FORMATO:
OCCURS entero-1 TO entero-2 TIMES DEPENDING ON numero-datos

El campo entero-1 y entero-2 son el mnimo y el mximo nmero de elementos
que puede contener la tabla, dependiendo del valor que tenga numero-datos.

Ejemplo:
Una tabla que tenga de 100 a 200 elementos segn el nmero de artculos
existentes.
01 TABLA.
05 ARTICULOS OCCURS 100 TO 200 DEPENDING ON
N-ARTICULOS.






MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 53


PERFORM VARYING EN EL MANEJO DE TABLAS
FUNCION:
Se utiliza para hacer recorridos por los elementos de una tabla.
EJEMPLO:
Hacer la suma de todos los elementos de una tabla de 2 dimensiones.
01 TABLA.
05 FILAS OCCURS 10 TIMES.
10 COLUMNAS OCCURS 10 TIMES PIC 99.

PROCEDURE DIVISION.
INICIO.
................
PERFORM SUMA VARYING INDICE1
FROM 1 BY 1 UNTIL INDICE1 > 10
AFTER INDICE2 FROM 1 BY 1 UNTIL INDICE2 > 10.
.....................
SUMA.
ADD COLUMNAS ( INDICE1, INDICE2 ) TO ACUMULADOR.

Nota: El Orden con que se incrementa el Acumulador es el Sgte.

ADD COLUMNAS ( 1, 1 ) TO ACUMULADOR.
( 1, 2 ) TO ACUMULADOR.
( 1, 3 ) TO ACUMULADOR.
.
( 1, 10 ) TO ACUMULADOR.
( 2, 1 ) TO ACUMULADOR.
( 2, 2 ) TO ACUMULADOR.
( 2, 3 ) TO ACUMULADOR.
.
( 2, 10 ) TO ACUMULADOR.
.
( 10, 1 ) TO ACUMULADOR.
( 10, 2 ) TO ACUMULADOR.
( 10, 3 ) TO ACUMULADOR.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 54

.
( 10, 10) TO ACUMULADOR.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 55

TABLAS INDEXADAS

FUNCION:
Nos permite indexar una tabla para posteriormente hacer bsquedas sin
necesidad de recorrerla entera.
FORMATO:
ASCENDING
OCCURS entero TIMES KEY IS dato-1 [dato2...]
DESCENDING

[INDEXED BY indice-1 [indice-2...]]


La opcin ASCENDING o DESCENDING KEY IS slo se utiliza en el caso de que
la tabla se encuentre ordenada por una o varias claves.
La opcin INDEXED BY indica el o los ndices que vayamos a utilizar, son
obligatorios en caso de utilizar la instruccin SEARCH.
Los ndices-1 e ndice-2, si se ponen hay que declararlos en la
WORKING-STORAGE SECTION como USAGE IS INDEX.

Ejemplo:
01 CAMPOS.
05 INDICE USAGE IS INDEX.
01 TABLA.
05 ELEMENTOS OCCURS 10 INDEXED BY INDICE.




INSTRUCCION SET



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 56

FUNCION:
Para inicializar ndices o cambiar su contenido. Slo los declarados como USAGE
INDEX.
FORMATO:
TO entero
SET indice UP BY
DOWN BY variable

El parmetro TO inicializa el ndice al valor que pongamos en entero o variable.
El parmetro UP BY suma al ndice el valor que pongamos en entero o variable.
El parmetro DOWN BY resta al ndice el valor que pongamos en entero o
variable.

Ejemplo:
Inicializar el indice en 2.
SET INDICE TO 2.

Ejemplo:
Restar 3 al indice.
SET INDICE DOWN BY 3.





INSTRUCCION SEARCH

FUNCION:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 57

Sirve para buscar un elemento o varios en una tabla. Esta opcin puede ser
utilizada con subndices pero es mucho mas lenta.
FORMATO:
ndice
SEARCH identificador VARYING AT END accin-1
variable

WHEN condicin-1 accin-2
[WHEN condicin-2 accin-3 ]

El identificador es el elemento de la tabla donde se va a hacer la bsqueda.
AT END accin-1 es lo que tiene que hacer en caso de que la tabla se haya
terminado y el elemento no lo haya localizado.
Condicin-1 y opcionalmente condicin-2 son las condiciones que tienen que
cumplir un determinado elemento de la tabla al cual se est buscando.
La opcin VARYING ndice, hace que el vare el ndice de indexacin de la tabla.
Ejemplo:
Hacer un DISPLAY de el precio del pan.
01 CAMPOS.
05 INDICE USAGE INDEX.
......................
01 TABLA-ARTICULOS.
05 ARTICULOS OCCURS 50 TIMES PIC X(10) INDEXED BY
INDICE.

01 TABLA-PRECIOS.
05 PRECIOS OCCURS 50 TIMES PIC 9(5).
.......................................
PROCEDURE DIVISION.
INICIO.
............
SEARCH ARTICULOS AT END PERFORM ART-INEXISTENTE
WHEN ARTICULOS ( INDICE ) = "PAN "



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 58

DISPLAY PRECIOS ( INDICE ).



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 59

CAPITULO IX ARCHIVOS SECUENCIALES


DEFINICION:

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.

Clusula SELECT para ficheros secuenciales:

SELECT [OPTIONAL] ASSIGN TO
ORGANIZATION
IS [RECORD]
LINE
SEQUENTIAL
nombre-fichero-1 dispositivo
[FILE STATUS IS nombre-de-dato]
[ACCESS MODE IS SEQUENTIAL]



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 grabar RANDOM 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.

Clusula ORGANIZATION aqui indicamos la organizacin de los registros de



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 60

nuestro fichero, Donde debe ser SEQUENTIAL

Si se omite la clusula ORGANIZATION se asume organizacin secuencial y si se
omite la clusula ACCESS se asume acceso secuencial.

La organizacin RECORD SEQUENTIAL, se refiere a un fichero secuencial
estndar. En este, la longitud de cada registro se especifica por dos bytes que
preceden al propio registro. La organizacin LINE SEQUENTIAL, es la opcin por
defecto, y hace que cada registro vaya seguido de un carcter fin de lnea que
acta como delimitador.

En la clusula SELECT tambin se puede especificar el fichero como un fichero en
mltiples carretes de cinta magntica, mediante la frase ASSIGN TO MULTIPLE
REEL FILE nombre-externo-del-fichero.


















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:

Clusula FD para ficheros secuenciales:
8 12
FD nombre del fichero



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 61

LABEL RECORD
[RECORDING MODE IS]
[BLOCK CONTAINS]
[RECORD CONTAINS]
[DATA RECORD IS]

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 valores STANDARD 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.





Sentencia OPEN:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 62


La operacin de abrir un fichero, establece una comunicacin entre el rea de E/S
asociada a ese fichero y el dispositivo externo que lo soporta, comprueba las
etiquetas en los ficheros de entrada y las crea para los ficheros de salida, y sita el
puntero de lectura-escritura en el primer registro o al final del fichero dependiendo
del modo en que se haya abierto el fichero.

Formato 1:
OPENINPUT fichero-1 REVERSED WITH
NO REWIND
LOCK
...



Formato 2:

OPENOUTPUT fichero-1 REVERSED WITH
NO REWIND
LOCK
...


Formato 3:

OPEN I-O {fichero-3 [WITH LOCK ]}...

Formato 4:

OPEN EXTEND {fichero-4 [WITH LOCK ]}...



EJEMPLO

OPEN INPUT NOMINA
OPEN OUTPUT CARGOS
OPEN I-O SALDOS
OPEN EXTEND SALIDAS

Si el fichero esta almacenado en un soporte que permite la operacin de rebobinar
y se especifica la clusula REVERSED, los datos para una sentencia READ



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 63

quedan disponibles en orden inverso, esto es, comenzando por el ultimo. La
clusula NO REWIND hace que el carrete de cinta no se rebobine. Esto puede ser
muy til cuando en una cinta hay mltiples ficheros.

Si se especifica la frase WITH LOCK, el efecto es equivalente a especificar LOCK
MODE EXCLUSIVE en la sentencia SELECT correspondiente a este fichero, esto
es, el fichero no puede ser compartido por otros procesos.

Un fichero abierto en modo OUTPUT es implcitamente un fichero no compartible.
Para que mas de un proceso puedan compartir un fichero hay que abrirlo en modo
I-O.

Cuando se especifica la clusula INPUT, se abre el fichero especificado para leer.
El puntero de lectura se sita en el primer registro. Si el fichero no existe se
produce un error.

Cuando se especifica la clusula OUTPUT, se abre el fichero especificado para
escribir. Si el fichero que se abre existe, se destruye su contenido actual
crendose as de nuevo. Si no se existe se crea.

Cuando se especifica la clusula I-O, se abre el fichero especificado para leer y
escribir. El puntero de lectura-escritura se sita en el primer registro. Si este no
existe se crea. En este caso una operacin de lectura dara lugar a una condicin
de fin de fichero y una operacin de escritura dara lugar a un error. Este modo no
se puede utilizar con una organizacin LINE SEQUENTIAL.

Cuando se especifica la clusula EXTEND, significa que se van aadir datos a un
fichero con modo de acceso secuencial. De esta forma podemos aadir mas
registros a un fichero existente. Si el fichero no existe se crea.



Sentencia CLOSE.

Esta sentencia finaliza el proceso de uno o varios ficheros.
CLOSE
REEL
UNIT
WITH
NO REWIND
LOCK
...
fichero-1





MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 64



EJEMPLO

CLOSE NOMINA
CLOSE CARGOS
CLOSE SALDOS SALIDAS



Cada fichero abierto por medio de una sentencia OPEN, debe ser cerrado por una
sentencia CLOSE bien cuando finaliza el programa o bien cuando se desea abrirlo
de modo diferente. Una sentencia CLOSE puede cerrar uno o mas ficheros.


Las opciones REEL y UNIT se utilizan con cintas magnticas y discos magnticos
respectivamente para indicar que le fichero tratado es multivolumen.

La opcin NO REWIND se utiliza para anular la operacin de rebobinado que se
produce normalmente al cerrar un fichero contenido en cinta magntica.

La opcin WITH LOCK hace que el fichero cerrado no pueda volverse a abrir
durante el resto de la ejecucin del proceso en cuestin.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 65

Sentencia WRITE:

Cuando se ejecuta esta sentencia se efecta una operacin de salida o de
escritura de un registro lgico con destino a un fichero de salida o de entrada-
salida. Estas transferencias de informacin se hacen a travs del rea de memoria
asignada al fichero aunque esta operacin es transparente al usuario.

WRITE registro [FROM nombre-dato-1]
BEFORE
AFTER
[LINE[S]]
[LINE[S]]
ADVANCING PAGE
TAB
FORMFEED
nombre-de-dato-2
entero
AT
END-OF-PAGE
EOP
sentencia-1
AT
END-OF-PAGE
EOP
sentencia-1 NOT
[END-WRITE]


Registro identifica el nombre del registro lgico que se desea escribir. Este estar
declarado en la FILE SECTION o en la DATA DIVISION. El fichero asociado debe
abrirse en modo OUTPUT o EXTENDED.

Si se especifica la opcin FROM, primero se mueve el contenido del campo
referenciado por nombre-de-dato-1 al campo referenciado por registro y a
continuacin se efecta la operacin de escribir.

Las opciones BEFORE o AFTER ADVANCING se aplican solamente a ficheros de
salida impresos e indican, escribir el registro antes de (BEFORE) o despus de
(AFTER) avanzar, entero o nombre-de-dato-1 lneas, pagina (PAGE o
FORMFEED), o tabulacin vertical (TAB).




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 66

Nombre mnemnico es un nombre creado por el programador con el fin de
asociarlo en el prrafo SPECIAL-NAMES a una palabra reservada COBOL.

Si se especifica END-OF-PAGE o su equivalente EOP, debe especificarse la
clusula LINAGE en la descripcin del fichero (FD) en el cual estamos
escribiendo. EOP es una condicin que es cierta cuando se alcanza el final de la
pagina lgica, en cuyo caso se ejecuta sentencia-1.

Sentencia-1 y sentencia-2 son sentencias imperativas, esto es, no condicionales.

Cuando en la descripcin de un fichero se utiliza la clusula LINAGE no se puede
utilizar ADVANCING nombre-nemonico.

END-WRITE solo se puede utilizar con END-OF-PAGE y sirve para delimitar el
mbito de la sentencia WRITE.

Si el tipo de organizacin es RECORD SEQUENTIAL y en la sentencia WRITE no
se utiliza la opcin ADVANCING, se asume el avance automtico equivalente a
haber especificado, BEFORE ADVANCING 1 LINE.


EJEMPLO

WRITE REG-NOMINA END-WRITE

WRITE REG-NOMINA FROM TITULO-1 AFTER PAGE END-WRITE

WRITE REG-NOMINA FROM DETALLE AFTER 1 END-WRITE.




Sentencia READ:

Cuando se ejecuta esta sentencia se deja disponible un registro lgico en el rea
de entrada, para ser procesado.

READ fichero RECORD [INTO nombre de dato] [WITH [NO] LOCK]
[AT END sentencia-1]



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 67

[NOT AT END sentencia-2]
[END-READ]

Fichero es el nombre simblico del fichero del cual se quiere leer un registro. Este
fichero tiene que ser abierto en modo INPUT o I-O.

Cuando se abre el fichero el puntero de lectura-escritura apunta al primer registro
a leer y cada vez que se ejecuta una sentencia READ se lee un registro y el
puntero de lectura-escritura avanza para apuntar al siguiente registro a leer.

Si se especifica la opcin INTO, la sentencia READ adems de dejar disponible un
registro lgico en el rea de entrada, esto es, en el registro de entrada esta
definido en la FD, mueve el contenido de este registro al rea de datos
especificada por nombre de datos.

La opcin INTO no puede ser utilizada cuando el fichero contiene registros de
varios tipos.

La frase AT END es una condicin que es cierta cuando al ejecutarse una
sentencia READ se detecta el final del fichero, en cuyo caso se ejecuta la
sentencia-1. Si la condicin resulta ser falsa, entonces se ejecuta, despus de
haberse realizado la operacin de lectura, la sentencia-2, si la frase NOT AT END
ha sido especificada, y se pasa a la sentencia siguiente.

Sentencia-1 y sentencia-2 son sentencias imperativas, esto es, no
condicionales.

Aunque la frase AT END sea opcional, debe especificarse cuando se acceda
secuencialmente a los registros de un fichero, para poder detectar cuando se llega
al final del mismo.

END-READ delimita el mbito de la sentencia READ

En un fichero secuencial abierto en modo INPUT, la sentencia READ o READ
WITH LOCK no puede leer un registro en modo exclusivo.

En un fichero abierto en modo I-O con LOCK MODE AUTOMATIC, a menos que
se especifique la opcin WITH NO LOCK, cada registro en el momento de leerse
es exclusivo, no compartido, siendo liberado cuando finaliza la lectura.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 68


En un fichero abierto en modo I-O con LOCK MODE MANUAL, cada registro en el
momento de leerse no es exclusivo a menos que se especifique la opcin WITH
LOCK en la sentencia READ.


EJEMPLO:


READ SALDOS AT END MOVE 1 TO FDA
NOT AT END PERFORM CALCULOS
END-READ


READ SALDOS INTO REG-SALIDA AT END MOVE 1 TO FDA
NOT AT END PERFORM CALCULOS
END-READ



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 69

Modificar un registro secuencial:

Si el fichero se abre en modo I-O, es posible modificar el ultimo registro ledo por
medio de la sentencia REWRITE, la cual presentamos a continuacin.


Sentencia REWRITE.

Este sentencia permite reemplazar un registro existente en un fichero en disco por
otro registro.

REWRITE registro [FROM nombre-de-dato]
[END-REWRITE]

Registro es el nombre de un registro lgico especificado en la FILE SECTION de
la DATA DIVISON. El fichero asociado con este registro debe ser un fichero
residente en disco y abierto en modo I-O.

El numero de caracteres del registro a reemplazar debe ser igual al numero de
caracteres del registro que lo va a reemplazar.

Para ficheros en los que el modo de acceso es secuencial la ultima sentencia
ejecutada antes de la ejecucin de la sentencia REWRITE, debe ser una
sentencia READ. El registro reemplazado ser lgicamente el registro ledo.

La posicin indicada por el puntero de lectura-escritura ser la misma despus de
haber ejecutado una sentencia REWRITE.


EJEMPLO:

REWRITE REG-SALDOS FROM REG-DATOS END-REWRITE




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 70


CAPITULO X ARCHIVOS INDEXADOS


DEFINICION

Un fichero indexado es un fichero con organizacin secuencial indexada. La
organizacin secuencial indexada o de ndices es un modelo de almacenamiento
de datos que se apoya en una tabla de ndices que acta como ndice y en un
fichero de datos.

SELECT [OPTIONAL] ASSIGN TO
RESERVE
NO
ALTERNATE
AREA
AREAS
ORGANIZATION IS
ACCESS MODE IS
SEQUENTIAL
nombre-fichero-1 DISK
entero-1
[LOCK MODE IS modo-de-cierre]
[FILE STATUS IS nombre-de-dato-3]
INDEXED
RANDOM
DYNAMIC
RECORD KEY IS
nombre dato-1
clave-m = nombre dato-4,[nombre dato-5] ...
ALTERNATE RECORD KEY IS
nombre dato-1
clave-m = nombre dato-6,[nombre dato-7] ...


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



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 71

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 grabar RANDOM 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, 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 SEQUENTIAL en sta clausula.

Clusula ACCESS MODE indica el modo de acceso al fichero, puede ser
SEQUENTIAL, 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 y DYNAMIC
(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 la FD 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



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 72

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.








MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 73

Sentencia OPEN:

Para ficheros indexados el formato de esta sentencia es el siguiente:

OPEN{{
INPUT
OUTPUT
I-O
[WITH LOCK]}...}



EJEMPLO

OPEN INPUT NOMINA
OPEN OUTPUT CARGOS
OPEN I-O SALDOS


Sentencia CLOSE:

Para ficheros indexados el formato de esta sentencia es el siguiente:

CLOSE fichero-1 [WITH LOCK] [fichero-2 [WITH LOCK] ] ...


EJEMPLO

CLOSE NOMINA
CLOSE CARGOS
CLOSE SALDOS SALIDAS







Sentencia READ:

Para ficheros indexados el formato de esta sentencia es el siguiente:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 74


Formato 1: (acceso secuencial)

READ fichero
NEXT
PREVIOUS
RECORD [INTO nombre dato-1]
[WITH
KEPT
NO
LOCK]
[AT
[NOT
END
END AT
sentencia-1]
sentencia-2]
[END-READ]



EJEMPLO:

Formato 2: (Acceso aleatorio)
READ fichero RECORD [INTO nombre dato-1]
[WITH
KEPT
NO
LOCK]
[INVALID
[NOT
KEY sentencia-3]
sentencia-4]
[END-READ]
INVALID KEY
KEY IS
nombre-de-dato-2
clave-m


Cuando el modo de acceso es secuencial, el acceso a los registros del
fichero indexado se hace en orden ascendente de la clave, la cual viene dada por
el campo descrito a continuacin de la clusula RECORD KEY.

Cuando se utiliza el formato 2, antes de que se ejecute la sentencia READ,
es necesario haber cargado el campo descrito a continuacin de la clusula



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 75

RECORD KEY, el valor de la clave del registro que se quiere leer.

La opcin NEXT o PREVIOUS debe especificarse cuando en un fichero en
modo de acceso DYNAMIC los registros se leen secuencialmente.

Si la opcin PREVIOUS se ha especificado, despus de ejecutarse una
sentencia READ el puntero de lectura-escritura pasa a apuntar al registro anterior.
Si el puntero ya se encontraba en el primer registro. Si el puntero que se
encontraba en el primer registro, entonces se da una condicin de fin de fichero
(AT END).

En un fichero abierto I-O con LOCK MODE MANUAL WITH LOCK ON
RECORD, una sentencia READ puede adquirir un registro en modo exclusivo
solamente si la frase WITH LOCK ha sido especificada.

En un fichero abierto I-O con LOCK MODE MANUAL WITH LOCK ON
MULTIPLE RECORDS, una sentencia READ puede adquirir un registro en modo
exclusivo solamente si la frase WITH KEPT LOCK ha sido especificada. Esto es,
KEPT debe ser incluido, cuando manualmente se desea hacer exclusivos
mltiples registros.

En un fichero abierto I-O con LOCK MODE AUTOMATIC, a menos que se
especifique la opcin WITH NO LOCK, cada registro es en el momento de leerse
exclusivo, no compartido, siendo liberado cuando finaliza la lectura.

Si se especifica la opcin KEY la clave utilizada para recuperar un registro
viene dada por nombre-dato-2 o por clave-m. Si esta opcin no se especifica, para
recuperar un registro se utiliza la clave principal, que viene dada por el campo
descrito a continuacin de la clusula RECORD KEY.

Cuando se ejecuta una sentencia READ, descrita de acuerdo con formato-
2, el contenido del campo especificado como clave, es comparado con los valores
contenidos en los correspondientes campos de los registros del fichero, hasta que
se encuentre un valor igual, en cuyo caso se recupera el registro y se ejecuta la
sentencia-4 si la frase NOT INVALID KEY ha sido especificada. Si no se encuentra
el registro entonces se ejecuta sentencia-3 descrita a continuacin de la frase
INVALID KEY, si esta opcin ha sido especificada.

EJEMPLO:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 76


READ SALDOS NEXT AT END MOVE 1 TO FDA
NOT AT END PERFORM CALCULOS
END-READ



READ SALDOS INVALID KEY PERFORM NO-EXISTE
NOT INVALID KEY PERFORM CALCULOS
END-READ



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 77

Sentencia WRITE:

Para ficheros indexados el formato de esta sentencia es el siguiente:

WRITE [FROM nombre-dato-1]
[INVALID KEY sentencia-1]
KEY sentencia-2]
[END-WRITE]
INVALID [NOT
registro


El valor de la clave principal debe ser nico en el fichero.

El nombre de dato que especifica la clave principal, debe ser puesto por el
programa al valor deseado, antes de ejecutar la sentencia WRITE.

Si el modo de acceso es SEQUENTIAL, los registros deben ser emitidos al
sistema en orden ascendente de la clave principal.

Si el modo de acceso es RANDOM o DYNAMIC los registros pueden ser emitidos
al sistema en cualquier orden.

Si la opcin INVALID KEY se ha especificado, sentencia-1 se ejecutar en los
siguientes casos:

a) Cuando se ha especificado modo de acceso secuencial para un fichero
abierto para escribir (OUTPUT) y la clave del registro no es mayor que la
del registro anterior.
b) Cuando el fichero se ha abierto en modo OUTPUT o I-O y la clave del
registro a escribir existe ya en el fichero.
c) Cuando el fichero se ha abierto en modo OUTPUT o I-O y la clave
alternativa del registro a escribir ya existe en el fichero.
d) Cuando el disco esta lleno.



EJEMPLO:

WRITE REG-SALDOS INVALID KEY PERFORM YA-EXISTE
NOT INVALID KEY ADD 1 TO CONTA-GRABADOS



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 78

END-WRITE



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 79

Sentencia REWRITE:

Para ficheros indexados el formato de esta sentencia es el siguiente:

REWRITE [FROM nombre-dato-1]
[INVALID KEY sentencia-1]
KEY sentencia-2]
[END-REWRITE]
INVALID [NOT
registro


El fichero asociado con registro debe ser un fichero residente en disco y abierto en
modo I-O.

Para ficheros en los que el modo de acceso es SEQUENTIAL, la ultima sentencia
ejecutada antes de la ejecucin de la sentencia REWRITE debe ser una sentencia
READ, la cual localiza el registro a reemplazar por el valor contenido en le campo
que hace referencia a la clave principal.

Para ficheros en los que el modo de acceso es RANDOM o DYNAMIC, el registro
a reemplazar viene dado por el contenido del campo que hace referencia a la
clave principal. No es necesario ejecutar previamente una sentencia READ.



Si la opcin INVALID KEY se ha especificado, la sentencia-1 se ejecutar en los
siguientes casos:

a) Cuando se ha especificado modo de acceso secuencial y el valor
contenido en el campo clave del registro que ha de ser reemplazado no es
igual al valor del campo clave del ultimo registro ledo.

b) Cuando el valor del campo que referencia la clave principal no coincide
con el valor de la clave de alguno de los registros del fichero.

c) Cuando el valor del campo que referencia la clave alternativa existe ya en
el fichero.

EJEMPLO:




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 80

REWRITE REG-SALDOS INVALID KEY PERFORM NO-EXISTE
NOT INVALID KEY ADD 1 TO CONTA-MODIFICADOS
END-REWRITE



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 81

Sentencia START:

Esta sentencia permite iniciar el proceso de acceso a los registros de un fichero
con organizacin indexada o relativa a partir de una clave especificada y no a
partir del principio del fichero.

START [KEY IS
[WITH SIZE entero]
[INVALID KEY sentencia-1]
INVALID KEY sentencia-2] [NOT
[END-START]
nombre-dato] fichero EQUAL TO
THAN
NOT
OR
=
GREATER
>
LESS THAN
NOT <
THAN GREATER
EQUAL TO
> =
LESS THAN
<
THAN GREATER NOT
> NOT
EQUAL TO OR THAN LESS
< =


Fichero es el nombre de un fichero indexado abierto en modo INPUT o I-O, con
modo de acceso SEQUENTIAL o DYNAMIC.

Nombre-dato es un campo alfanumrico que debe ser declarado en una clusula
RECORD KEY asociada con el fichero.

Nombre-dato puede ser tambin un campo subordinado al campo especificado en
la clusula RECORD KEY. Este campo subordinado debe ser la posicin del
carcter mas a la izquierda, se corresponda con la posicin del carcter mas a la
izquierda del campo especificado en la clusula RECORD KEY, esto es, el primer
campo subordinado.

Previamente a la ejecucin de una sentencia START el programa debe cargar en
nombre-dato el valor de la clave correspondiente al registro en el que nos
queremos posicionar.




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 82

La comparacin indicada por la operacin de relacin especificada a continuacin
de KEY, ocurre entre el valor del campo clave de los registros del fichero y el valor
del contenido en el campo-dato. Si la longitud de los campos comparados no son
iguales, el campo mas largo se trunca a la longitud del mas corto.

Si la frase KEY no se especifica, la operacin de relacin que se asume es
EQUAL TO (=) y la comparacin anterior se hace con respecto al campo
declarado en la clusula RECORD KEY.

Si el operador de relacin especifica que la clave debe ser mayor que, o mayor o
igual que nombre-dato, entonces el puntero de lectura escritura del fichero se
posiciona en el primer registro lgico cuya clave satisfaga la condicin.

Si el operador de relacin especifica que la clave debe ser menor que, o menor o
igual que nombre-dato, entonces el puntero de lectura escritura se posiciona en el
ultimo registro lgico del fichero cuya clave satisfaga la condicin.

Si la condicin no es satisfecha por alguno de los registros del fichero, entonces
se da la condicin INVALID KEY y se ejecuta la sentencia 1, si la frase ha sido
especificada.

Si se especifica la opcin WITH SIZE, entonces se ignora el operador de relacin
especificado a continuacin de KEY. Esta opcin especifica el numero de
caracteres de la clave que se van a utilizar en la comparacin (EQUAL TO).








EJEMPLO:

START SALDOS KEY IS = COD-PRODUCTO
INVALID KEY PERFORM NO-EXISTE
NOT INVALID KEY PERFORM LEER-ARCHIVO
END-START



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 83

Sentencia DELETE:

Esta sentencia permite borrar un determinado registro de un fichero con
organizacin indexada o relativa.

FORMATO 1:

DELETE fichero RECORD [INVALID KEY sentencia-1]
[NOT INVALID KEY sentencia-2]
[END-DELETE]

Fichero es el nombre de un fichero indexado abierto en modo I-O.

Antes de que se ejecute una sentencia DELETE, es necesario haber cargado en el
campo descrito a continuacin de la clusula RECORD KEY, el valor de la clave
del registro al que se quiere acceder.

Para ficheros en los que el modo de acceso es SEQUENTIAL la ultima sentencia
ejecutada antes de la ejecucin de la sentencia DELETE debe ser la sentencia
READ, la cual localiza el registro a borrar por el valor contenido en el campo que
hace referencia a la clave principal.

Para ficheros en los que el modo de acceso es RANDOM o DYNAMIC, el registro
a borrar viene dado por el contenido del campo que hace referencia a la clave
principal. No es necesario ejecutar previamente una sentencia READ.

Cuando se ejecuta la sentencia DELETE, el contenido del campo especificado
como clave, es comparado con los valores contenidos en los correspondientes
campos de los registros del fichero, hasta que se encuentre un valor igual, en cuyo
caso se borra el registro y se ejecuta la sentencia-2 si la frase NOT INVALID KEY
ha sido especificada. Si no se encuentra un valor igual a la clave dada, entonces
se ejecuta la sentencia-1 descrita a continuacin de la frase INVALID KEY, si esta
ha sido especificada.

La frase INVALID KEY no puede ser especificada con una sentencia DELETE que
haga referencia a un fichero con modo de acceso secuencial.

EJEMPLO:



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 84


DELETE SALDOS INVALID KEY PERFORM NO-EXISTE
NOT INVALID KEY ADD 1 TO CONTA-BORRADOS
END-DELETE




FORMATO 2:


DELETE FILE { fichero } ...

Esta sentencia borra los ficheros especificados, los cuales deben ser cerrados
previamente.

EJEMPLO:

DELETE FILE SALDOS




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 85

CAPITULO XI SUBPROGRAMACION


SUBPROGRAMACION

Es un mtodo de programacin que se basa en la utilizacin de un programa
principal comunicado con uno o ms subprogramas.
Los objetivos de la subprogramacin son:
1) Evitar programas demasiado largos
Cuanto mas dividimos las funciones de un programa, mejor podremos
manejarlo, y en modificaciones futuras tendremos muchas ms felicidades.
2) Evitar redundancias
Existen tareas comunes a varios programas para lo que se crear un
subprograma que realice esta tarea y que pueda ser llamado por todos
aquellos programas que lo necesiten.
En la subprogramacin existe un programa principal que ser el "llamador" y l os
subprogramas los "llamados".
Tanto el programa principal como los subprogramas son programas individuales y
compilados a parte unos de otros.
Sin embargo, los subprogramas dependen del programa principal, ya que es el
nico ejecutable.
El programa principal se ejecuta, y cuando en su PROCEDURE se encuentra con
un CALL nombre-programa', transferir el control al subprograma en cuestin.
Cuando este termine su ejecucin, devolver el control al programa principal
mediante la instruccin EXIT-PROGRAM.
En subprogramacin hay que tener en cuenta que se sigue una especie de
jerarqua:
El programa principal se puede comunicar con todos los subprogramas.



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 86

Un subprograma puede ser llamado por un subprograma de nivel superior, pero
nunca al contrario.


En este formato s se intercambian datos.
Su uso ms comn es la de transmitir datos del programa principal al
subprograma, donde son tratados y posteriormente le es devuelto el resultado.
El funcionamiento de la instruccin es la siguiente:

BY REFERENCE
CALL nombre-programa USING nombre-
variable-1
BY CONTENT




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 87

Llamamos (CALL) al subprograma (nombre-programa) y le mandamos datos,
usando (USING) las variables (nombre-variable-1, nombre-variable-2 ...), que
anteriormente ya han sido definidos en la DATA DIVISION.
La diferencia entre BY REFERENCE y BY CONTENT es que con la 1 opcin los
datos pasados al subprograma podan ser modificados, sin embargo en el BY
CONTENT nicamente puede ser consultados pero no permite su modificacin.
El subprograma adems de tener en la WORKING sus propias variables de
trabajo, debe definir unas variables en la LINKAGE SECTION para recibir los
datos de las variables que se transfieren desde el programa principal.
El nombre de estas variables podr ser el mismo, o distinto, ya que ello no supone
ningn condicionante en el buen desarrollo del subprograma:
Lo que si es importante son las siguientes consideraciones:
Si no queremos tener problemas en la transmisin, definir las variables en la
LINKAGE con la misma PICTURE que sus homlogas.
La relacin entre las variables de un programa y otro se efecta de la siguiente
forma:
Programa Principal:

CALL PROGRAMA USING CAMPO-A, CAMPO-CAMPO-B,
CAMPO-C
Subprograma:
PROCEDURE DIVISION USING CAMPO-D, CAMPO-E, CAMPO-
F.

CAPITULO XII BUSQUEDAS EN ARCHIVOS

BUSQUEDAS EN ARCHIVOS
BUSQUEDAS SIMPLE




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 88

En el proceso de bsqueda de datos intervienen dos archivos de entrada los
cuales deben estar ordenados por la misma llave. El proceso que se describe a
continuacin se ajusta para estructuras de bsqueda 1 1 y N 1.

RUTINA:


PROCEDURE DIVISION.
PERFORM 1-INICIO-PROCESO
PERFORM 2-PROCESO UNTIL SI-FIN-ARCHIVO1
PERFORM 3-FIN-PROCESO
STOP RUN.


1-INICIO-PROCESO.
INITIALIZE VARIABLES
* (CARGAR TABLAS EN MEMORIA SI ES NECESARIO)
OPEN INPUT ARCHIVO1 (ENTRADA)
INPUT ARCHIVO2 (ENTRADA)
OUTPUT ARCHIVO3 (SALIDA O SALIDAS DE IMPRESION)
PERFORM LEER-ARCHIVO1
PERFORM LEER-ARCHIVO2.





2-PROCESO.
PERFORM LEER-ARCHIVO2 UNTIL SI-FIN-ARCHIVO2 OR
LLAVE-1 >= LLAVE-2
IF LLAVE-2 = LLAVE-1 AND NOT SI-FIN-ARCHIVO2
PERFORM ( ENCONTRO DATO)
ELSE
PERFORM ( NO ENCONTRO DATO)
END-IF
PERFORM LEER-ARCHIVO1.
*********************************************************




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 89

Recordar los contadores para registros encontrados y registros no
encontrados, que se mostraran al final del proceso.


Que hay que mirar si esta estructura no arroja los resultados esperados:

1. Revisar que los archivos se encuentren ordenados por la supuesta llave.
2. Revisar que las llaves de los archivos tengan la misma estructura.
3. Que las condiciones de comparacin de las llaves se encuentren invertidas
4. Que el final de alguno de los archivos no este bien controlado




MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 90

LINEAS DE BALANCE

El funcionamiento bsico de una lnea de balance consiste evaluar el
contenido de la llave primaria de cada archivo de entrada as: (SE MANEJA
LLAVE UNICA)

Si Llave-1 < Llave-2 el dato que se busca no esta en archivo-2
y debe leer el siguiente registro de archivo-1.
Si Llave-1 > Llave-2 se debe leer el siguiente registro de
archivi-2.
Si Llave-1 = Llave-2 se encontr el dato que se buscaba y
debe leer el siguiente registro de archivo-1 y archivo-2.

RUTINA:



PROCEDURE DIVISION.
PERFORM 1-INICIO-PROCESO
PERFORM 2-PROCESO UNTIL SI-FIN-ARCHIVO1 OR
SI-FIN-ARCHIVO2
IF SI-FIN-ARCHIVO1
PROCESA-2 UNTIL SI-FIN-ARCHIVO2
ELSE
PROCESA-1 UNTIL SI-FIN-ARCHIVO1
END-IF
PERFORM 3-FIN-PROCESO
STOP RUN.






1-INICIO-PROCESO.
INITIALIZE VARIABLES
OPEN INPUT ARCHIVO1 (ENTRADA)
INPUT ARCHIVO2 (ENTRADA)



MANUAL DE COBOL





Elaborado por Sergio Oswaldo Rojas Bernal Pgina 91

OUTPUT ARCHIVO3 (SALIDA)
PERFORM LEER-ARCHIVO1
PERFORM LEER-ARCHIVO2.

2-PROCESO.
IF LLAVE-1 > LLAVE-2
PROCESA-2
ELSE
IF LLAVE-1 < LLAVE-2
PROCESA-1
ELSE
PROCESA-IGUAL.
END-IF.

PROCESA-1.
PROCESO-NO-ESTA-EN-2
LEER-ARCHIVO1.

PROCESA-2.
PROCESO-NO-ESTA-EN-1
LEER-ARCHIVO2.

PROCESA-IGUAL.
PROCESO-IGUALES
LEER-ARCHIVO1
LEER-ARCHIVO2.
*********************************************************


NOTA: No hay que hacer rutinas especiales para final de archivos.

Potrebbero piacerti anche