Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso Cobol SRB
Curso Cobol SRB
INTRODUCCIÓN
TIPOS DE DATOS
TIPOS DE PALABRAS
ÁREAS DE TRABAJO
TIPOS DE CONSTANTES
IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION
DISPLAY
ACCEPT
MOVE
ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE
CAPITULO V CONDICIONALES
IF
EVALUATE
PERFORM
o BÁSICO
o ANIDADOS
o TIMES
o UNTIL
o THRU
o VARYING
o COMBINADO
o LINEA
TIMES
UNTIL
VARYING
MASCARAS
OCCURS
DEPENDING ON
ORDENAMIENTOS
BUSQUEDAS
OPEN
CLOSE
READ
WRITE
REWRITE
LINEAS DE BALANCE
BUSQUEDAS EN ARCHIVOS
OPEN
CLOSE
READ
WRITE
REWRITE
START
DELETE
CAPITULO XI SUBPROGRAMACION
CALL
LINK
COPY
SIMPLES
LINEAS DE BALANCES
CURSO DE COBOL
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 versión.
REAL COBOL
COBOL-I
COBOL-II
MICROFOCUS COBOL
VICOBOL.
TIPOS DE DATOS
TIPOS DE PALABRAS
USUARIO
30 Caracteres máximo
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
TIPOS DE CONSTANTES
ALFABETICAS
NUMERICAS
ALFANUMERICAS
FIGURATIVAS
ZERO
ZEROS 0
ZERUES
SPACE
SPACES Espacios en blanco
ALL
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 creación.
DATE-COMPILED. (Fecha de compilación.)
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.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
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.
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.
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 condición
8 12
FILE SECTION.
FD Nombre del fichero.
BLOCK CONTAINS Numero de registros por bloque RECORDS
RECORD CONTAINS Número 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.
LINKAGE SECTION.
01 PAR-FECHA PIC 9(8).
01 PAR-SALDO PIC S9(8)V99.
COMMUNICATION SECTION.
SCREEN SECTION.
REPORT SECTION.
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.
INICIO.
Instrucción1
nstrucción2
Instrucción3
Instrucción-n
STOP RUN.
Según la opción escogida, así será el valor que contendrá la variable usada,
una vez completada la sentencia. Veamos cada una de las opciones:
DISPLAY variable, literal CLAUSULAS ... LINE, COL, SIZE, HIGH, LOW,
REVERSE, BEEP, BLINK, ERASE.
Formato:
EJEMPLO:
A=B
MOVE B TO A
A= 0
MOVE 0 TO A
MOVE ZEROS TO A
PROCEDURE DIVISION.
INICIO.
INITIALIZE CANCEN1-REG.
Formato 1:
INSPECT campo1
TALLYING variable1 FOR ( CHARACTERS)
(( BEFORE/AFTER) INITIAL) Cadena1
(ALL)(LEADING) Cadena2 ...
(Se puede repetir de nuevo)
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.
INSPECT campo1
REPLACING variable1 CHARACTERS BY Cambio1
(( BEFORE/AFTER) INITIAL)Cadena1
(ALL)(LEADING)( FIRST) Cadena2...
(Se puede repetir de nuevo)
WORKING-STORAGE SECTION.
77 TEXTO PIC X(15) VALUE "PAGINA DE COBOL".
77 CONTA PIC 9(8).
...
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.
Formato 3:
INSPECT campo1
CONVERTING Identificador1 TO Identificador2
(( BEFORE/AFTER) INITIAL) Cadena1 ... (Se puede repetir de nuevo)
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.
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
concatenación 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 cláusula el valor de identificador1
será en la posición 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 ejecutaría Sentencia1 si hubiera habido un error
al hacer la concatenación, por ejemplo si se especifica Identificador1
con un valor superior al tamaño del Campo3.
NOT ON OVERFLOW, se ejecutará Sentencia2 si no existe error en
la operación.
EJEMPLO:
Obtendriamos en VAR-ENCADENA:
HOY ES 16 DE AGOSTO DE 2010
.
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.
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 ELAÑO PIC X(10).
PROCEDURE DIVISION.
INICIO.
UNSTRING LAFECHA DELIMITED BY " "
INTO TEXTO1 TEXTO2 DIA TEXTO3
ELMES COUNT LETRAS TEXTO4 ANIO.
REDEFINES.
WORKING-STORAGE SECTION.
01 VAR-FECHA PIC X(10).
01 VAR-FECHA-PAR REDEFINES VAR-FECHA.
02 AÑO PIC 9(4).
02 FILLER PIC X(1).
02 MES PIC 9(2).
02 FILLER PIC X(1).
02 DIA PIC 9(2).
ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE
ADD: Suma
FORMATOS:
12
1.- ADD variable1 variable 2.... TO variable (ROUNDED) (ON SIZE
ERROR ) instrucción NOT ON SIZE ERROR instrucción
END-ADD
2.- ADD variable1 variable 2... GIVING variable (ROUNDED) (ON SIZE
ERROR ) instrucción NOT ON SIZE ERROR instrucción
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
FORMATOS:
A= A - B
SUBTRACT B FROM A
A = A - B - 10 - J
SUBTRACT J 10 B FROM A
A = B - J - C - D - 10
MULTIPLAY: Multiplicación.
FORMATOS:
END-MULTIPLY
A= A * B
MULTIPLY B BY A
C= A * B
MULTIPLY B BY A GIVING C
DIVIDE: División
FORMATOS:
A= A / B
DIVIDE B INTO A
C= A / B
C = A / B; Residuo en R
*Usando el BY
A= A / B
DIVIDE A BY B GIVING A
C= A / B
DIVIDE A BY B GIVING C
C = A / B; Residuo en R
COMPUTE , con ésta orden podemos realizar todos los cálculos aritméticos
posibles en una sola instrucción, utilizando los operadores +(suma) -(resta)
*(multiplicación) /(división) **(potenciación), además de utilizar paréntesis
para especificar mejor la operación a realizar.
FORMATO:
Jerarquías:
1. ()
2. **
3. * /
4. +-
CAPITULO V CONDICIONALES
CONDICIONALES
1. IF
1- Por un punto.
2- Por la cláusula END-IF.
TIPOS DE IF
CLASE
SIGNO
RELACION
NOMBRES DE CONDICION
ANIDADOS
SIGNO:
Permiten determinar si el valor de un campo numérico de una expresión
aritmética es positivo, negativo o cero. El formato general es el siguiente:
nombre datos POSITIVE
IS [NOT] NEGATIVE
expr-aritmetica ZERO
RELACION:
Condiciones combinadas.
Nombres de Condición:
ANIDADOS:
Las sentencias IF...THEN pueden estar anidadas. Esto quiere decir que
como acción-1 o acción-2, de acuerdo con el formato, puede escribirse otra
sentencia IF.
2. EVALUATE
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 TRUE
WHEN MUJER ADD 1 TO CON-MUJERES
WHEN HOMBRE ADD 1 TO CON-HOMBRES
WHEN OTHER ADD 1 TO CON-OTROS
END-EVALUATE
PERFORM
CALL
LINK
PERFORM
BÁSICO
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
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 ejecución están
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.
.
TIMES
FORMATO:
EJEMPLO:
LEER.
Sentencia-1
Sentencia-2
Sentencia-n.
UNTIL
FORMATO:
EJEMPLO:
LEER.
ADD 1 TO X
Sentencia-2
Sentencia-n.
THRU
FORMATO:
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
BEFORE
PERFORM procedimiento-1 WITH TEST
AFTER
nombre dato-1 nombre dato-2 nombre dato-3
VARYING FROM literal BY
nombre indice-1 nombre indice-2 nombre indice-3
UNTIL condición-1
nombre dato-4 nombre dato-5 nombre dato-6
AFTER FROM literal-2 BY
nombre indice-4 nombre indice-5 nombre indice-6
UNTIL condición-2
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:
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.
( 10, 1 ) TO ACUMULADOR.
( 10, 2 ) TO ACUMULADOR.
( 10, 3 ) TO ACUMULADOR.
.
COMBINADOS
UNTIL condición
BEFORE
PERFORM procedimiento-1 [THRU procedimiento-2] WITH TEST
AFTER
UNTIL condición
EN LINEA
o UNTIL EN LINEA
FORMATO:
BEFORE
PERFORM WITH TEST UNTIL condición
AFTER
{sentencia} ...
END-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
FORMATO:
BEFORE nombre dato-1 nombre dato-2
PERFORM WITH TEST VARYING FROM literal
AFTER nombre indice-1 nombre indice-2
nombre dato-3
BY UNTIL condición
nombre indice-3
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
entero
PERFORM TIMES {sentencia}..... END-PERFORM
nombre datos
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.
Se utilizan para presentar de una forma clara por pantalla o por la impresora los
campos o datos numéricos.
DEFINICION
Define el tamaño de la tabla. No puede aparecer en líneas 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 numéricos.
01 TABLA.
05 ELEMENTOS OCCURS 100 PIC 99.
01 TABLA.
05 ELEMENTOS OCCURS 100 PIC 99 VALUE ZERO.
FUNCION:
FORMATO:
número-de-nivel nombre-dato1 REDEFINES nombre-dato2
Ejemplo:
Redefinimos un campo alfanumérico 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.
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.
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).
TABLAS VARIABLES
Se dice que una tabla es variable cuando su tamaño varía de una ejecución a otra.
FORMATO:
OCCURS entero-1 TO entero-2 TIMES DEPENDING ON numero-datos
Ejemplo:
Una tabla que tenga de 100 a 200 elementos según el número de artículos
existentes.
01 TABLA.
05 ARTICULOS OCCURS 100 TO 200 DEPENDING ON
N-ARTICULOS.
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.
.
( 10, 10) TO ACUMULADOR.
TABLAS INDEXADAS
FUNCION:
Nos permite indexar una tabla para posteriormente hacer búsquedas sin
necesidad de recorrerla entera.
FORMATO:
ASCENDING
OCCURS entero TIMES KEY IS dato-1 [dato2...]
DESCENDING
Ejemplo:
01 CAMPOS.
05 INDICE USAGE IS INDEX.
01 TABLA.
05 ELEMENTOS OCCURS 10 INDEXED BY INDICE.
INSTRUCCION SET
FUNCION:
Para inicializar índices o cambiar su contenido. Sólo los declarados como USAGE
INDEX.
FORMATO:
TO entero
SET indice UP BY
DOWN BY variable
Ejemplo:
Inicializar el indice en 2.
SET INDICE TO 2.
Ejemplo:
Restar 3 al indice.
SET INDICE DOWN BY 3.
INSTRUCCION SEARCH
FUNCION:
Sirve para buscar un elemento o varios en una tabla. Esta opción puede ser
utilizada con subíndices pero es mucho mas lenta.
FORMATO:
índice
SEARCH identificador VARYING AT END acción-1
variable
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 "
DEFINICION:
ORGANIZATION IS [RECORD]
SEQUENTIAL
LINE
FILE SECTION.
En esta sección describiremos los campos que van a componer el registro de cada
uno de los archivos con los que vamos a trabajar, ésta sería su sintaxis:
LABEL RECORD
[RECORDING MODE IS]
[BLOCK CONTAINS]
[RECORD CONTAINS]
[DATA RECORD IS]
Sentencia OPEN:
Formato 1:
NO REWIND
OPEN INPUT fichero-1 REVERSED WITH ...
LOCK
Formato 2:
NO REWIND
OPEN OUTPUT fichero-1 REVERSED WITH ...
LOCK
Formato 3:
Formato 4:
EJEMPLO
Sentencia CLOSE.
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 magnéticas y discos magnéticos
respectivamente para indicar que le fichero tratado es multivolumen.
La opción WITH LOCK hace que el fichero cerrado no pueda volverse a abrir
durante el resto de la ejecución del proceso en cuestión.
Sentencia WRITE:
nombre-de-dato-2 [LINE[S]]
BEFORE entero [LINE[S]]
ADVANCING PAGE
AFTER
TAB
FORMFEED
END-OF-PAGE
AT sentencia-1
EOP
END-OF-PAGE
NOT AT sentencia-1
EOP
[END-WRITE]
Registro identifica el nombre del registro lógico 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.
EJEMPLO
Sentencia READ:
Fichero es el nombre simbólico del fichero del cual se quiere leer un registro. Este
fichero tiene que ser abierto en modo INPUT o I-O.
En un fichero abierto en modo I-O con LOCK MODE AUTOMATIC, a menos que
se especifique la opción WITH NO LOCK, cada registro en el momento de leerse
es exclusivo, no compartido, siendo liberado cuando finaliza la lectura.
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 opción WITH
LOCK en la sentencia READ.
EJEMPLO:
Si el fichero se abre en modo I-O, es posible modificar el ultimo registro leído por
medio de la sentencia REWRITE, la cual presentamos a continuación.
Sentencia REWRITE.
EJEMPLO:
DEFINICION
entero-1 AREA
RESERVE ALTERNATE
NO AREAS
ORGANIZATION IS INDEXED
SEQUENTIAL
ACCESS MODE IS RANDOM
DYNAMIC
nombre dato-1
RECORD KEY IS
clave-m = nombre dato-4,[nombre dato-5] ...
nombre dato-1
ALTERNATE RECORD KEY IS
clave-m = nombre dato-6,[nombre dato-7] ...
no existe, se crea. Con lo cual nos evitamos tener que abrirlo como OUTPUT y
cerrarlo, antes de poder utilizarlo por primera vez.
alternativa el NIF, y podríamos acceder a el por las dos claves, bien por código o
bien por NIF, será también alfanumérico y deberá también 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
además del NIF, el Nombre del cliente, podría darse el caso de que dos clientes
tuvieran el mismo nombre.
Sentencia OPEN:
INPUT
OUTPUT
OPEN{{ [WITH LOCK]}...}
I-O
EJEMPLO
Sentencia CLOSE:
EJEMPLO
CLOSE NOMINA
CLOSE CARGOS
CLOSE SALDOS SALIDAS
Sentencia READ:
NEXT
READ fichero RECORD [INTO nombre dato-1]
PREVIOUS
KEPT
[WITH LOCK]
NO
EJEMPLO:
KEPT
[WITH LOCK]
NO
nombre-de-dato-2
KEY IS
clave-m
[INVALID KEY sentencia-3]
[NOT INVALID KEY sentencia-4]
[END-READ]
EJEMPLO:
Sentencia WRITE:
El nombre de dato que especifica la clave principal, debe ser puesto por el
programa al valor deseado, antes de ejecutar la sentencia WRITE.
EJEMPLO:
END-WRITE
Sentencia REWRITE:
El fichero asociado con registro debe ser un fichero residente en disco y abierto en
modo I-O.
EJEMPLO:
Sentencia START:
EQUAL TO
=
GREATER THAN
>
NOT LESS THAN
NOT <
START fichero [KEY IS GREATER THAN OR EQUAL TO nombre-dato]
>=
LESS THAN
<
NOT GREATER THAN
NOT >
LESS THAN OR EQUAL TO
<=
[WITH SIZE entero]
[INVALID KEY sentencia-1]
[NOT INVALID KEY sentencia-2]
[END-START]
Si el operador de relación 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 lógico cuya clave satisfaga la condición.
Si el operador de relación 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 lógico del fichero cuya clave satisfaga la condición.
EJEMPLO:
Sentencia DELETE:
FORMATO 1:
La frase INVALID KEY no puede ser especificada con una sentencia DELETE que
haga referencia a un fichero con modo de acceso secuencial.
EJEMPLO:
FORMATO 2:
Esta sentencia borra los ficheros especificados, los cuales deben ser cerrados
previamente.
EJEMPLO:
CAPITULO XI SUBPROGRAMACION
SUBPROGRAMACION
BY REFERENCE
CALL nombre-programa USING nombre-
variable-1
BY CONTENT
BUSQUEDAS EN ARCHIVOS
BUSQUEDAS SIMPLE
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.
*********************************************************
Que hay que mirar si esta estructura no arroja los resultados esperados:
LINEAS DE BALANCE
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)
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.
*********************************************************