Está en la página 1de 231

Curso

COBOL
COBOL
COmmon Business Oriented
Language
Introducción
 Desarrollado en 1960 por el comité CODASYL
(Conference on Data Systems Languages)
 El American National Standards Institute (ANSI)
desrrolla nuevos estándares en 1968, 1974 y
1985
 Existen nuevos productos (COBOL OO)
 Gartner estima que en el año 2002 hay alrededor
de dos millones de programadores COBOL
comparados con alrededor de un millón de
programadores Java y un millón de
programadores C++

Pág: 3 15/09/2019
Lenguajes
 Máquina: escrito en binario o hexadecimal
 Bajo nivel: (1 x 1) Ensambladores.
 Alto nivel: portables, más parecidos al
lenguaje humano
 Compilados: se traducen a lenguaje
máquina una sola vez
 Interpretados: se traduce una instrucción
cada vez que se ejecuta

Pág: 4 15/09/2019
Teorema de Dijkstra
 Todo programa puede escribirse utilizando
sólo tres estructuras:
 Secuencia: Sucesión simple de dos o más
operaciones
 Selección: Bifurcación condicional de una o
más operaciones
 Interacción: Repetición de una o más
operaciones mientras se cumple una condición

Pág: 5 15/09/2019
Hoja de codificación COBOL

Pág: 6 15/09/2019
Estructura de un programa COBOL
Programa COBOL
División
Sección
Párrafo
Sentencia
...
...
...
...
Instrucción ... ...

Pág: 7 15/09/2019
Estructura de un programa COBOL
 División:
 Empieza con el nombre de la división y termina con la
siguiente división
 Sección:
 Comienza con el nombre de la sección y termina con la
siguiente división
 Párrafo:
 Comienza con el nombre de párrafo y termina con el
siguiente párrafo
 Sentencia:
 Una o más instrucciones terminadas en un punto
 Instrucción:
 Un verbo COBOL y uno o más operados
Pág: 8 15/09/2019
Las divisiones de un programa
 Comienzan en área A (col. 8)
 Terminan en un punto
 IDENTIFICATION DIVISION:
 Nombre programa
 Programador
 Fecha de codificación y compilación
 Comentarios
 ENVIRONMENT DIVISION:
 Ficheros
 Punto decimal, etc.
 DATA DIVISION:
 Descripción de datos
 PROCEDURE DIVISION:
 Código para manipular los datos
Pág: 9 15/09/2019
Proceso de compilación
Informe
Compilador
Fuente
Compilador
Informe
Linkeditor

Objeto Linkeditor
Load

Pág: 10 15/09/2019
Un programa mínimo
IDENTIFICATION DIVISION.
PROGRAM-ID. HOLA.
AUTHOR. ALBERTO.
* IMPRIME UN SALUDO
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY ‘HOLA MUNDO’.
STOP RUN.

Pág: 11 15/09/2019
IDENTIFICATION DIVISION
|________________________________________________________________________|
| >>__ _IDENTIFICATION_ __DIVISION.__PROGRAM-ID__ ___ __program-name___> |
| |_ID_____________| |_._| |
| >__ ______________________________________ __________________________> |
| |_AUTHOR__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ ____________________________________________ ____________________> |
| |_INSTALLATION__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ ____________________________________________ ____________________> |
| |_DATE-WRITTEN__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ _____________________________________________ ___________________> |
| |_DATE-COMPILED__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
| >__ ________________________________________ _______________________> |
| |_SECURITY__ ___ __ ___________________ _| |
| |_._| | _______________ | |
| |___comment-entry_|_| |
|________________________________________________________________________|
Pág: 12 15/09/2019
Categorías de datos
 Variables:
 Espacio de memoria del que leemos o escribimos
 Se le asigna un nombre y tipo (DATA DIVISION)
 Numéricas
 Alfanuméricas
 Alfabéticas
 Constantes (literales):
 No se modifican durante la ejecución del programa
 Numéricas (sin comillas)
 Alfanuméricas (con comillas)
 Constantes figurativas:
 SPACE (SPACES) uno o más blancos
 ZERO (ZEROS, ZEROE, ZEROES) uno o más ceros
 QUOTE (QUOTES) comillas
 HIGH-VALUE (HIGH-VALUES) máximo valor
 LOW-VALUE (LOW-VALUES) mínimo valor
 ALL literal – uno o más “literal”
Pág: 13 15/09/2019
Declaración de variables I
 Cada declaración consta de:
 Un número de nivel
 Un nombre (1: 30 pos.) (A:Z, 0:9, -) 1ª letra
 Un formato (PICTURE)
 9 un dígito
 X un carácter cualquiera
 A un carácter alfabético
 V la posición del signo
 S indica que hay signo y sólo puede figurar al principio

 Un
valor (VALUE) opcional
PIC 9(6) = PICTURE 999999
PIC 9(6)V99 = PIC 999999V99
PICTURE X(10) = PIC XXXXXXXXXX
PIC S9(4)V9(4) = PIC S9999V9999
PIC 9(18) = PIC 999999999999999999
Pág: 14 15/09/2019
Declaración de variables II
ITEM
ELEMENTAL
01 DETALLE-ESTUDIANTES.
05 EST-NUM PIC 9(7).
05 EST-NOMBRE.
07 EST-NOM PIC X(15).
ITEM 07 FILLER PIC X VALUE SPACE
DE 07 EST-APELLIDOS PIC X(15).
GRUPO 05 EST-F-NACIMIENTO.
07 EST-DIA-NAC PIC 99.
07 EST-MES-NAC PIC 99.
07 EST-ANO-NAC PIC 9(4).
05 EST-CURSO PIC X(4).

NO REFERENCIABLE
Pág: 15 15/09/2019
Números de nivel

 Pueden ir del 01 a 49
 Niveles “especiales”
 66 asigna un alias a una variable (no usado)
 77 define exclusivamente items elementales
 88 define nombres de condición

Pág: 16 15/09/2019
Verbos COBOL
ACCEPT DELETE IF PERFORM START

ADD DISPLAY INITIALIZE READ STOP

ALTER DIVIDE INSPECT RELEASE STRING

CALL ENTRY INVOKE RETURN SUBTRACT

CANCEL EVALUATE MERGE REWRITE UNSTRING

CLOSE EXIT MOVE SEARCH WRITE

COMPUTE GOBACK MULTIPLY SET

CONTINUE GO TO OPEN SORT

Pág: 17 15/09/2019
Variable definida en SYSIN
ACCEPT DATA DIVISION CONSOLE

>>__ACCEPT__identifier-1__ ____________________________ ___><


|_FROM__ _mnemonic-name-1__ _|
|_environment-name_|

AAMMDD AAAAMMDD

>>__ACCEPT__identifier-2__FROM__ _DATE__ __________ _ _____><


| |_YYYYMMDD_| |
AADDD |_DAY__ _________ ___|
| |_YYYYDDD_| |
1.- Lunes |_DAY-OF-WEEK________|
7.-Domingo |_TIME_______________|

AAAADDD
HHMMSSCC
Pág: 18 15/09/2019
DISPLAY
Se pueden codificar varios
identificadores o literales

<__________________
<<__DISPLAY__ _identifier-1_ _|_______________________________<
|_literal-1____|
<__ ____________________________ ______________________ _____<<
|_UPON__ _mnemonic-name-1__ _| |_______NO ADVANCING_|
|_environment-name-1_| |_WITH_|

No codificar No avanzar
línea

Pág: 19 15/09/2019
Terminación del programa

 STOP RUN:
 Devuelve el control al Sistema Operativo
 GOBACK:
 Devuelve el control al programa que le llamó

Pág: 20 15/09/2019
Ejercicio I
 Realizar un programa que muestre la fecha
y la hora del sistema en sus diferentes
formatos.
 Realizar un programa que acepte un texto
por pantalla (no valido host) y lo visualice
en la salida standard

Pág: 21 15/09/2019
MOVE
<______________
>>__MOVE__ _identifier-1_ __TO____identifier-2_|_______><
|_literal-1____|

>>_MOVE_ _CORRESPONDING_ __identifier-1__TO__identifier-2_><


|_CORR__________|

01 FECHA. 01 FECHA-EDIT.
05 DIA PIC XX. 05 DIA PIC XX.
05 MES PIC XX. 05 FILLER PIC X VALUE ‘-’.
05 ANO PIC XX. 05 MES PIC XX.
05 FILLER PIC X VALUE ‘-’.
05 ANO PIC XX.

MOVE CORR FECHA TO FECHA-EDIT.


Pág: 22 15/09/2019
MOVE (movimientos permitidos)

Alfanumérico

entero
Numérico
entero
Numérico no
editado
Numérico
editado
Alfanumérico

Alfabético
Destino
Origen

Alfanumérico S S N S S S
Numérico entero S S S S S N
Numérico no entero S S S S S N
Numérico editado S S S S S N
Alfanumérico editado S N N N S S
Alfabético S N N N S S
Pág: 23 15/09/2019
MOVE (alfanuméricos)
O S CAR P ERE Z

01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.

MOVE ‘GONZALEZ’ TO APELLIDOS.


MOVE ‘JUAN’ TO NOMBRE.
MOVE ‘ARESPACOCHAGA’ TO APELLIDOS.
MOVE ‘ROBUSTIANO’ TO NOMBRE.
MOVE ‘LUIS GARCIA’ TO ESTUDIANTE.
MOVE ALL ‘X’ TO ESTUDIANTE

Pág: 24 15/09/2019
MOVE (alfa numéricos)
O S CAR GONZAL E Z

01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.

MOVE ‘GONZALEZ’ TO APELLIDOS.


MOVE ‘JUAN’ TO NOMBRE.
MOVE ‘ARESPACOCHAGA’ TO APELLIDOS.
MOVE ‘ROBUSTIANO’ TO NOMBRE.
MOVE ‘LUIS GARCIA’ TO ESTUDIANTE.
MOVE ALL ‘X’ TO ESTUDIANTE

Pág: 25 15/09/2019
MOVE (alfanuméricos)
J UAN GONZAL E Z

01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.

MOVE ‘GONZALEZ’ TO APELLIDOS.


MOVE ‘JUAN’ TO NOMBRE.
MOVE ‘ARESPACOCHAGA’ TO APELLIDOS.
MOVE ‘ROBUSTIANO’ TO NOMBRE.
MOVE ‘LUIS GARCIA’ TO ESTUDIANTE.
MOVE ALL ‘X’ TO ESTUDIANTE

Pág: 26 15/09/2019
MOVE (alfanuméricos)
J UAN ARE S P ACO

01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.

MOVE ‘GONZALEZ’ TO APELLIDOS.


