COBOL (Common Business Oriented Language)

Anuncio
IDENTIFICATION DIVISION.
PROGRAN−ID. Nombre de Programa.
ENVIRONMENT DIVISION.
[ CONFIGURATION SECTION.
SPECIAL−NAMES.
DECIMAL−POINT IS COMMA.]
[INPUT−OUTPUT SECTION.
FILE−CONTROL.
* Para ficheros secuenciales
SELECT Fichero ASSIGN TO DISK.
* Para ficheros Indexados
SELECT Fichero ASSIGN TO DISK
ORGANIZATION INDEXED
RECORD KEY IS CLAVE
[ACCESS IS RANDOM / DYNAMIC
FILE STATUS IS ERR.]
* Para Impresora
SELECT IMPRES ASSIGN TO PRINTER.]
DATA DIVISION.
[FILE SECTION.
* Para cada fichero en Disco
FD Fichero LABEL RECORD STANDARD
VALUE OF FILE−ID ðNombre de fichero.DATð.
01 Nombre de registro.
02 Nombre de Campo PIC ....
1
02 Tabla OCCURS veces.
03 Campos repetidos PIC ....
.
.
* Para la Impresora
FD IMPRES LABEL RECORD OMITTED
LINAGE 60 FOOTING 60 TOP 3 BOTTOM 3.
01 RIMPRES PIC X(80).]
WORKING−STORAGE SECTION.
01 CAMPOS−DE−TRABAJO VALUE ð0".
02 Nombre de campo PIC ...
02 Tabmes.
03 FILLER PIC X(30) VALUE...
02 Tab REDEFINES TABMES.
. 03 MES OCCURS 12 PIC X(10)
01 CABECERA1.
.
. Se definen las cabeceras si las hay
PROCEDURE DIVISION.
MOVE Nombre de Campo TO Nombre de campo [Nombre de campo ....] Literal
2
ADD Nombre de Campo TO Nombre de campo
Literal GIVING
SUBTRACT Nombre de Campo FROM Nombre de campo
Literal Literal Numerico
GIVING Nombre de campo
3
MULTIPLY Nombre de Campo FROM Nombre de campo Literal Literal Numerico
GIVING Nombre de campo
DIVIDE Nombre de Campo FROM Nombre de campo
Literal Literal Numarico
GIVING Nombre de campo
Nombre de Campo
COMPUTE Nombre de Campo = Literal Numerico
Expresión Aritmética
4
STOP RUN
Literal
DATE
ACCEPT Nombre de Campo FROM DAY
TIME
ACCEPT Nombre de Campo
LENGTH−CHECK
AUTO−SKIP
ACCEPT (Fila, Columna) Nombre de Campo WITH PROMPT
BEEP
UPDATE
5
Literal
DISPLAY (Fila, Columna) Nombre de Campo
ERASE
PERFORM Nombre de Parrafo THRU Nombre de Parrafo
Nombre de seccion
PERFORM Rango Entero TIMES
Nombre de campo
PERFORM Rango VARYING Nombre de Indice FROM Cantidad1
BY Cantidad2 UNTIL Condicion.
IF Condicion Declaracion/es ELSE Declaracion/es.
INPUT
6
OPEN OUTPUT Nombre de Fichero ...... .......
I−O
EXTEND
Lectura Secuencial
READ Fichero AT END Declaracion Imperativa.
Lectura Secuencial, si ACCESS IS DYNAMIC
READ Fichero NEXT AT END Declaracion Imperativa.
Lectura al azar (solo ficheros Indexados)
READ Fichero INVALID KEY Declaracion Imperativa.
GREATER
START Fichero KEY IS [NOT] LESS CLAVE
EQUAL
DELETE Fichero (Solo Indexados)
WRITE Rimpres FROM Nombre de Grupo [AFTER/BEFORE]
[AT EOP Declaración Imperativa.]
WRITE Registro de Fichero [ FROM Nombre de Grupo]
[INVALID KEY Declaracion Imperativa.]
REWRITE Nombre de Registro
CLOSE Fichero ..... ......
STRING Emisor DELIMITED BY Literal
INTO Receptor WITH POINTER Contador
7
SORT Fichero Sort ASCENDING/DESCENDING Nombre de Campo del Fsort
INPUT PROCEDURE Nombre de Seccion(ENTRADA)
OUTPUT PROCEDURE Nombre de Seccion(SALIDA).
ANEXO DE FICHEROS
1.− FICHEROS.
a) Definición en la SELECT
1.1.− Para ficheros secuenciales.
SELECT Fichero ASSIGN TO DISK.
1.2.− Para ficheros Indexados.
SELECT Fichero ASSIGN TO DISK
ORGANIZATION INDEXED
RECORD KEY IS CLAVE.
[ACCESS IS IS RANDOM/DYNAMIC]
b) Definiciones en la DATA DIVISION.
Para ambos ficheros es exactamente igual.
c) Creacion de un fichero.
Si secuencial se pueden añadir registros al final se se abre de EXTEND. No pueden darse altas entre 2
registros. Las altas se graban con WRITE.
Si indexado se abre el fichero de I−O con acceso RANDOM, se pueden dar altas al final y entre registros. Se
graban con WRITE.
NOTA: NO SE ABRIR UN FICHERO QUE YA EXISTA DE OUTPUT, SE BORRARIA.
Si un fichero indexado se desea crear y añadir registros en el mismo programa, se procede de la siguiente
forma:
En la SELECT se incorpora la clausula FILE STATUS IS ERR. ERR es un campo de 2 octetos alfanumerico,
donde el programa dejará un codigo de error si éste se produce durante la apertura del fichero. ERR = ð30"
significa, fichero no existente.
PROCEDURE DIVISION.
COMIENZO.
8
OPEN I−O FICHERO
IF ERR=ð30"
OPEN OUTPUT FICHERO
CLOSE FICHERO
OPEN I−O FICHERO.
MENU.
Etc.
d) Consulta de Ficheros.
1.1− En ficheros Secuenciales.
Solo se puede realizar secuencialmente.
Para obtener un listado de todo el fichero podemos realizar el siguiente seudocodigo:
FIN=ðNð
LEER FICHERO
DO UNTIL FIN =ðSð
PROCESO
MOVER CAMPOS A DETALLE
LEER FICHERO AT END FIN=ðSð.
ENDDO
1.2.− En ficheros Indexados.
Se puede realizar de tres formas:
1.2.1.− Secuencialmente.
Se hace igual que para ficheros secuenciales.
1.2.2.− Al azar.
Se tiene que poner en la Select ACCESS IS RANDOM. El seudocodigo sería:
ENCONTRADO=ðSð
9
CLAVE = INDICATIVO
LEER FICHERO INVALID KEY ENCONTRADO=ðSð
IF ENCONTRADO = ðSð
VISUALIZAR REGISTRO
ELSE
VISUALIZAR ERROR.
1.2.3.− Entre limites (desde un indicativo hasta otro dados por teclado)
El seudocodigo sería el siguiente:
<COMIENZO>
ACEPTAR DESDE
ACEPTAR HASTA
CLAVE=DESDE
ENCONTRADO=ðSð
START FICHERO KEY IS NOT LESS CLAVE
INVALID KEY ENCONTRADO=ðSð
IF ENCONTRADO = ðSð
INVOCA <PROCESO>
ELSE
VISUALIZAR ðNO ENCONTRADOð.
<FIN>
<PROCESO>
FIN=ðSð
LEER FICHERO NEXT
DO UNTIL CLAVE > HASTA OR FIN=ðSð
PROCESO
LISTAR
10
LEER FICHERO NEXT AT END FIN=ðSð
ENDDO
<FIN−PROCESO>
e) Modificacion de Registros.
Tanto en ficheros secuenciales como indexados se pueden REGRABAR, previa consulta, si el fichero está
abierto de I−O.
Si la actualizacion es mediante teclado, se utiliza la orden:
ACCEPT CAMPO WITH UPDATE
Que visualiza el contenido del campo y permite modificarlo, de forma que un <ENTER> solo, no altere el
contenido actual del campo.
f) Bajas de registros.
En un fichero secuencial NO PUEDEN DARSE BAJAS. (Solo con Copia)
En un fichero indexado se pueden dar bajas una vez consultado el registro, con la orden DELETE FICHERO.
RESUMEN DE COBOL
COBOL .−Resumen de Comandos
Pagina: 1
GESTINMATICA.− Centro Homologado de F.P.2. en Informatica de Gestión
COBOL .−Resumen de Comandos
Pagina: 7
11
Descargar