MOVE ‘JUAN’ TO NOMBRE.
MOVE ‘ARESPACOCHAGA’ TO APELLIDOS.
MOVE ‘ROBUSTIANO’ TO NOMBRE.
MOVE ‘LUIS GARCIA’ TO ESTUDIANTE.
MOVE ALL ‘X’ TO ESTUDIANTE

Pág: 27 15/09/2019
MOVE (alfanuméricos)
ROBU S T I AARE S P ACO

01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.

MOVE ‘GONZALEZ’ TO APELLIDOS.


MOVE ‘JUAN’ TO NOMBRE.
MOVE ‘ARESPACOCHAGA’ TO APELLIDOS.
MOVE ‘ROBUSTIANO’ TO NOMBRE.
MOVE ‘LUIS GARCIA’ TO ESTUDIANTE.
MOVE ALL ‘X’ TO ESTUDIANTE

Pág: 28 15/09/2019
MOVE (alfanuméricos)
LU I S GARC I A

01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.

MOVE ‘GONZALEZ’ TO APELLIDOS.


MOVE ‘JUAN’ TO NOMBRE.
MOVE ‘ARESPACOCHAGA’ TO APELLIDOS.
MOVE ‘ROBUSTIANO’ TO NOMBRE.
MOVE ‘LUIS GARCIA’ TO ESTUDIANTE.
MOVE ALL ‘X’ TO ESTUDIANTE

Pág: 29 15/09/2019
MOVE (alfanuméricos)
XXXXXXXXXXXXXXXX

01 ESTUDIANTE.
05 NOMBRE PIC X(8) VALUE ‘OSCAR’.
05 APELLIDOS PIC X(8) VALUE ‘PEREZ’.

MOVE ‘GONZALEZ’ TO APELLIDOS.


MOVE ‘JUAN’ TO NOMBRE.
MOVE ‘ARESPACOCHAGA’ TO APELLIDOS.
MOVE ‘ROBUSTIANO’ TO NOMBRE.
MOVE ‘LUIS GARCIA’ TO ESTUDIANTE.
MOVE ALL ‘X’ TO ESTUDIANTE.

Pág: 30 15/09/2019
Campos decimales y empaquetados
Representación Interna:
1 byte (carácter) = 8 bits

A = 1 1 0 0 0 0 0 1
C 1

6 = 1 1 1 1 0 1 1 0
F 6

+ 1 2 8 9 7
F 1 F 2 F 8 F 9 F 7

Al realizar una operación


Pág: 31 15/09/2019
Campos decimales y empaquetados
Representación Interna:
1 byte (carácter) = 8 bits

A = 1 1 0 0 0 0 0 1
C 1

6 = 1 1 1 1 0 1 1 0
F 6

+ 1 2 8 9 7
F 1 F 2 F 8 F 9 C 7

Si el campo es negativo
Pág: 32 15/09/2019
Campos decimales y empaquetados
Representación Interna:
1 byte (carácter) = 8 bits

A = 1 1 0 0 0 0 0 1
C 1

6 = 1 1 1 1 0 1 1 0
F 6

- 1 2 8 9 7
F 1 F 2 F 8 F 9 D 7

Formato empaquetado
Pág: 33 15/09/2019
Campos decimales y empaquetados
- 1 2 8 9 7

Decimal Empaquetado

F 1 F 2 F 8 F 9 D 7 1 2 8 9 7 D
5 octetos 3 octetos

- 1 2 8 9 7 6
Decimal
F 1 F 2 F 8 F 9 F 7 D 6 Empaquetado
6 octetos
0 1 2 8 9 7 6 D
4 octetos
Pág: 34 15/09/2019
MOVE (numéricos)
7 3 2 6 8 3 7
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.

MOVE 15.6 TO IMPORTE.


MOVE 123.456 TO IMPORTE.
MOVE 123456.789 TO IMPORTE.
MOVE ZEROS TO IMPORTE.
MOVE 1234567 TO IMPORTE.

Pág: 35 15/09/2019
MOVE (numéricos)
0 0 0 1 5 6 0
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.

MOVE 15.6 TO IMPORTE.


MOVE 123.456 TO IMPORTE.
MOVE 123456.789 TO IMPORTE.
MOVE ZEROS TO IMPORTE.
MOVE 1234567 TO IMPORTE.

Pág: 36 15/09/2019
MOVE (numéricos)
0 0 1 2 3 4 5 6
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.

MOVE 15.6 TO IMPORTE.


MOVE 123.456 TO IMPORTE.
MOVE 123456.789 TO IMPORTE.
MOVE ZEROS TO IMPORTE.
MOVE 1234567 TO IMPORTE.

Pág: 37 15/09/2019
MOVE (numéricos)
1 2 3 4 5 6 7 8 9
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.

MOVE 15.6 TO IMPORTE.


MOVE 123.456 TO IMPORTE.
MOVE 123456.789 TO IMPORTE.
MOVE ZEROS TO IMPORTE.
MOVE 1234567 TO IMPORTE.

Pág: 38 15/09/2019
MOVE (numéricos)
0 0 0 0 0 0 0
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.

MOVE 15.6 TO IMPORTE.


MOVE 123.456 TO IMPORTE.
MOVE 123456.789 TO IMPORTE.
MOVE ZEROS TO IMPORTE.
MOVE 1234567 TO IMPORTE.

Pág: 39 15/09/2019
MOVE (numéricos)
1 2 3 4 5 6 7 0 0
.
01 IMPORTE PIC 9(5)V99 VALUE 73268.37.

MOVE 15.6 TO IMPORTE.


MOVE 123.456 TO IMPORTE.
MOVE 123456.789 TO IMPORTE.
MOVE ZEROS TO IMPORTE.
MOVE 1234567 TO IMPORTE.

Pág: 40 15/09/2019
MOVE (numéricos)
1 1 1 1 1
.
01 IMPORTE PIC 9(5) VALUE 11111.

MOVE 987 TO IMPORTE.


MOVE 124567 TO IMPORTE.
MOVE 24.56 TO IMPORTE.

Pág: 41 15/09/2019
MOVE (numéricos)
0 0 9 8 7
.
01 IMPORTE PIC 9(5) VALUE 11111.

MOVE 987 TO IMPORTE.


MOVE 124567 TO IMPORTE.
MOVE 24.56 TO IMPORTE.

Pág: 42 15/09/2019
MOVE (numéricos)
1 2 3 4 5 6 7
.
01 IMPORTE PIC 9(5) VALUE 11111.

MOVE 987 TO IMPORTE.


MOVE 124567 TO IMPORTE.
MOVE 24.56 TO IMPORTE.

Pág: 43 15/09/2019
MOVE (numéricos)
0 0 0 2 4 5 6
.
01 IMPORTE PIC 9(5) VALUE 11111.

MOVE 987 TO IMPORTE.


MOVE 124567 TO IMPORTE.
MOVE 24.56 TO IMPORTE.

Pág: 44 15/09/2019
INITIALIZE

INITIALIZE {identificador ...} [REPLACING

ALPHABETIC
ALPHANUMERIC identificador
NUMERIC [DATA] BY
literal
ALPHANUMERIC-EDITED
NUMERIC-EDITED

Pág: 45 15/09/2019
ADD (Formato 1)
<_________________ <______________________
>>_ADD__ _identifier-1_ _|_TO_identifier-2_ _________|_____>
|_literal-1____| |_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ _________ ____________________________________________><
|_END-ADD_|

Pág: 46 15/09/2019
ADD (Formato 2)
<__________________
>>__ADD____ _identifier-1_ _|__ ____ __ _identifier-2_ ____>
|_literal-1____| |_TO_| |_literal-2____|
<__________________________
>__GIVING____identifier-3__ _________ _|___________________>
|_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ _________ ____________________________________________><
|_END-ADD_|

Pág: 47 15/09/2019
ADD (Formato 3)
>>__ADD_ CORRESPONDING _ _identifier-1__TO__identifier-2______>
|_CORR___________|
>_ _________ __ ____________________________________________ _>
|_ROUNDED_| |_ ____ __SIZE ERROR__imperative-statement-1_| >
|_ON_|
>__ _________________________________________________ ________>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ _________ _______________________________________________><
|_END-ADD_|

Pág: 48 15/09/2019
SUBTRACT (Formato 1)
<__________________ <_______________________
>>_SUBTRACT__ _identifier-1_ _|_FROM_identifier-2_ _________|>
|_literal-1____| |_ROUNDED_|
>__ _____________________________________________ ___________>
|_ ____ __SIZE ERROR_imperative-statement-1___|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-SUBTRACT___|

Pág: 49 15/09/2019
SUBTRACT(Formato 2)
<______________
>>__SUBTRACT_ _identifier-1_|_ ______ __ _identifier-2_ ___>
|_literal-1____| |_FROM_| |_literal-2____|
<_________________________
>__GIVING____identifier-3____________ _|___________________>
|_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _____________________________________><
|_END-SUBTRACT___|

Pág: 50 15/09/2019
SUBTRACT(Formato 3)
>>__SUBTRACT_ CORRESPONDING_ _identifier-1_FROM__identifier-2>
|_CORR_________|
>__ _________ __ ___________________________________________ >
|_ROUNDED_| |_ ____ __SIZE ERROR_imperative-statement-1_|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END- SUBTRACT _|

Pág: 51 15/09/2019
MULTIPLY (Formato 1)
<________________________
>>_MULTIPLY__ _identifier-1_ ___BY_identifier-2___ _________|>
|_literal-1____| |_ROUNDED_|
>__ _____________________________________________ ___________>
|_ ____ __SIZE ERROR_imperative-statement-1___|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-MULTIPLY___|

Pág: 52 15/09/2019
MULTIPLY(Formato 2)
>>__ MULTIPLY _ _identifier-1_|_ ____ __ _identifier-2_ ___>
|_literal-1____| |_BY_| |_literal-2____|
<_________________________
>__GIVING____identifier-3____________ _|___________________>
|_ROUNDED_|
>__ ____________________________________________ __________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _____>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _____________________________________><
|_END-MULTIPLY___|

Pág: 53 15/09/2019
DIVIDE (Formato 1)
<________________________
>>_DIVIDE__ _identifier-1_ _ INTO _identifier-2___ _________|>
|_literal-1____| |_BY_| |_ROUNDED_|
>__ _____________________________________________ ___________>
|_ ____ __SIZE ERROR_imperative-statement-1___|>
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-DIVIDE ____|

Pág: 54 15/09/2019
DIVIDE (Formato 2)
>>__ DIVIDE_ _identifier-1_|_ __ INTO __ __identifier-2 _____>
|_literal-1____| |_BY_| |_literal-2____|
<________________________
>_GIVING_identifier-3_ _________ _|________________________ _>
|_ROUNDED_| |_REMAINDER identifier-4 |
>__ ____________________________________________ ____________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|_END-DIVIDE_____|

Pág: 55 15/09/2019
COMPUTE
<___________________________
<<__COMPUTE____identifier-1__ _________ _|__ _=______________<
|_ROUNDED_| |_ EQUAL _|
<__arithmetic-expression_____________________________________<
>__ ___________________________________________ _____________>
|_ ____ __SIZE ERROR__imperative-statement-1_|
|_ON_|
>__ _________________________________________________ _______>
|_NOT__ ____ __SIZE ERROR__imperative-statement-2_|
|_ON_|
>__ ________________ _______________________________________><
|___END-COMPUTE__|

Precedencia Simbolo Significado


1 ** Potemcia
* Multiplicación
2
/ División
+ Suma
3
- Resta
Pág: 56 15/09/2019
ROUNDED
Campo Resutado Sin Con
Receptor operación rounded rounded
9(3)V9 123.25 123.2 123.3
9(3)V9 123.24 123.2 123.2
9(3) 123.25 123 123
9(3) 123.578 123 124

Pág: 57 15/09/2019
Size error
Resultado Después ¿Size
Campo Receptor
operación rounded Error?
PIC 9(3)V9 245.96 245.9 Si
PIC 9(3)V9 3245.9 245.9 Si
PIC 9(3) 324 324 No
PIC 9(3) 5324 324 Si
PIC 9(3)V9 no redondeado 523.35 523.3 Si
PIC 9(3)V9 redondeado 523.35 523.4 No
PIC 9(3)V9 redondeado 3523.35 523.4 Si

Pág: 58 15/09/2019
COMPUTE (Ejemplo)
9 0 - 7 * 3 + 5 0 / 2

Resultado = 94

Pág: 59 15/09/2019
COMPUTE (Ejemplo)
9 0 - ( 7 * 3 ) + ( 5 0 / 2 )
21 25
Resultado = 94

9 0 - ( ( 7 * 3 ) + ( 5 0 / 2 ) )
21 25
Resultado = 44

Pág: 60 15/09/2019
IF
<____________
>>__IF__condition-1__ ______ __ ___statement-1_|_ ___________>
|_THEN_| |_NEXT SENTENCE___|
>__ ___________________________ __ ___________ _____________><
| <_____________ | | |
|_ELSE__ ___statement-2_|_ _| |_END-IF____|
|_NEXT SENTENCE___|

Sentencia 1 Sentencia 1
Sentencia 2 Sentencia 2
IF VAR-A > VAR-D IF VAR-A > VAR-D
Sentencia 3 Sentencia 3
Sentencia 4 Sentencia 4
END-IF Sentencia 5
Sentencia 5 Sentencia 6.
Sentencia 6.
. .
Pág: 61 15/09/2019
Condiciones

 Condiciones simples:
 Clase
 Nombre de condición
 Relación
 Signo

 Condiciones complejas:
 Unión de dos o más condiciones simples, a
través de los operadores AND y OR

Pág: 62 15/09/2019
Condiciones de relación

[NOT] GREATER [THAN]


[NOT] >
[NOT] LESS [THAN]
Identificador [NOT] <
Identificador
Literal [NOT] EQUAL [THAN] Literal
Expresión [NOT] = Expresión
Aritmética GREATER [THAN] OR EQUAL [TO] Aritmética
>=
LESS [THAN] OR EQUAL [TO]
<=

Pág: 63 15/09/2019
Condiciones de clase y signo
NUMERIC
ALPHABETIC
Identificador [IS] [NOT] ALPHABETIC-LOWER
ALPHABETIC-UPPER
Clase-SPECIAL-NAMES

Identificador POSITIVE
Expresión [IS] [NOT] NEGATIVE
Aritmética ZERO

Pág: 64 15/09/2019
Sujeto implícito
IF VAR-A = 1 OR VAR-A = 5 OR VAR-A = 7

Puede abreviarse cómo:

IF VAR-A = 1 OR = 5 OR = 7

IF VAR-A > 100 AND VAR-A < 200

Puede abreviarse cómo:

IF VAR-A > 100 AND < 200

Pág: 65 15/09/2019
Nombres de condición
[VALUE] literal
88 nombre-condición [VALUES] Mín.valor
THRU
Máx.valor
THROUGH

01 DEP-CODE PIC X.

IF DEP-CODE = ‘A’ OR ‘H’ OR ‘K’ OR ‘W’


...
END-IF

01 DEP-CODE PIC X.
88 ADMINISTRATIVO VALUES ‘A’ ‘H’ ‘K’ ‘W’
IF ADMINISTRATIVO
...
END-IF
Pág: 66 15/09/2019
Nombres de condición
01 EDAD PIC 9(3).
88 NINO VALUE 0 THRU 13.
88 ADOLESCENTE VALUE 14 THRU 20.
88 ADULTO VALUE 21 THRU 999.
88 VOTANTE VALUE 18 THRU 999.

Pág: 67 15/09/2019
Set y nombres de condición
01 FILLER PIC 9 VALUE 0.
88 FIN-FICHERO VALUE 1.
88 NO-FIN-FICHERO VALUE 0.
READ FICHERO INTO AREA AT-END
SET FIN-FICHERO TO TRUE
END-READ

01 REGISTRO.
88 FIN-FICHERO VALUE HIGH-VALUES.
05 CAMPO1 ...
...

READ FICHERO INTO REGISTRO AT END


SET FIN-FICHERO TO TRUE
END-READ
Pág: 68 15/09/2019
IF anidados
Es posible anidar cualquier número de IF

IF ( VAR-A < 10 ) AND ( VAR-B NOT > VAR-C ) THEN


IF VAR-G = 14 THEN
DISPLAY ‘primero’
ELSE
DISPLAY ‘segundo’
END-IF
ELSE
DISPLAY ‘tercero’
END-IF

Pág: 69 15/09/2019
EVALUATE
Identificador Identificador
Literal Literal
Exp. Condicional
EVALUATE Exp. Aritmética
ALSO Exp. Condicional ...
Exp. Aritmética
TRUE TRUE
FALSE FALSE
ALSO
ANY
Condición
WHEN TRUE
FALSE Sentencia/s ...
...
Identif. THRU Identif.
[NOT] Literal THROUGH Literal
E. Arit. E. Arit.

[WHEN OTHER sentencia/s]


END-EVALUATE
Pág: 70 15/09/2019
EVALUATE (Ejemplo)
Qty Importe Club Descuento
1:5 0:500 Y 2%
6:16 0:500 Y 3%
>16 0:500 Y 5%
1:5 501:2000 Y 7%
6:16 501:2000 Y 12%
>16 501:2000 Y 18%
1:5 >2000 Y 10%
6:16 >2000 Y 23%
>16 >2000 Y 35%
1:5 0:500 N 1%
6:16 0:500 N 2%
>16 0:500 N 3%
1:5 501:2000 N 5%
6:16 501:2000 N 10%
>16 501:2000 N 15%
1:5 >2000 N 8%
6:16 >2000 N 23%
>16 >2000 Y 28%

Pág: 71 15/09/2019
EVALUATE (Ejemplo)
EVALUATE QTY ALSO TRUE ALSO CLUB
WHEN 1 THRU 5 ALSO IMPORTE < 501 ALSO 'Y' MOVE 2 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 501 ALSO 'Y' MOVE 3 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 501 ALSO 'Y' MOVE 5 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE < 2001 ALSO 'Y' MOVE 7 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 2001 ALSO 'Y' MOVE 12 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 2001 ALSO 'Y' MOVE 18 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE > 2000 ALSO 'Y' MOVE 10 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE > 2000 ALSO 'Y' MOVE 23 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE > 2000 ALSO 'Y' MOVE 35 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE < 501 ALSO 'N' MOVE 1 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 501 ALSO 'N' MOVE 2 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 501 ALSO 'N' MOVE 3 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE < 2001 ALSO 'N' MOVE 5 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE < 2001 ALSO 'N' MOVE 10 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE < 2001 ALSO 'N' MOVE 15 TO DESCUENTO
WHEN 1 THRU 5 ALSO IMPORTE > 2000 ALSO 'N' MOVE 8 TO DESCUENTO
WHEN 6 THRU 16 ALSO IMPORTE > 2000 ALSO 'N' MOVE 23 TO DESCUENTO
WHEN 17 THRU 99 ALSO IMPORTE > 2000 ALSO 'N' MOVE 28 TO DESCUENTO
END-EVALUATE

Pág: 72 15/09/2019
Tipos de Subrutinas
 Subrutinas abiertas:
 Se ejecutan cuando el flujo de control del programa
pasa sobre ellas
 Tienen acceso a las variables del programa principal y
no puede definir sus propias variables
 Subrutinas cerradas:
 Se ejecutan al ser llamadas por su nombre
 Definen sus propias variables, que no pueden ser
accedidas desde fuera
 Se le comunican datos vía parámetros
 COBOL subrutinas:
 PERFORM (Formato1) (Subrutinas abiertas)
 CALL (Subrutinas cerradas)

Pág: 73 15/09/2019
PERFORM (Fomato1)
PERFORM párrafo THRU parráfo
THROUGH

 Transfiere el control a otro bloque de código


 Al alcanzar el final se devuelve el control a la
instrucción siguiente a la que le llamó
 Pueden anidarse
 El orden de ejecución es independiente de su
situación física
 No se puede utilizar recursividad directa ni
indirecta

Pág: 74 15/09/2019
Párrafos
 Comienzan en el área A (col. 8)
 Terminan en un punto (.)
Definición:
99999-párrafo.
instrucciones ...
...
99999-párrafo-EXIT.
Nº de EXIT.
secuencia
Llamada:
PERFORM 99999-párrafo THRU
99999-párrafo-EXIT.

Pág: 75 15/09/2019
PERFORM (Fomato2)
PERFORM párrafo THRU parráfo
THROUGH

Identif. TIMES
Entero

 Ejecuta un bloque de instrucciones el número de


veces indicado
 Este formato y los sucesivos permiten dos modos
normal (out-line) y en línea (in-line)

Pág: 76 15/09/2019
PERFORM (Fomato2)
PERFORM párrafo THRU parráfo
THROUGH

Identif. TIMES
Entero
Sentencias
END-PERFORM

Pág: 77 15/09/2019
PERFORM (Fomato3)

THRU AFTER
PERFORM párrafo parráfo [WHIT] TEST
THROUGH BEFORE

UNTIL condición
Sentencias
END-PERFORM

Pág: 78 15/09/2019
PERFORM (Fomato3)
PERFORM con PERFORM con
TEST BEFORE TEST AFTER

Sentencias
Sentencias
Test
Falso

Cierto
Test
Falso
Siguiente Cierto
Sentencia
Siguiente
Sentencia
Pág: 79 15/09/2019
PERFORM (Fomato4)
THRU AFTER
PERFORM párrafo parráfo [WHIT] TEST
THROUGH BEFORE

Identif.
Identif.
VARYING Índice FROM Índice BY Identif.
literal literal

UNTIL condición
Identif. Identif.
AFTER Índice FROM Índice BY Identif.
literal
literal
UNTIL condición
Sentencias
END-PERFORM
AFTER no pude utilizarse en el formato in-line
Pág: 80 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso

Cierto
IDX

Siguiente
Sentencia
Pág: 81 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso

Cierto
IDX
1 Siguiente
Sentencia
Pág: 82 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso

Cierto
IDX
1 Siguiente
Sentencia
Pág: 83 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso
1 Cierto
IDX
1 Siguiente
Sentencia
Pág: 84 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso
1 Cierto
IDX
2 Siguiente
Sentencia
Pág: 85 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso

Cierto
IDX
2 Siguiente
Sentencia
Pág: 86 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso
1 Cierto
IDX 2
2 Siguiente
Sentencia
Pág: 87 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso
1 Cierto
IDX 2
3 Siguiente
Sentencia
Pág: 88 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso
1 Cierto
IDX 2
3 Siguiente
Sentencia
Pág: 89 15/09/2019
PERFORM (Fomato4)
PERFORM VARYING
MOVE 1 TO IDX
IDX FROM 1 BY 1
UNTIL IDX = 3 ADD 1 TO IDX
DISPLAY IDX
END-PERFORM
DISPLAY ‘SALIDA IDX = ‘ IDX DISPLAY IDX

IDX =3
SALIDA Falso
1 Cierto
IDX 2
3 SALIDA IDX = 3
Siguiente
Sentencia
Pág: 90 15/09/2019
Ejercicio II
 Visualización de fechas:
 Visualizar todas las fechas (día a día) para los
años 2003 a 2005.
 Cada fecha se visualizara en formato DD-
MM-AA
 Se considerará que todos los meses tienen 30
días
 Posteriormente modificar el programa para
considerar cada mes con los días que le
corresponden

Pág: 91 15/09/2019
Métodos de acceso
Programa

Método Disco
Leer De
acceso

Registro lógico

Cinta

Pág: 92 15/09/2019
Métodos de acceso
Programa

Método Disco
Leer De
acceso

Registro lógico

Cinta

Pág: 93 15/09/2019
VTOC

Etiqueta Formato, longitud registro,


VTOC del Dirección
Longitud bloque
fichero
Etiqueta Formato, longitud registro,
del Dirección
Longitud bloque
fichero

Fichero 1 Datos

Fichero 2 Datos

Pág: 94 15/09/2019
Definición de un fichero secuencial
ENVIRONMENT DIVISION. Debe coincidir con el
INPUT-OUTPUT SECTION. DDNAME del JCL

FILE-CONTROL.
SELECT fichero ASSIGN nombre-externo.
Suministraremos el
DATA DIVISION. blocaje por JCL
FILE SECTION.
FD FICHERO
BLOCK CONTAINS 0 RECORDS
La longitud total debe coincidir
RECORDING [MODE] F|V con el LRECL del JCL
LABEL RECORDS ARE STANDARD.
01 REGISTRO.
02 CAMPO1 PIC X.
...
02 CAMPON PIC ...
Pág: 95 15/09/2019
Uso de un fichero secuencial
Entrada INPUT Salida

OPEN OUTPUT Nombre-FD-SELECT ...


EXTEND
Añadir I-O Entrada-Salida

CLOSE Nombre-FD-SELECT ...

READ Nombre-FD-SELECT [NEXT] [RECORD]


[INTO identificador]
[[AT] END sentencias]
[NOT [AT] END sentencias]
[END-READ]
WRITE registro (nivel 01 FD)
[FROM identificador]
[END-WRITE]
Pág: 96 15/09/2019
E/S y Buffers Fichero
LRECL=50
BLKZIZE=250
Buffer

READ FICHERO Registros Leídos:


READ FICHERO
READ FICHERO
READ FICHERO
READ FICHERO
READ FICHERO

Pág: 97 15/09/2019
La unidad de
E/S y Buffers transferencia es el bloque
Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 1 Reg. 2 Reg. 3 Reg. 4 Reg. 5

Puntero

READ FICHERO Registros Leídos:


READ FICHERO
READ FICHERO
READ FICHERO
READ FICHERO
READ FICHERO

Pág: 98 15/09/2019
E/S y Buffers Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 1 Reg. 2 Reg. 3 Reg. 4 Reg. 5

Puntero

READ FICHERO Registros Leídos:


READ FICHERO Reg. 1
READ FICHERO
READ FICHERO
READ FICHERO
READ FICHERO

Pág: 99 15/09/2019
E/S y Buffers Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 1 Reg. 2 Reg. 3 Reg. 4 Reg. 5

Puntero

READ FICHERO Registros Leídos:


READ FICHERO Reg. 1
READ FICHERO Reg. 2
READ FICHERO
READ FICHERO
READ FICHERO

Pág: 100 15/09/2019


E/S y Buffers Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 1 Reg. 2 Reg. 3 Reg. 4 Reg. 5

Puntero

READ FICHERO Registros Leídos:


READ FICHERO Reg. 1
READ FICHERO Reg. 2
READ FICHERO Reg. 3
READ FICHERO Reg. 4
READ FICHERO Reg. 5

Pág: 101 15/09/2019


E/S y Buffers Fichero
LRECL=50
BLKZIZE=250
Buffer
Reg. 6 Reg. 7 Reg. 8 Reg. 9 Reg. 10

Puntero

READ FICHERO Registros Leídos:


READ FICHERO Reg. 1
READ FICHERO Reg. 2
READ FICHERO Reg. 3
READ FICHERO Reg. 4
READ FICHERO Reg. 5
Reg. 6

Pág: 102 15/09/2019


Ejercicio III
 Realizar un programa que liste el fichero
P390.alumnos.texto
 En el listado deben aparecer únicamente el
nombre y los apellidos
 El formato de los campos es el siguiente:
 ID-ALUMNO X(4)
 NOMBRE X(25)
 APELLIDOS X(50)
 La longitud total del fichero es de 80
 Para imprimir los datos utilizar DISPLAY
 Al final visualizar el nº de registros leídos y
escritos

Pág: 103 15/09/2019


Ejercicio III (pseudocódigo)
ABRIR ALUMNOS
INICIO-PROGRAMA
LEER-REGISTRO

DISPLAY nombre
IMPRIMIR-REGISTRO Y apellidos

REG-ESCRITOS + 1
PROCESO
(hasta
FIN-FICHERO)
READ ALUMNOS
LEER-REGISTRO
REG-LEIDOS + 1

CERRAR ALUMNOS
FIN-PROGRAMA
DISPLAY cont.

Pág: 104 15/09/2019


PICTURES de edición
 Tipos de PICTURES de edición:
 Inserción:
 Simple (, B 0 /)
 Especial (.)

 Fija (+ - CR DB $)

 Flotante (+ - $)

 Reemplazo:
 Ceros por espacios (Z)
 Ceros por * (*)

Pág: 105 15/09/2019


Inserción simple
EMISOR RECEPTOR
PICTURE DATOS PICTURE RESULTADO
999999 123456 999,999 123,456
9(6) 000078 9(3),9(3) 000,078
9(6) 000078 ZZZ,ZZZ bbbbb78
9(6) 000178 ***,*** ****178
9(6) 002178 ***,*** **2,178
9(6) 120183 99B99B99 12b01b83
9(6) 120183 99/99/99 12/01/83
9(6) 031245 990099 120045

Pág: 106 15/09/2019


Inserción especial
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

EMISOR RECEPTOR
PICTURE DATOS PICTURE RESULTADO
999V99 12345 999,99 123,45
999V99 02345 999,9 023,4
999V99 71234 99,99 12,34
9(4) 2456 999,99 456,00

Pág: 107 15/09/2019


Inserción fija
EMISOR RECEPTOR
PICTURE DATOS PICTURE RESULTADO
S999 -123 -999 -123
S999 -123 999- 123-
S999 +123 -999 b123
S9(5) +12345 +9(5) +12345
S9(3) -123 +9(3) -123
S9(3) -123 999+ 123-
S9(4) +1234 9(4)CR 1234bb
S9(4) -1234 9(4)CR 1234CR
S9(4) +1234 9(4)DB 1234bb
S9(4) -1234 9(4)DB 1234DB
9(4) 1234 $99999 $01234
9(4) 0000 $ZZZZZ $bbbbb
Pág: 108 15/09/2019
Inserción flotante
EMISOR RECEPTOR
PICTURE DATOS PICTURE RESULTADO
9(4) 0000 $$.$$9,99 bbbb$0,00
9(4) 0080 $$.$$9,00 bbb$80,00
9(4) 0128 $$.$$9,99 bb$128,00
9(5) 57397 $$.$$9 $7.397
S9(4) -0005 ++++9 bbb-5
S9(4) +0080 ++++9 bb+80
S9(4) -0080 ----9 bb-80
S9(5) +71234 ----9 -1234

Pág: 109 15/09/2019


PICTURE de reemplazo
EMISOR RECEPTOR
PICTURE DATOS PICTURE RESULTADO
9(5) 12345 ZZ.999 12.345
9(5) 01234 ZZ.999 b1.234
9(5) 00123 ZZ.999 bbb123
9(5) 00012 ZZ.999 bbb012
9(5) 05678 **.**9 *5.678
9(5) 00567 **.**9 ***567
9(5) 00000 **.*** ******
9(5)V99 0004345 $**.**9,99 $****43,45

Pág: 110 15/09/2019


Ejercicio IV
 El fichero P390.ALUMNOS.MAESTRO contiene los
estudiantes de un curso, su formato es:
 ALM-ID X(5)
 ALM-NOMBRE X(25)
 ALM-APELLIDOS X(30)
 ALM-F-NAC X(8) (AAAAMMDD)
 ALM-HORAS S9(5) COMP-3
 El fichero P390.ALUMNOS.ALTAS contiene los estudiantes
que han sido alta en el día, su formato es:
 ALM-ID X(5)
 ALM-NOMBRE X(25)
 ALM-APELLIDOS X(30)
 ALM-F-NAC X(8) (AAAAMMDD)
 Se quieren incorporar las nuevas altas al fichero maestro.
 Si un alumno ya existe debe rechazarse el movimiento, con el mensaje
correspondiente e ignorar el registro
 El total de horas debe formatearse a ceros
 Los dos ficheros están clasificados por nº de alumno
 Al final se visualizarán los registros leídos y escritos
Pág: 111 15/09/2019
Identificadores duplicados
Si definimos los registros tal y como se han
enunciado obtendremos nombres duplicados
01 MAESTRO.
05 ALM-ID X(5).
05 ALM-NOMBRE X(25).
05 ALM-APELLIDOS X(30).
05 ALM-F-NAC X(8).
05 ALM-HORAS S9(5) COMP-3.
01 ALTAS.
05 ALM-ID X(5).
05 ALM-NOMBRE X(25).
05 ALM-APELLIDOS X(30).
05 ALM-F-NAC X(8).

Podremos hacer referencia a ellos con la cláusula


[OF|IN] identificador, p.Ej.:
MOVE ALM-NOMBRE IN MAESTRO TO ...
Pág: 112 15/09/2019
Ejercicio IV (pseudocódigo)
ABRIR FICHEROS
INICIO-PROGRAMA READ MAESTRO
MOVTOS.
ESCRIBIR MAESTRO
MAESTRO > DESDE MOVTOS.
MOTOS LEER MOVTOS
PROCESO DISPLAY ERROR
(hasta MAESTRO =
FIN-MAESTRO MOVTOS LEER MOVTOS
Y FIN
MOVTOS.) ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 113 15/09/2019
Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1
2 3
6 7
FF FF

ABRIR FICHEROS

READ MAESTRO
MOVTOS.

Pág: 114 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1
2 3
6 7
FF FF

DISPLAY ERROR
MAESTRO =
MOTOS LEER MOVTOS

Pág: 115 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1 1
2 3
6 7
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

Pág: 116 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1 1 1
2 3
6 7
FF FF

ESCRIBIR MAESTRO
MAESTRO > DESDE MOVTOS.
MOVTOS LEER MOVTOS

Pág: 117 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1 1 1
2 3 2
6 7
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

Pág: 118 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1 1 1
2 3 2
6 7 3
FF FF

ESCRIBIR MAESTRO
MAESTRO > DESDE MOVTOS.
MOVTOS LEER MOVTOS

Pág: 119 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1 1 1
2 3 2
6 7 3
FF 6

ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

Pág: 120 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
1 1 1 1
2 3 2
6 7 3
FF FF 6
7

PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)

Pág: 121 15/09/2019


Ejercicio V
 El fichero user.ALUMNOS.MAESTRO contiene los
estudiantes de un curso, su formato es:
 ALM-ID X(5)
 ALM-NOMBRE X(25)
 ALM-APELLIDOS X(30)
 ALM-F-NAC X(8) (AAAAMMDD)
 ALM-HORAS S9(5) COMP-3
 El fichero user.ALUMNOS.BAJAS contiene los
estudiantes que han sido baja en el día, su formato es:
 ALM-ID X(5)
 Se quieren eliminar las bajas del fichero maestro.
 Si se intenta dar de baja un alumno inexistente se
visualizará un mensaje de error y se ignorará el registro

Pág: 122 15/09/2019


Ejercicio V (pseudocódigo)
ABRIR FICHEROS
INICIO-PROGRAMA READ MAESTRO
MOVTOS.
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
PROCESO
(hasta LEER MAESTRO Y
MAESTRO =
FIN-MAESTRO MOVTOS.
MOVTOS
Y FIN
MOVTOS.) ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 123 15/09/2019
Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1
3 3
8 7
FF FF

ABRIR FICHEROS

READ MAESTRO
MOVTOS.

Pág: 124 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1
3 3
8 7
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

Pág: 125 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1 1
3 3
8 7
FF FF

DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS

Pág: 126 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1 1 2
3 3
8 7
FF FF

LEER MAESTRO Y
MAESTRO =
MOVTOS.
MOVTOS

Pág: 127 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1 1 2
3 3
8 7
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

Pág: 128 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1 1 2
3 3 7
8 7
FF FF

DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS

Pág: 129 15/09/2019


Ejercicio IV (pseudocódigo)
Movimientos Maestro N. Maestro Errores
2 1 1 2
3 3 7 8
8 7
FF FF

PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)

Pág: 130 15/09/2019


Ejercicio VI
 El fichero user.ALUMNOS.MAESTRO contiene los
estudiantes de un curso, su formato es:
 ALM-ID X(5)
 ALM-NOMBRE X(25)
 ALM-APELLIDOS X(30)
 ALM-F-NAC X(8) (AAAAMMDD)
 ALM-HORAS S9(5) COMP-3
 El fichero user.ALUMNOS.ASIST contiene las horas de
asistencia de cada alumno, su formato es:
 ALM-ID X(5)
 ALM-HORAS S9(5) COMP-3
 Se quieren sumar las horas a las existentes en el fichero
maestro.
 Si se modificar un alumno inexistente se visualizará un mensaje
de error y se ignorará el registro

Pág: 131 15/09/2019


Ejercicio VI (pseudocódigo)
ABRIR FICHEROS
INICIO-PROGRAMA READ MAESTRO
MOVTOS.
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
PROCESO SUMAR HORAS
(hasta MAESTRO = ESCRIBIR MAESTRO
FIN-MAESTRO MOVTOS LEER MAESTRO Y
Y FIN MOVTOS.
MOVTOS.) ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 132 15/09/2019
Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150
2 50 3 120
4 20 4 170
5 20 4 200
FF FF

ABRIR FICHEROS

READ MAESTRO
MOVTOS.

Pág: 133 15/09/2019


Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150
2 50 3 120
4 20 4 170
5 20 4 200
FF FF

SUMAR HORAS
MAESTRO = ESCRIBIR MAESTRO
MOVTOS LEER MAESTRO Y
MOVTOS.

Pág: 134 15/09/2019


Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180
2 50 3 120
4 20 4 170
5 20 4 200
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO

Pág: 135 15/09/2019


Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180
2 50 3 120 2 50
4 20 4 170
5 20 4 200
FF FF

DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS

Pág: 136 15/09/2019


Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170
5 20 4 200
FF FF

SUMAR HORAS
MAESTRO = ESCRIBIR MAESTRO
MOVTOS LEER MAESTRO Y
MOVTOS.

Pág: 137 15/09/2019


Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170 4 190
5 20 4 200
FF FF

DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS

Pág: 138 15/09/2019


Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50 4/200
4 20 4 170 4 190
5 20 4 200
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO

Pág: 139 15/09/2019


Ejercicio VI (pseudocódigo)
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50 4/200
4 20 4 170 4 190
5 20 4 200 5 20
FF FF

PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)
Pág: 140 15/09/2019
Ejercicio VI (pseudocódigo) V2
ABRIR FICHEROS
INICIO-PROGRAMA READ MAESTRO
MOVTOS.
DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS
PROCESO SUMAR HORAS
(hasta MAESTRO = LEER MOVTOS.
FIN-MAESTRO MOVTOS
Y FIN
MOVTOS.) ESCRIBIR MAESTRO
MAESTRO <
MOTOS LEER MAESTRO

CERRAR FICHEROS
FIN-PROGRAMA
DISPLAY cont.
Pág: 141 15/09/2019
Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150
2 50 3 120
4 20 4 170
5 20 4 200
FF FF

ABRIR FICHEROS

READ MAESTRO
MOVTOS.

Pág: 142 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150
2 50 3 120
4 20 4 170
5 20 4 200
FF FF

SUMAR HORAS
MAESTRO = LEER MOVTOS.
MOVTOS

Pág: 143 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150
2 50 3 120
4 20 4 170
5 20 4 200
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO

Pág: 144 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180
2 50 3 120
4 20 4 170
5 20 4 200
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO

Pág: 145 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180
2 50 3 120 2 50
4 20 4 170
5 20 4 200
FF FF

DISPLAY ERROR
MAESTRO >
MOTOS LEER MOVTOS

Pág: 146 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170
5 20 4 200
FF FF

SUMAR HORAS
MAESTRO = LEER MOVTOS.
MOVTOS

Pág: 147 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170
5 20 4 200
FF FF

SUMAR HORAS
MAESTRO = LEER MOVTOS.
MOVTOS

Pág: 148 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170
5 20 4 200
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO

Pág: 149 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170 4 390
5 20 4 200
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO

Pág: 150 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170 4 390
5 20 4 200 5 20
FF FF

ESCRIBIR MAESTRO
MAESTRO <
MOVTOS LEER MAESTRO

Pág: 151 15/09/2019


Ejercicio VI (pseudocódigo) V2
MAESTRO MOVIMIENTOS N.MAESTRO ERROR
ID HORAS ID HORAS ID HORAS
1 30 1 150 1 180 3/120
2 50 3 120 2 50
4 20 4 170 4 390
5 20 4 200 5 20
FF FF

PROCESO
(hasta
FIN-MAESTRO
Y FIN
MOVTOS.)
Pág: 152 15/09/2019
Ejercicio VII
 El fichero user.ALUMNOS.MAESTRO contiene los estudiantes de
un curso, su formato es:
 ALM-ID X(5)
 ALM-NOMBRE X(25)
 ALM-APELLIDOS X(30)
 ALM-F-NAC X(8) (AAAAMMDD)
 ALM-HORAS S9(5) COMP-3
 El fichero user.ALUMNOS.UPDTE contiene las altas, bajas y
modificación de horas de los alumnos, su formato varía en función
del tipo de movimiento:
 Altas:
 ALM-CODE X (1) (A)
 ALM-ID X(5)
 ALM-NOMBRE X(25)
 ALM-APELLIDOS X(30)
 ALM-F-NAC X(8) (AAAAMMDD)
 Bajas:
 ALM-CODE X (1) (B)
 ALM-ID X(5)
 Modificaciones:
 ALM-CODE X (1) (M)
 ALM-ID X(5)
 ALM-HORAS S9(5) COMP-3
Pág: 153 15/09/2019
Ejercicio VII

 Se quiere actualizar el maestro con los


movimientos:
 Losdos ficheros están clasificados por
número de alumno y código de movimiento
 Realizar el pseudocódigo y el programa

Pág: 154 15/09/2019


Cláusula REDEFINES
 Asigna a dos identificadores el mismo área
de memoria
 Restricciones:
 Los dos identificadores deben estar al mismo nivel
 El objeto “redefinidor” no puede ser más grande
que el redefinido
 El objeto redefinido no puede contener OCCURS

 Debe ir a continuación del nombre del


identificador

01 REGISTRO.
05 ID-ALUMNO PIC 9(5).
05 ID-ALFA REDEFINES ID-ALUMNO PIC X(5).

Pág: 155 15/09/2019


Ejercicio VII (pseudocódigo)
ABRIR FICHEROS Escribir MAESTRO
INICIO-PROGRAMA Desde MOVIMIENTO
READ MAESTRO
LEER MOVTO.
MOVTOS.
ALTA DISPLAY ERROR
LEER MOVTOS
MAESTRO > BAJA
MOTOS
MODIF.
PROCESO LEER MAESTRO
ALTA
(hasta Y MOVTO.
MAESTRO = BAJA
FIN-MAESTRO MOVTOS SUMAR HORAS
Y FIN MODIF. ESCRIBIR MAESTRO
MOVTOS.) LEER MAESTRO Y
ALTA
MAESTRO < MOVTOS.
MOTOS BAJA
MODIF.
CERRAR FICHEROS ESCRIBIR MAESTRO
FIN-PROGRAMA LEER MAESTRO
DISPLAY cont.
Pág: 156 15/09/2019
Fichero de impresora
WRITE registro (nivel 01 FD)
[FROM identificador] identificador
AFTER [ADVANCING] Entero [LINE|LINES]
[END-WRITE] PAGE

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2----+----3—-
LA HIGIENICA S.A. PAG.- Z.ZZ9
GR40A245S INFORME DE PEDIDOS RECIBIDOS FECHA: XX-XX-XXXX XXXXXX
ALMACEN: XX ============================

FECHA FECHA NUMERO


PEDIDO PROVEEDOR ENVIO ARTICULOS FORMA ENVIO PORTES ADUANA MATERIAL TOTAL
---------- ------------------------------ ---------- --------- ----------- ---------- ---------- ---------- ----------
XX-XX-XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX-XX-XXXX ZZ.ZZ9 XXXXXXXXXXX ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99
XX-XX-XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX-XX-XXXX ZZ.ZZ9 XXXXXXXXXXX ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99
XX-XX-XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX-XX-XXXX ZZ.ZZ9 XXXXXXXXXXX ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99

TOTAL ALMACEN XX ZZZZ.ZZ9,99 ZZZZ.ZZ9,99 ZZZZ.ZZ9,99 ZZZZ.ZZ9,99


*** FIN DE INFORME ***

Pág: 157 15/09/2019


Ejercicio VIII
 El fichero user.EMPLEADO.MASTER contiene los
empleados de una empresa, su formato es:
 EMP-ID X(5)
 EMP-DEP-ID X(2)
 EMP-NOMBRE X(15)
 EMP-APELLIDOS X(25)
 EMP-F-NAC X(8) (AAAAMMDD)
 EMP-SS S9(5)V99
 EMP-IRPF S9(3)V99 (porcentaje)
 EMP-SALARIO S9(5)V99
 Se quiere obtener el siguiente informe:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2----+----3—-
LA EQUITATIVA S.A. PAG.- Z.ZZ9
EJERCICIO7 FECHA: XX-XX-XXXX
GASTOS DE PERSONAL POR DEPARTAMENTO HORA: XX:XX:XX
DEPARTAMENTO: XX ===================================

NUMERO FECHA SEGURIDAD IMPORTE SALARIO


EMPLEADO A P E L L I D O S N O M B R E NACIMIENTO SOCIAL I.R.P.F SALARIO NETO
-------- ------------------------------ ------------------------- ---------- --------- --------- --------- ---------
XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXX XX-XX-XXXX ZZ.ZZ9,99 ZZ.ZZ9,99 ZZ.ZZ9,99 ZZ.ZZ9,99
XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXX XX-XX-XXXX ZZ.ZZ9,99 ZZ.ZZ9,99 ZZ.ZZ9,99 ZZ.ZZ9,99

TOTAL DEPARTAMENTO XX ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99 ZZZ.ZZ9,99


*** FIN DE INFORME ***

Pág: 158 15/09/2019


Impresión
01 CONTADORES.
05 N-LINEAS PIC S9(3) COMP-3 VALUE +62.
05 CLIN PIC S9(3) COMP-3 VALUE +63.
50100-IMPRIMIR-LINEA.
IF CLIN > N-LINEAS
PERFORM 50200-CABECERAS THRU
50200-CABECERAS-EXIT
END-IF
WRITE INFORME FROM LINEA-DETALLE AFTER 1
ADD 1 TO CLIN REG-ESCRITOS.
50100-IMPRIMIR-LINEA-EXIT.
EXIT
50200-CABECERAS.
WRITE INFORME FROM CAB-1 AFTER PAGE
...
MOVE n TO CLIN.
50200-CABECERAS-EXIT.
EXIT
Pág: 159 15/09/2019
Roturas de control
INICIO

PERFORM 20100-LEER-FICHERO THRU


20100-LEER-FICHERO-EXIT
MOVE EMP-DEP-ID TO EMP-DEP-ID-ANT
PERFORM UNTIL FIN-FICHERO
PERFORM UNTIL EMP-DEP-ID NOT = EMP-DEP-ID-ANT OR
FIN-FICHERO
PERFORM 20200-LINEA-DETALLE THRU
20200-LINEA-DETALLE-EXIT
PERFORM 20300-ACUMULAR THRU
PROCESO

20300-ACUMULAR-EXIT
PERFORM 20100-LEER-FICHERO THRU
20100-LEER-FICHERO-EXIT
END-PERFORM
PERFORM 20300-TOTAL-DPTO THRU
20300-TOTAL-DPTO-EXIT
MOVE EMP-DEP-ID TO EMP-DEP-ID-ANT
END-PERFORM

Pág: 160 15/09/2019


Tablas
 Entrada (P390.IRPF):
 Fichero IRPF de cada español
 NIF X(12)
 Sexo 9(1) (1=Hombre, 2=Mujer)
 Provincia 9(2)
 IRPF S9(7)V99
 Salida:
 Importe del IRPF por Provincia
 Soluciones:
 Clasificarel fichero por Provincia y programa
con ruptura de control por provincia
 Definir 52 variables (una por provincia)
 Tablas

Pág: 161 15/09/2019


Tablas
 Tabla:
 Ubicaciones contiguas de memoria, con el
mismo formato y que se identifican por su
nombre y el lugar que ocupan
01 TABLA-IRPF.
05 T-IRPF PIC S9(9)V99 COMP-3 OCCURS 52.

ADD IRPF TO T-IRPF(PROVINCIA).

INICIO-PROGRAMA.
PERFORM VARYING INDICE FROM 1 BY 1
UNTIL INDICE > 52
MOVE 0 TO T-IRPF(INDICE)
END-PERFORM

Pág: 162 15/09/2019


Tablas
01 NOMBRE-PROVINCIA.
05 FILLER PIC X(15) VALUE ‘ALAVA’.
...
05 FILLER PIC X(15) VALUE ‘ZARAGOZA’.

01 FILLER REDEFINES NOMBRE-PROVINCIA.


05 N-PROVINCIA PIC X(15) OCCURS 52.

01 INDICE PIC 9(4) COMP.

PERFORM VARYING INDICE FROM 1 BY 1


UNTIL INDICE > 52
DISPLAY ‘IRPF DE ‘ N-PROVINCIA(INDICE) ‘ ES: ‘
T-IRPF(INDICE)
END-PERFORM

Pág: 163 15/09/2019


Ejercicio VIII

 Realizar el programa propuesto

Pág: 164 15/09/2019


Tablas
 Modificar el programa anterior para incluir, el número
de personas que han pagado IRPF en cada provincia.
01 TABLA-PERSONAS.
05 T-PERSONAS PIC S9(7) COMP-3 OCCURS 52.
ADD 1 TO T-PERSONAS(PROVINCIA).

01 TABLA-IRPF.
05 T-IRPF PIC S9(9)V99 COMP-3 OCCURS 52.
05 T-PERSONAS PIC S9(7) COMP-3 OCCURS 52.
ADD IRPF TO T-IRPF(PROVINCIA).
ADD 1 TO T-PERSONAS(PROVINCIA).

01 TOTAL-IRPF.
03 TABLA-IRPF OCCURS 52.
05 T-IRPF PIC S9(9)V99 COMP-3.
05 T-PERSONAS PIC S9(7) COMP-3.
ADD IRPF TO T-IRPF(PROVINCIA).
ADD 1 TO T-PERSONAS(PROVINCIA).
Pág: 165 15/09/2019
Tablas

 Modificar el programa anterior para desglosar los


importes y número de personas por sexo.

01 TABLA.
03 TABLA-IRPF OCCURS 52.
05 TABLA-SEXO OCCURS 2.
10 T-IRPF PIC S9(9)V99 COMP-3.
10 T-PERSONAS PIC S9(7) COMP-3.

ADD IRPF TO T-IRPF(PROVINCIA, SEXO).


ADD 1 TO T-PERSONAS(PROVINCIA, SEXO).

Pág: 166 15/09/2019


Tablas
Imprescindible para
OCCURS menor-tamaño [TO mayor-tamaño] [TIMES] SEARCH ALL
[DEPENDING [ON] identificador]
ASCENDING
[KEY] [IS] identificador ... ]
DESCENDIG
[INDEXED [BY] índice ...]
Imprescindible para
SEARCH y
SEARCH ALL
TO
SET índice ... UP BY identificador
DOWN BY Entero

Pág: 167 15/09/2019


SEARCH
identificador
SEARCH nombre-tabla VARYING
índice

[AT END sentencias]


Sentencias
WHEN condición
NEXT SENTENCE

END-SEARCH

Se debe inicializar el índice (INDEXED BY) con el valor a


partir del cual se quiere comenzar a buscar (normalmente 1)

Pág: 168 15/09/2019


Ejercicio IX
 A través de una ficha SYSIN se aceptará
una letra
 Visualizar dicha letra y la posición que
ocupa en el alfabeto

Pág: 169 15/09/2019


Ejercicio X
 Entrada:
 Fichero IRPF de cada español
 NIF
 Sexo (1=Hombre, 2=Mujer)
 Provincia (nombre)
 IRPF
 Salida:
 Importe del IRPF por Provincia
 Consideraciones:
 Prever una tabla de 200 ocurrencias para las
provincias
 Si el nombre no es exactamente igual (A Coruña,
La Coruña) considerarlo como dos provincias
distintas
Pág: 170 15/09/2019
SEARCH ALL
SEARCH ALL nombre-tabla

[AT END sentencias]


Sentencias
WHEN condición AND
NEXT SENTENCE
Sentencias
condición
NEXT SENTENCE
END-SEARCH

condición debe referirse a los elementos especificados en


ASCENDIG/DESCENDING KEY a través de una igualdad

Pág: 171 15/09/2019


Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE
END-EVALUATE
END-PERFORM
Pág: 172 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 1
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE
END-EVALUATE
END-PERFORM
Pág: 173 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 1
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 13
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE M
END-EVALUATE
END-PERFORM
Pág: 174 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 13
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE M
END-EVALUATE
END-PERFORM
Pág: 175 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
26
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 20
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE T
END-EVALUATE
END-PERFORM
Pág: 176 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
19
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 20
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE T
END-EVALUATE
END-PERFORM
Pág: 177 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
19
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 16
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE P
END-EVALUATE
END-PERFORM
Pág: 178 15/09/2019
Búsquedas binarias
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 32 24 25 26

MOVE 1 TO Lower
Lower
MOVE 26 TO Upper
PERFORM UNTIL ItemFound OR ItemNotInTable 14
COMPUTE Middle = (Lower + Upper) / 2
EVALUATE TRUE Upper
WHEN Key(Middle) < ‘P’
COMPUTE Lower = Middle + 1
19
WHEN Key(Middle) > ‘P’ Middle
COMPUTE Upper = Middle –1
WHEN Key(Middle) = ‘P’ 16
SET ItemFound TO TRUE Key(Middle)
WHEN Lower > Upper THEN
SET ItemNotInTable TO TRUE P
END-EVALUATE
END-PERFORM
Pág: 179 15/09/2019
Ejercicio XI
 Entrada:
 Fichero IRPF de cada español
 NIF
 Sexo (1=Hombre, 2=Mujer)
 Comunidad Autónoma (nombre)
 IRPF
 Salida:
 Importe del IRPF por Comunidad Autónoma
 Consideraciones:
 No es posible que haya errores en el nombre
de la Comunidad Autónoma

Pág: 180 15/09/2019


CALL

[BY] REFERENCE
identificador
CALL USING [BY] CONTENT identificador ... ...
literal
[BY] VALUE
EXCEPTION
ON OVERFLOW sentencias

NOT ON EXCEPTION sentencias

[END-CALL]

Pág: 181 15/09/2019


CALL
PROGRAMA PRINCIPAL
PROCEDURE DIVISION.
...
CALL ‘SUBPROG’ USING PARM1, PARM2, PARM3

SUBPROGRAMA
LINKAGE SECTION.
01 DATA3.

01 DATA2.

01 DATA1.

PROCEDURE DIVISION USING DATA3, DATA2, DATA1
...
Pág: 182 15/09/2019
CALL
SUBPROGRAMA
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBPROG IS INITIAL.

PROGRAMA PRINCIPAL
PROCEDURE DIVISION.
...
CALL ‘SUBPROG’ USING PARM1, PARM2, PARM3
CANCEL ‘SUBPROG’
CALL ‘SUBPROG’ USING PARM1, PARM2, PARM3

Pág: 183 15/09/2019


Ejercicio XII
 Realizar un subprograma que valide una fecha,
pasada como parámetro, en formato
AAAAMMDD.
 En cualquier caso se devolverá un campo con los
siguientes valores:
 0 – Fecha correcta
 1 – Día erróneo
 2 – Mes erróneo
 3 – Año erróneo
 4 – Día o mes erróneo
 Realizar un programa que llame al subprograma
y hacer la prueba correspondiente

Pág: 184 15/09/2019


Ejercicio XIII
 Realizar un subprograma que convierta una fecha,
pasada como parámetro, en formato AAAAMMDD a
formato juliano (AAAADDD) y viceversa.
 En cualquier caso se devolverá un campo con los
siguientes valores (llamar a subprog. Ejercicio XII):
 0 – Fecha correcta
 1 – Día erróneo
 2 – Mes erróneo
 3 – Día o mes erróneo
 Realizar un programa que llame al subprograma y
hacer la prueba correspondiente

Pág: 185 15/09/2019


Ejercicio XIV
 Realizar un subprograma que elimine los
blancos por la izquierda y los espacios entre
palabras (dejando uno) de un campo de 250
posiciones
 Realizar un programa que llame al
subprograma y hacer la prueba correspondiente

Pág: 186 15/09/2019


COPY
 Equivale a INCLUDE en otros lenguajes
 Se utiliza fundamentalmente para tres
funciones:
 Descripción de ficheros
 Definición de tablas
 Definición de áreas de comunicación

IN
COPY literal librería [REPLACING ==texto== BY ==texto== ...]
OF

Pág: 187 15/09/2019


INSPECT (formato1)
INSPECT (1) TALLYING (2)

BEFORE
CHARACTERS INITIAL (3) ...
AFTER
FOR ...
ALL BEFORE
(3) INITIAL (3) ... ...
LEADING AFTER

(1).- Campo alfanumérico


(2).- Campo numérico
(3).- Campo alfanumérico o literal

Pág: 188 15/09/2019


INSPECT (formato1)
NOMBRE
J AVI E R GARCI A S UARE Z
NCHARS: 5

INSPECT NOMBRE TALLYING NCHARS FOR LEADING SPACES

NOMBRE
J AVI E R ( GARCI A) S UARE Z
NCHARS: 2
INSPECT NOMBRE TALLYING NCHARS FOR
ALL ‘A’ AFTER INTIAL ‘(‘
BEFORE INITIAL ‘)’

Pág: 189 15/09/2019


INSPECT (formato2)
INSPECT (1) REPLACING

BEFORE
CHARACTERS BY (3) INITIAL (3) ...
AFTER
...
ALL
LEADING BEFORE
(3) BY (3) INITIAL (3) ... ...
FIRST AFTER

(1).- Campo alfanumérico


(2).- Campo numérico
(3).- Campo alfanumérico o literal

Pág: 190 15/09/2019


INSPECT (formato2)
NOMBRE
J AVI E R GARCI A S UARE Z
INSPECT NOMBRE REPLACING CHARACTERS BY ‘*’
NOMBRE
* * * * * * * * * * * * * * * * * * * * * * * * *
NOMBRE
J AVI E R ( GARCI A) S UARE Z
INSPECT NOMBRE REPLACING ALL ‘A’ BY ‘*’
AFTER INTIAL ‘(‘
BEFORE INITIAL ‘)’
NOMBRE
J AVI E R ( G* RCI * ) S UARE Z

Pág: 191 15/09/2019


INSPECT (formato3)
INSPECT (1) TALLYING (2)

BEFORE
CHARACTERS INITIAL (3) ...
AFTER
FOR ...
ALL BEFORE
(3) INITIAL (3) ... ...
LEADING AFTER

BEFORE
CHARACTERS BY (3) INITIAL (3) ...
AFTER
REPLACING ...
ALL
LEADING BEFORE
(3) BY (3) INITIAL (3) ... ...
FIRST AFTER

(1).- Campo alfanumérico


(2).- Campo numérico
(3).- Campo alfanumérico o literal
Pág: 192 15/09/2019
INSPECT (formato4)
INSPECT (1) CONVERTING (2) TO (3)

BEFORE
INITIAL (3) ...
AFTER

(1).- Campo alfanumérico o numérico display


(2).- Campo numérico
(3).- Campo alfanumérico o literal

Pág: 193 15/09/2019


INSPECT (formato2)
NOMBRE
J AVI E R GARCI A S UARE Z
INSPECT NOMBRE CONVERTING ‘AI’ BY ‘XY’
NOMBRE
J XVYE R GXRCYX S UXRE Z
NOMBRE
J AVI E R ( GARCI A) S UARE Z
INSPECT NOMBRE CONVERTING ‘AI’ BY ‘XY’
AFTER INTIAL ‘(‘
BEFORE INITIAL ‘)’
NOMBRE
J AVI E R ( GXRCYX) S UARE Z

Pág: 194 15/09/2019


STRING
identificador
STRING identificador ... DELIMITED [BY] Literal ...
SIZE
INTO identificador
[WITH POINTER identificador]
[ON OVERFLOW sentencias]
[NOT ON OVERFLOW sentencias]
[END-STRING]

Pág: 195 15/09/2019


STRING (Ejemplo 1)
01 DIA PIC XX. 5
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 - - - - - - - - - - - - - -
STRING DIA DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
MES DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
ANO DELIMITED BY SPACES
INTO FECHA
END-STRING.

Pág: 196 15/09/2019


STRING (Ejemplo 1)
01 DIA PIC XX. 5
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 , - - - - - - - - - - - -
STRING DIA DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
MES DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
ANO DELIMITED BY SPACES
INTO FECHA
END-STRING.

Pág: 197 15/09/2019


STRING (Ejemplo 1)
01 DIA PIC XX. 5
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 , J UNI O- - - - - - -
STRING DIA DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
MES DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
ANO DELIMITED BY SPACES
INTO FECHA
END-STRING.

Pág: 198 15/09/2019


STRING (Ejemplo 1)
01 DIA PIC XX. 5
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 , J UNI O, - - - - -
STRING DIA DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
MES DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
ANO DELIMITED BY SPACES
INTO FECHA
END-STRING.

Pág: 199 15/09/2019


STRING (Ejemplo 1)
01 DIA PIC XX. 5
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 , J UNI O, 2 0 0 2 -
STRING DIA DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
MES DELIMITED BY SPACES
‘, ’ DELIMITED BY SIZE
ANO DELIMITED BY SPACES
INTO FECHA
END-STRING.

Pág: 200 15/09/2019


STRING (Ejemplo 2)
01 DIA PIC XX. 5 01 PUNTERO PIC 99. 0 1
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
- - - - - - - - - - - - - - -
MOVE 1 TO PUNTERO.
STRING DIA DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING MES DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING YEAR DELIMITED BY SPACES
INTO FECHA WHIT POINTER PUNTERO END-STRING.

Pág: 201 15/09/2019


STRING (Ejemplo 2)
01 DIA PIC XX. 5 01 PUNTERO PIC 99. 0 3
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 , - - - - - - - - - - - - -
MOVE 1 TO PUNTERO.
STRING DIA DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING MES DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING YEAR DELIMITED BY SPACES
INTO FECHA WHIT POINTER PUNTERO END-STRING.

Pág: 202 15/09/2019


STRING (Ejemplo 2)
01 DIA PIC XX. 5 01 PUNTERO PIC 99. 0 9
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 , J UNI O, - - - - - - -
MOVE 1 TO PUNTERO.
STRING DIA DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING MES DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING YEAR DELIMITED BY SPACES
INTO FECHA WHIT POINTER PUNTERO END-STRING.

Pág: 203 15/09/2019


STRING (Ejemplo 2)
01 DIA PIC XX. 5 01 PUNTERO PIC 99. 1 3
01 MES PIC X(9). J UNI O
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
5 , J UNI O, 2 0 0 2 - - -
MOVE 1 TO PUNTERO.
STRING DIA DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING MES DELIMITED BY SPACES
‘,’ DELIMITED BY SIZE
INTO FECHA WHIT POINTER PUNTERO END-STRING.
STRING YEAR DELIMITED BY SPACES
INTO FECHA WHIT POINTER PUNTERO END-STRING.

Pág: 204 15/09/2019


UNSTRING
UNSTRING identificador [DELIMITED [BY] [ALL] identificador
[OR [ALL] identificador] ...]
INTO { identificador [DELIMITER [IN] identificador]
[COUNT [IN] identificador]}
[WITH POINTER identificador]
[TALLYING [IN] identificador ]
[ON OVERFLOW sentencias]
[NOT ON OVERFLOW sentencias]
[END-UNSTRING]

Pág: 205 15/09/2019


UNSTRING (Ejemplo 1)
01 DIA PIC XX.

01 MES PIC X(2).

01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


1 9 - 0 8 - 2 0 0 2

MOVE ’19-08-2002’ TO FECHA.


UNSTRING FECHA INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 206 15/09/2019


UNSTRING (Ejemplo 1)
01 DIA PIC XX. 1 9
01 MES PIC X(2).

01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


1 9 - 0 8 - 2 0 0 2

MOVE ’19-08-2002’ TO FECHA.


UNSTRING FECHA INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 207 15/09/2019


UNSTRING (Ejemplo 1)
01 DIA PIC XX. 1 9
01 MES PIC X(2). - 0
01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


1 9 - 0 8 - 2 0 0 2

MOVE ’19-08-2002’ TO FECHA.


UNSTRING FECHA INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 208 15/09/2019


UNSTRING (Ejemplo 1)
01 DIA PIC XX. 1 9
01 MES PIC X(2). - 0
01 ANO PIC X(4). 8 - 2 0
01 FECHA PIC X(15) VALUE ALL ‘-’.
1 9 - 0 8 - 2 0 0 2

MOVE ’19-08-2002’ TO FECHA.


UNSTRING FECHA INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 209 15/09/2019


UNSTRING (Ejemplo 1)
01 DIA PIC XX. 1 9 QUEDAN
CARACTERES
01 MES PIC X(2). - 0
01 ANO PIC X(4). 8 - 2 0
01 FECHA PIC X(15) VALUE ALL ‘-’.
1 9 - 0 8 - 2 0 0 2

MOVE ’19-08-2002’ TO FECHA.


UNSTRING FECHA INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 210 15/09/2019


UNSTRING (Ejemplo 2)
01 DIA PIC XX.

01 MES PIC X(2).

01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


2 5 - 0 9 - 2 0 0 2 XXXXX

MOVE ’25-09-2002XXXXX’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 211 15/09/2019


UNSTRING (Ejemplo 2)
01 DIA PIC XX. 2 5
01 MES PIC X(2).

01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


2 5 - 0 9 - 2 0 0 2 XXXXX

MOVE ’25-09-2002XXXXX’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 212 15/09/2019


UNSTRING (Ejemplo 2)
01 DIA PIC XX. 2 5
01 MES PIC X(2). 0 9
01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


2 5 - 0 9 - 2 0 0 2 XXXXX

MOVE ’25-09-2002XXXXX’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 213 15/09/2019


UNSTRING (Ejemplo 2)
01 DIA PIC XX. 2 5
01 MES PIC X(2). 0 9
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
2 5 - 0 9 - 2 0 0 2 XXXXX

MOVE ’25-09-2002XXXXX’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ INTO DIA, MES, ANO
ON OVERFLOW DISPLAY ‘QUEDAN CARACTERES’
END-UNSTRING.

Pág: 214 15/09/2019


UNSTRING (Ejemplo 3)
01 DIA PIC XX.

01 MES PIC X(2).

01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


1 2 - 1 0 / 2 0 0 2

MOVE ’12-10/2002’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ OR ‘/’
INTO DIA DELIMITER IN SEP1,
MES DELIMITER IN SEP2,
ANO
END-UNSTRING.
DISPLAY SEP1, ‘ ‘, SEP2

Pág: 215 15/09/2019


UNSTRING (Ejemplo 3)
01 DIA PIC XX. 1 2
01 MES PIC X(2).

01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


1 2 - 1 0 / 2 0 0 2

MOVE ’12-10/2002’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ OR ‘/’
INTO DIA DELIMITER IN SEP1,
MES DELIMITER IN SEP2,
ANO
END-UNSTRING.
DISPLAY SEP1, ‘ ‘, SEP2

Pág: 216 15/09/2019


UNSTRING (Ejemplo 3)
01 DIA PIC XX. 1 2
01 MES PIC X(2). 1 0
01 ANO PIC X(4).

01 FECHA PIC X(15) VALUE ALL ‘-’.


1 2 - 1 0 / 2 0 0 2

MOVE ’12-10/2002’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ OR ‘/’
INTO DIA DELIMITER IN SEP1,
MES DELIMITER IN SEP2,
ANO
END-UNSTRING.
DISPLAY SEP1, ‘ ‘, SEP2

Pág: 217 15/09/2019


UNSTRING (Ejemplo 3)
01 DIA PIC XX. 1 2
01 MES PIC X(2). 1 0
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
1 2 - 1 0 / 2 0 0 2

MOVE ’12-10/2002’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ OR ‘/’
INTO DIA DELIMITER IN SEP1,
MES DELIMITER IN SEP2,
ANO
END-UNSTRING.
DISPLAY SEP1, ‘ ‘, SEP2

Pág: 218 15/09/2019


UNSTRING (Ejemplo 3)
01 DIA PIC XX. 1 2
- /
01 MES PIC X(2). 1 0
01 ANO PIC X(4). 2 0 0 2
01 FECHA PIC X(15) VALUE ALL ‘-’.
1 2 - 1 0 / 2 0 0 2

MOVE ’12-10/2002’ TO FECHA.


UNSTRING FECHA DELIMITED BY ‘-’ OR ‘/’
INTO DIA DELIMITER IN SEP1,
MES DELIMITER IN SEP2,
ANO
END-UNSTRING.
DISPLAY SEP1, ‘ ‘, SEP2

Pág: 219 15/09/2019


Reference modification
identificador (pos:length)

01 CAMPOS.
05 FECHA-DMA PIC X(10) VALUE ’01-05-2001’.
05 FECHA-AMD PIC X(8).

MOVE FECHA-DMA(7:) TO FECHA-AMD(1:4)


MOVE FECHA-DMA(4:2) TO FECHA-AMD(5:2)
MOVE FECHA-DMA(1:2) TO FECHA-AMD(7:2)

Pág: 220 15/09/2019


Funciones intrínsecas
FUNCTION nombre-función(argumentos, ...)

 Tipos:
 Funciones de “string”
 Funciones de fecha
 Funciones varias

Pág: 221 15/09/2019


Funciones de “string”
CHAR(194) X A
ORD(‘A’) I 194
ORD-MAX(‘A’,’B’,’C’) I 3
ORD-MIN(‘A’,’B’,’C’) I 1
LENGTH(‘ABCDE’) I 5
REVERSE(‘ABCDE’) I ‘EDCBA’
LOWER-CASE(‘ABCDE’) X ‘abcde’
UPPER-CASE(‘abcde’) X ‘ABCDE’

Pág: 222 15/09/2019


X=+
X=-
Funciones de fecha X=0

CURRENT-DATE X AAAAMMDDHHMMSSXHHMM
DATE-OF-INTEGER(Int) I AAAAMMDD
DAY-OF-INTEGER(Int) I AAAADDD
INTEGER-OF-DATE(16010101) I 1
INTEGER-OF-DAY(16010101) I 1

Días
transcurridos
desde 31-12-1600
Pág: 223 15/09/2019
Funciones varias
INTEGER(-1,5) I -2
INTEGER-PART(-1,5) I -1
MAX(‘A’,’B’,’C’) I ‘C’
MIN(‘A’,’B’,’C’) I ‘A’
MOD(3,5) I 2
RANDOM(1) - RAMDOM I 0:1
RANGE( 3,4,5 ) N 2
REM(3,5) N 2
SQRT(49) N 7
SUM(1,2,3) N 6

Pág: 224 15/09/2019


Definición de un fichero indexado
SELECT fichero ASSIGN TO ddname
[ORGANIZATION IS] INDEXED
SEQUENTIAL
ACCESS MODE [IS] RANDOM
DYNAMIC

[RECORD KEY IS clave]


[ALTERNATE RECORD KEY IS clave-alt
[WITH DUPLICATES]]
[FILE SATUS [IS] file-status]

Pág: 225 15/09/2019


Lectura de un fichero indexado
Secuencial:
READ Nombre-FD-SELECT [NEXT] [RECORD]
[INTO identificador]
[[AT] END sentencias]
[NOT [AT] END sentencias]
[END-READ]

Por clave:
READ Nombre-FD-SELECT [RECORD]
[INTO identificador]
[KEY [IS] identificador]
[INVALID KEY sentencias]
[NOT INVALID KEY sentencias]
[END-READ]

Pág: 226 15/09/2019


Escritura de un fichero indexado
Añadir:
WRITE registro (nivel 01 FD)
[FROM identificador]
[INVALID KEY sentencias]
[NOT INVALID KEY sentencias]
[END-WRITE]

Modificar:
REWRITE registro (nivel 01 FD)
[FROM identificador]
[INVALID KEY sentencias]
[NOT INVALID KEY sentencias]
[END-WRITE]

Pág: 227 15/09/2019


Borrado en un fichero indexado

DELETE Nombre-FD-SELECT [RECORD]


[INVALID KEY sentencias]
[NOT INVALID KEY sentencias]
[END-DELETE]

Pág: 228 15/09/2019


Posicionamiento en fichero indexado
START Nombre-FD-SELECT
= | EQUAL [TO]
KEY [IS] > | GREATER [THAN] identificador
NOT < | NOT LESS [THAN]
[INVALID KEY sentencias]
[NOT INVALID KEY sentencias]
[END-START]

Pág: 229 15/09/2019


Definición de un fichero relativo
SELECT fichero ASSIGN TO ddname
[ORGANIZATION IS] RELATIVE
SEQUENTIAL
ACCESS MODE [IS] RAMDOM
DYNAMIC

[RECORD KEY IS clave]


[FILE SATUS [IS] file-status]

Pág: 230 15/09/2019


SORT
ASCENDING
SORT fichero { [ON] [KEY]{identificador ...}...}
DESCENDING

USING fichero
INPUT PROCEDURE [IS] párrafo [THRU párrafo]

GIVING fichero
OUTPUT PROCEDURE [IS] párrafo [THRU párrafo]

Pág: 231 15/09/2019

También podría gustarte