Documente Academic
Documente Profesional
Documente Cultură
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 1 de 56
Maual de COBOL II
Proyecto ALTAIR
INDICE
al final del documento ejemplo inspect para poner ceros por la izquierdo y pasar un campo a
numrico
ANOTACIONES SOBRE ASPECTOS RELEVANTES DEL COBOL II.
Cambios en el lenguaje cobol en 1.985
Formatos de programa fuente
PROGRAMA ANIDADO.
Programa anidado
CAMBIOS EN LA IDENTIFICATION DIVISION.
Cambios en la Identification Division
CAMBIOS EN LA DATA DIVISION.
Comparticion de datos
Nuevas clausulas en la definicion de items
Niveles de tablas
CAMBIOS EN LA PROCEDURE DIVISION.
Otras condiciones
Terminadores explicitos de sentencias
Llamada a subprogramas
LLamadas estaticas
LLamadas dinamicas
Sentencia cancel
Sentencia evaluate
Consideraciones sobre la evaluate
Ejemplos de evaluate
Sentencia initialize
Nueva opciones de la perform
Aspectos adicionales 0
Depuracion con cobol II
Interactivamente
Batch
Compilacion
Compilaciones con programas secundarios
Llamada entre programas cobol II
Transfiriendo control a otros programas
Programa principal y subprogramas
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 2 de 56
Maual de COBOL II
LLAMANDO PROGRAMAS.
Llamando programas
Programas anidados
Estructura de programas anidados
Ejemplo
Normas para el uso de estructura de programas anidados
Llamando a programas anidados
Ejemplo
CALL ESTATICAS Y DINAMICAS.
Call estaticas y dinamicas
Utilizando call estatica
Utilizando call dinamica
Compartiendo datos usando el atributo external
Pasando datos mediante by refence or by content
Describiendo items comunes en el programa llamante
Describiendo datos comunes en el programa llamado
Linkage section
INSTRUCCIONES DE PROGRAMAS COBOL.
Instruccion inspect
Instruccion initialize
INSTRUCCIONES DE TABLAS.
Instruccion
Instruccion
Instruccion
Instruccion
evaluate
string
unstring
read
Proyecto ALTAIR
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 4 de 56
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 5 de 56
|
|
|
Maual de COBOL II
Proyecto ALTAIR
COMPARTICION DE DATOS
----------------------* Los datos contenidos en un "EXTERNAL" pueden ser
referenciados por cualquier programa que los tenga
descritos.
* Si un programa esta contenido dentro de otro, ambos
pueden referenciar los datos que tengan el atributo
"GLOBAL".
1) NUEVAS CLAUSULAS EN LA DEFINICION DE ITEMS.
--> GLOBAL B
El dato esta disponible para todo programa contenido
dentro del que lo declara.
atributo de nivel 01.
--> EXTERNAL B
La memoria asociada con el ITEM de datos, esta asociada con la unidad de ejecucion mas que con el programa en particular dentro de la unidad de ejecucion.
Este ITEM puede ser referenciado por cualquier programa
dentro de la unidad de ejecucion.
No implica que es global y es un atributo de nivel 01.
--> POINTER B
esta clausula define un ITEM de datos "PUNTERO" de nivel elemental, no numerico y de 4 bytes.
puede usarse en operaciones de comparacion o en "MOVE"
a otros ITEMS "PUNTEROS".
Tambien en :
- sentencia SET.
- En una condicion de relacion.
- En la "USING" de una "CALL", "ENTRY" o cabecera
de "PROCEDURE DIVISION".
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 6 de 56
Maual de COBOL II
Proyecto ALTAIR
2) NIVELES DE TABLAS.
* pueden tener hasta siete niveles, dimensiones.
* por tanto podra haber hasta siete anidamientos de
clausulas OCCURS.
* Un ITEM podra referenciarse subscrito o indexado por 7.
* en las tablas de longitud variable (DEPENDING ON) el
minimo numero de ocurrencias podra ser cero.
IS
[ NOT ]
|
|
|
|
|
2) OTRAS CONDICIONES.
en operaciones aritmeticas
: NOT ON SIZE ERROR
en operaciones de mover datos : NOT ON OVERFLOW
en operaciones de entrada/salida : NOT INVALID KEY
NOT AT END
NOT AT END-OF-PAGE
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 7 de 56
Maual de COBOL II
Proyecto ALTAIR
END-CALL
END-EVALUATE
END-READ
END-START
END-WRITE
END-COMPUTE
END-IF
END-RETURN
END-STRING
END-WRITE
END-DELETE
END-MULTIPLY
END-REWRITE
END-SUBTRACT
|
|
|
4) LLAMADA A SUBPROGRAMAS
| CALL [ IDENTIFICADOR-1 / LITERAL ]
|
|
USING BY REFERENCE IDENTIF-2 .................
|
| *
USING BY REFERENCE ADDRESS OF NOMBRE-REG .....
|
|
USING BY CONTENT IDENTIF-3 ....... / LITERAL /
|
|
LENGTH OF IDENTIF-3
BY REFERENCE:
el valor del parametro pasado se evalua en el momento de la CALL y es asignado al correspondiente del
programa llamado el cual puede procesarlo.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 8 de 56
|
|
|
|
|
|
|
|
|
Maual de COBOL II
Proyecto ALTAIR
BY CONTENT:
en este caso el programa llamado no puede modificar
el valor pasado.
---> en tiempo de compilacion se puede espacificar la opcion DYNAM (llamadas dinamicas)
o NODYNAM (llamadas estaticas)
LLAMADAS ESTATICAS
------------------el programa principal y el subprograma forman parte
del mismo modulo, por tanto cuando el control se pasa
al programa llamado este ya esta en memoria, por lo
que las siguientes llamadas al subprograma lo encontraran en el ultimo estado. (excepto cuando el programa
llamado tiene el atributo "INITIAL")
LLAMADAS DINAMICAS
------------------el programa llamado es un modulo independiente y solo
se carga en memoria cuando es llamado. Las llamadas
sucesivas lo encontraran en el ultimo estado.
SENTENCIA CANCEL
=================
|CANCEL IDENTIFI-1 / LITERAL |
se cancela un programa llamado, de tal forma que la
proxima llamada lo pondra en su estado inicial.
*** los subprogramas han de terminar con GOBACK o EXIT
PROGRAM
*** los efectos siempre son jerarquicos, en caso de programas anidados
*** todo ello fortalece la recursividad en el COBOL
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 9 de 56
Maual de COBOL II
Proyecto ALTAIR
SENTENCIA EVALUATE
|EVALUATE IDENTIFIC-1
|
|
LITERAL
|
|
EXPRESION
|
|
TRUE
|
|
FALSE
ALSO ...... (VARIOS)
|
|
LAS MISMAS EXPRESIONES
|
|WHEN
FRASE-1
|
|
ALSO FRASE-2 .....(VARIAS)
|
|
SENTENCIA IMPERATIVA
|
|
|[ WHEN OTHER SENTENCIA IMPERATIVA ]
--> FRASE-1 puede ser :
ANY
CONDICION-1
TRUE
FALSE
NOT IDENTIFI-1
LITERAL
EXPR.ARIT. THRU (las mismas )
--> FRASE-2 puede ser :
ANY
CONDICION-2
TRUE
FALSE
NOT (igual anterior) THRU (igual)
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 10 de 56
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maual de COBOL II
Proyecto ALTAIR
EJEMPLOS DE EVALUATE
---------------------EVALUATE CAMPO1
WHEN 'D'
MOVE 'CONDUCTOR' TO CAMPO1
WHEN 'R'
MOVE 'COCHE' TO CAMPO1
WHEN SPACE
MOVE SPACES TO CAMPO1
END-EVALUATE
---> USANDO IF
IF CAMPO1 = 'D'
MOVE 'CONDUCTOR' TO CAMPO1
ELSE
IF CAMPO1 = 'R'
MOVE 'COCHE' TO CAMPO1
ELSE
IF CAMPO1 = SPACE
MOVE SPACES TO CAMPO1
END-IF
END-IF
END-IF
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 11 de 56
Maual de COBOL II
Proyecto ALTAIR
SENTENCIA INITIALIZE
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 12 de 56
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maual de COBOL II
Proyecto ALTAIR
CON
|
|
|
|
|
UNTIL :
PERFORM NOMBRE-PROC1
[ WITH TEST
[ THRU NOMBRE-PROC2 ]
BEFORE /
AFTER ]
UNTIL CONDICION-1
[ DECLARACION-IMPERATIVA
END-PERFORM ]
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 13 de 56
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maual de COBOL II
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Proyecto ALTAIR
INDEX-2
LITERAL
BY IDENT-3
UNTIL CONDICION-1
INDEX-3
AFTER
...
FROM .....
BY ....
UNTIL ...
[ DECLARACION IMPERATIVA
END-PERFORM ]
ASPECTOS ADICIONALES
=====================
1.- el DB2 R3 suministra un nuevo parametro en la opcion HOST del precompilador del DB", "COB2", que sirve para indicar si el fuente esta estrito en VS
COBOL II.
2.- la opcion de compilacion DYNAM, que permite la carga dinamica de programas, al ser llamados por la
sentencia CALL no es aplicable a modulos que usen
comandos CICS.
3.- para poder llevar a cabo la depuracion se debe compilar con la opcion TEST.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 14 de 56
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maual de COBOL II
Proyecto ALTAIR
4.- un programa es reentrante cuando puede ser ejecutado por varios usuarios o tareas al mismo tiempo,
en COBOL II, la opcion es RENT. Si se especifica
esta opcion, tambien es necesario especificar la opcion RESIDENT.
ENTORNO
|COMPILAR|SOPORTE DE |DEPURACION|DEPURACION
|
|MODULOS OB.|BATCH
|INTERACTIVA
------------------------------------------------------------INTERACTIVO TSO |
SI
|
SI
|
SI
|
SI
|
|
|
|
CICS/OS 1.7
|
NO
|
SI
|
SI
|
NO
|
|
|
|
IMS
|
NO
|
SI
|
NO
|
SI(BTS)
|
|
|
|
BATCH MVS
|
SI
|
SI
|
SI
|
SI
|
|
|
|
se puede utilizar:
INTERACTIVAMENTE
---------------* en modo FULL SCREEN.
* en modo de edicion de linea.
al utilizarlo de forma interactiva, el programador puede:
* Controlar y visualizar el flujo del programa.
* Alterar temporalmente la logica del programa.
* Ejecutar y re-ejecutar todo o parte de un programa utilizando diferentes valores de datos.
* Inspeccionar y modificar campos de datos en punto seleccionados del programa.
------> ES PRERREQUISITO DISPONER DEL ISPF VERSION 2.
BATCH
----Las peticiones de depuracion se proporcionan en un fichero, creado previa la ejecucion del programa.
los programas CICS se pueden depuran en modalidad BATCH.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 15 de 56
Maual de COBOL II
Proyecto ALTAIR
COMPILACION
las opciones de compilacion pueden especificarse mediante la ficha CBL o su sinonimia PROCESS, tambien via
JCL en la sentencia EXEC que llama al compilador, en
la PARM :
//COMPILE EXEC PGM=IGYCRCTL,PARM='XREF,SSRANGE,MAP'
para modificar las opciones por defecto se usa la macro IGYCOPT, que se ensamblara y catalogara como modulo
IGYCDOPT.
Una RUN UNIT (unidad de ejecucion) incluye uno o mas programas objeto y puede incluir otros lenguajes diferentes al
COBOL.
El primer programa cobol que se ejecuta en la RUN UNIT
es usualmente, el MAIN PROGRAM (programa principal).
Cuando una RUN UNIT consiste en varios programas llamados,
estos programas deben estar dispuestos para comunicarse con
los otros programas. Estos necesitan transferir control y usualmente necesitan tener acceso a datos comunes.
Otro metodo que puede ser usado para la comunicacion entre programas es el de programas COBOL anidados. Esto permite que todos los programas requeridos pro una aplicacion esten contenidos dentro del MAIN PROGRAM y de este modo solo
es necesario una simple compilacion.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 16 de 56
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 17 de 56
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 18 de 56
Maual de COBOL II
Proyecto ALTAIR
LLAMANDO PROGRAMAS
Maual de COBOL II
Proyecto ALTAIR
PROGRAMAS ANIDADOS
Maual de COBOL II
Proyecto ALTAIR
| | | ........
|||
| | | Exit Program
|||
| | +-- End Program X12
||
| +-|
| +-- Programa X2
| | -------||
| | .........
| | .........
| | Exit Program
||
| +-- End Program X2
|
+-- End Program X
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 21 de 56
Maual de COBOL II
Proyecto ALTAIR
EJEMPLO:
-------+-- Program-id. A
| ----------|
| +-- Program-id. A1
| | ----------||
| | +-- Program-id. A11
| | | ----------|||
| | | +-- Program-id. A111
| | | | ----------||| |
| | | +-- End Program A111
|||
| | +-- End Program A11
||
| +-- End Program A1
|
| +-- Program-id. A2 is COMMON
| | ----------||
| +-- End Program A2
|
| +-- Program-id. A3 is COMMON
| | ----------||
| +-- End Program A3
|
+-- End Program A
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 22 de 56
Maual de COBOL II
Proyecto ALTAIR
Observar:
.- que A2 no puede llamar a A1 proque no es COMMON y
no esta contenido en A2
.- que A111 no puede llamar a A11 porque eso seria una
CALL RECURSIVA.
.- que A1 puede llamar a A2 porque A2 es COMMON.
Maual de COBOL II
Proyecto ALTAIR
Una CALL estatica es ejecutada mas rapidamente que una dinamica y es la preferida si la aplicacion no requiere los
servicios de una Call dinamica. Los programas llamados por una
Call estatica no pueden ser deleteados (con cancel), por tanto
el uso de CALLs estaticas puede ocupar mas memoria principal.
Si la memoria IS A CONCERN OF YOURS considerar el uso de
CALLs dinamicas.
Si la opcion del compilador NODYNAM esta activa todas las
CALLs de el formato CALL -literal- en ese programa seran
CALLs estaticas.
Maual de COBOL II
Proyecto ALTAIR
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 26 de 56
Maual de COBOL II
Proyecto ALTAIR
Cuando los literales son pasados mediante BY CONTENT el programa llamado no puede cambiar el valor.
Si se quiere pasar ambos (el item y su longitud) a un subprograma se especificara una combinacion de BY REFERENCE y BY
CONTENT, por ejemplo :
CALL 'ERRPROC' USING BY REFERENCE A
BY CONTENT LENGHT OF A.
Los items en un programa llamante pueden estar descritos en
la LINKAGE SECTION de todos los programas que llama directa o
indirectamente. En este caso, la memoria para estos items es alocada en el programa llamante de nivel superior. Esto es, el
programa A llama al B, el cual llama al C. Los items en el
programa A pueden ser descritos en la LINKAGE SECTION de los
programas B y C y estar disponibles a los tres programas.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 27 de 56
Maual de COBOL II
Proyecto ALTAIR
EJEMPLO:
-------Descripcion del Prog.
LLAMANTE
----------------------
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 28 de 56
Maual de COBOL II
Proyecto ALTAIR
INTRUCCION INSPECT
-----------------INSPECT DATA-1 TALLYING CONTADOR FOR CHARACTERS AFTER INITIAL 'S'
REPLACING ALL 'A' BY 'O'
INSPECT DATA-1 TALLYING CONTADOR FOR LEADING '0'
REPLACING FIRST 'A' BY '2'
AFTER INITIAL 'C'
INSPECT DATA-1 REPLACING CHARACTERS BY ZEROS
BEFORE INITIAL QUOTE
INSPECT DATA-1 CONVERTING
'abcedfg' TO 'ABCEDFG'
AFTER INITIAL '/'
BEFORE INITIAL '?'
INSTRUCCION INITIALIZE
---------------------INITIALIZE ALFANUMERIC-1
REPLACING ALPHANUMERIC DATA BY ALPHANUM-3
INITIALIZE CAMPO-NUMERICO
REPLACING NUMERIC DATA BY CAMPO-NUMERICO-2
INITIALIZE CAMPO-EDICION
REPLACING ALPHANUMERIC-EDITED DATA BY CAMPO-EDICIION-2
Un item de datos INDEX no se puede inicializar con INITIALIZE.
La sentencia INITIALIZE no se puede usar para inicializar tablas
de longitud variable (OCCURS...DEPENDING ON...)
01
TABLA-ENTRADA.
05 ENTRADA OCCURS 100 TIMES.
10 NOMBRE-TAB PIC X(5). <------ '$bbbb' o '$$$$$'.
10 NOMBRE-TAB PIX 9(5).
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 29 de 56
Maual de COBOL II
INITIALIZE TABLA-ENTRADA
REPLACING ALPHANUMERIC DATA BY [ALL] '$'.
-------------------01
----------|A|A|A|A|A|
----------12345
INSTRUCCIONES DE TABLAS
01 TABLA-1.
05 TABLA-ENTRY OCCURS 10 TIMES INDEXED BY IND-1.
10 TABLA-ENTRY2 OCCURS 5 TIMES
ASCENDING KEY IS KEY1
INDEXED BY IND-3.
20 KEY1
PIC X(5).
20 KEY2
PIC X(10).
SET IND-1 TO 2.
SEARCH TABLA-1
AT END ..............
WHEN tabla-ENTRY3 (IND-1, IND-2, IND-3) = '.......'
WHEN .........
WHEN .........
WHEN .........
END-SEARCH.
INSTRUCCION EVALUATE.
--------------------EVALUATE TRUE
WHEN ESTADO-CASADO
.................
WHEN ESTADO-SOLTERO
.................
END-EVALUATE.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 30 de 56
Proyecto ALTAIR
Maual de COBOL II
Proyecto ALTAIR
EVALUEATE TRUE
WHEN
DD-31
WHEN
DD-30
.............
.............
CONTINUE
WHEN OTHER
.............
.............
.............
END-EVALUATE.
TRUE
MM-31
MM-30
ANY
TRUE
AA-NORMAL
AA-NORMAL
EVALUATE CANTIDAD * 4
WHEN NOT NUMERIC
..................
..................
WHEN 1 THRU 10
..................
..................
WHEN NOT 11 THRU 20
..................
..................
END-EVALUATE.
EVALUATE CAMPO-1
CAMPO-2
CAMPO-3
WHEN
1
1
1
MOVE 'A' TO INDICADOR-FINAL
WHEN
1
1
0
MOVE 'B' TO INDICADOR-FINAL
WHEN OTHER
.................
END-EVALUATE.
EVALUATE CAMPO-1
CAMPO-2
CAMPO-3
WHEN
0
1 THRU 3
5
................
................
WHEN NUMERIC
ANY
NOT NUMERIC
................
................
END-EVALUEATE.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 31 de 56
Maual de COBOL II
Proyecto ALTAIR
INSTRUCCION STRING.
------------------STRING
CAMPO-1 CAMPO-2 DELIMITED BY CAMPO-3
CAMPO-4
DELIMITED BY SIZE <-------- Todo
INTO CAMPO-7
WITH POINTER CAMPO-8. <---------- Contiene el numero de
caracter a transmitir
(no < 1 ni > que la
variable receptora).
campo-4
campo-1
campo-2
campo-3
___________
___________
_____
_
|6|7|8|9|*|0|
|1|2|3|*|4|5|
|A|*|B|
|*|
------------------------___________________________________
|1|2|3|A|6|7|8|9|*|0|b|b|b|b|b|b|b|b|
----------------------------------campo-8
__
|11|
-inicializar a 1
antes de la
ejecucion
la opcion
[ON OVERFLOW sentencia-imperativa]
se ejecutara cuando se excedan
los limites
INSTRUCCION UNSTRING.
---------------------UNSTRING CAMPO-ORIGEN DELIMITED BY DELIMITADOR OR ALLL '*'
INTO CAMPO-FINAL-1 DELIMITED IN MARCA-1 COUNT IN CUENTA-1
CAMPO-FINAL-2 DELIMITED IN MARCA-2
CAMPO-FINAL-3 DELIMITED IN MARCA-3 COUNT IN CUENTA-3
CAMPO-FINAL-4
COUNT IN CUENTA-3
WITCH POINTER APUNTADOR
TALLYING IN CONTADOR-TOTAL
ON OVERFLOW GO TO .......
delimitador
en ejecucion
_
|?|
-
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 32 de 56
Maual de COBOL II
Proyecto ALTAIR
campo-origen
_________________________________
|1|2|3|*|*|4|5|6|?|?|7|A|B|C|D|E|F|
--------------------------------campo-final-1
___________
|1|2|3|b|b|b|
-----------
marca-1
_
|*|
-
campo-final-2
_________
|4|5|6|b|b|
---------
marca-2
_
|?|
-
campo-final-3
_____
|b|b|b|
-----
marca-3
_
|?|
-
campo-final-4
_________
|7|A|B|C|D|
---------
cuenta-1
_
|3|
-
cuenta-3
_
|0|
cuenta-4
_
|5|
-
apuntador
contador-total
__
__
|18|
|05| <-------+------ inicializados a 1
--|
antes de la ejecucion.
|
|
+------------------------------+
INSTRUCCION READ
---------------READ nombre-fichero
AT END ..........
NOT AT END ......
END-READ.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 33 de 56
Maual de COBOL II
Proyecto ALTAIR
COBOL
II : S O R T
FILE SECTION.
-----------SD file-name1
DATA RECORD IS .......
01 .........
En la SD se define el fichero que vamos a ordenar.
PROCEDURE DIVISION.
-----------------SORT file-name1
---_
ON
|
|
|
|
_
ASCENDING
--------DESCENDING
----------
|
|
|
|
--
KEY
data-name1, data-name2,....
|
|
|
|
|
|
|
|
|
|
__
_
|
|
|
|
--
-__
GIVING file-name3 ...
----OUTPUT PROCEDURE
---------------_
| THROUGH
IS section-name3 [| ------| THRU
| ----
|
|
|
|
|
|
|
|
|
|
--
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 34 de 56
|
|
|
|
|
section-name2 ] |
|
|
|
|
-__
_
|
|
|
|
--
|
|
|
|
|
section-name4 ] |
|
|
|
|
--
Maual de COBOL II
Proyecto ALTAIR
RELEASE
Equivale a un WRITE, para grabar los registros en el fichero
del SORT.
RELEASE record-name [FROM identifier]
---------Transfiere registros desde un area de entrada/salida a la
fase inicial de una operacion de ordenacion. Solo se puede usar
en SORT INPUT PROCEDURE.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 35 de 56
Maual de COBOL II
Proyecto ALTAIR
RETURN
SORT-RETURN
Equivale al return-code.
Sort-return
PIC S9(4).
CLAUSULA OCCURS
entero TIMES
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 37 de 56
Maual de COBOL II
Proyecto ALTAIR
FORMATO 2:
--------OCCURS entero-1 TO entero-2 TIMES DEPENDING ON nombre-de-datos-1
--------------Este formato se emplea cuando el sujeto o nombre generico tiene un
numero variable de apariciones.
Si en el ejemplo anterior, en vez de haber grabado la cinta con
un unico registro conteniendo la produccion de 36 meses, cada uno de
treinta dias' se hubieran grabado 36 registros de longitud variable
como consecuencia del numero diferente de dias de cada mes; en este
caso la descripcion seria:
FD ARCHIVO- AUTOS RECORDING V LABEL RECORD OMITTED.
01 REGISTRO-AUTOS.
02 NOMBRE
PIC A(6).
02 MODELO
PIC X(8).
02 NUMERO-DIAS
PIC 99.
02 DIARIA OCURRS 28 TO 31 TIMES
DEPENDING ON NUMERO-DIAS PIC 999.
A la vista de dicha descripcion, entero-1 representa el numero
minimo de apariciones y entero-2 el numero maximo. El valor minimo
que puede tomar entero-1 es cero y el valor maximo de entero-2
depende del tipo de compilador utilizado, pudiendo llegar a ser
superior a 300.000.
Existen compiladores para los que entero-1 es opcional. Siendo
correcto describir:
02 MODELO
PIC X(8).
02 NUMERO-DIAS
PIC 99.
02 DIARIA OCCURS 31 TIMES DEPENDING ON NUMERO-DIAS PIC 999.
DEPENDING debe aparecer en la ultima inscripcion de los campos de
datos que constituyen el registro y, como consecuencia,
nombre-de-datos-1 debe especificarse antes de la descripcion del
nombre generico de la clausula OCCURS, cuando forma parte del
registro, como se muestra en el ejemplo precedente, ya que no seria
correcto escribir:
FD ARCHIVO- AUTOS RECORDING V LABEL RECORD OMITTED.
01 REGISTRO-AUTOS.
02 NOMBRE
PIC A(6).
02 MODELO
PIC X(8).
02 DIARIA OCCURS 28 TO 31 TIMES
DEPENDING ON NUMERO-DIAS PIC 999.
02 NUMERO-DIAS
PIC 99.
por no ser DIARIA el ultimo campo del registro.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 38 de 56
Maual de COBOL II
Proyecto ALTAIR
FORMATO 3:
--------_
_
OCCURS entero-1 TO entero-2 TIMES | DEPENDING ON nombre-de-datos-1 |
-----_ ASCENDING
_
_
_
--------KEY IS nombre-de-datos-2 | nombre-de-datos-3 |...|...
- DESCENDING
---------_
_
_
_
| INDEXED BY nombre-de-indice-1 | nombre-de-indice-2 | ... |
|
TABLAS
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 39 de 56
descripcion,
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 40 de 56
Maual de COBOL II
Proyecto ALTAIR
X(30)
X(30)
X(30)
X(30)
VALUE
VALUE
VALUE
VALUE
'ENERO
FEBRERO MARZO
'.
'ABRIL
MAYO
JUNIO
'.
'JULIO
AGOSTO SEPTIEMBRE'.
'OCTUBRE NOVIEMBRE DICIEMBRE '.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 41 de 56
Maual de COBOL II
Proyecto ALTAIR
01 TABLA.
02 ALUM OCCURS 50 TIMES.
03 NOTA OCCURS 10 TIMES PIC 99V99.
Con el fin de hacer referencia a una entrada en una tabla
bidimensional se necesitan dos subindices ("I" y "J") escritos de la
forma (I, J). El primer subindice se refiere a la variable descrita
en la primera declaracion OCCURS y debe estar seguido por una coma y
un espacio. El segundo subindice se refiere a la variable descrita
por la segunda declaracion OCCURS.
Una tabla tridimensional se definiria de la siguiente manera:
01 TABLA.
02 ELE1 OCCURS 3 TIMES.
03 ELE2 OCCURS 3 TIMES.
04 ELE3 OCCURS 2 TIMES PIC X(8).
INDEXACION
DECLARACION "SET"
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 42 de 56
Maual de COBOL II
Proyecto ALTAIR
nombre-indice-1 nombre-indice-2
nombre-indice-3
SET
... TO identificador-3
identificador-1 identificador-2
literal
UP BY
identificador
SET nombre-indice-1 nombre-indice-2
DOWN BY literal
Los nombres de indice siempre deben tener valores entre "1" y el
tamao de la tabla.
El efecto de la declaracion SET es transferir al operando u
operandos que siguen a SET el contenido del operando que sigue a la
palabra TO, es decir, es una transferencia realizada en sentido
contrario a como la realiza la declaracion MOVE.
Si se utiliza UP BY o DOWN BY, cada vez que se ejecuta la
declaracion SET el contenido de los nombres-de-indice que siguen a
dicha declaracion se incrementan (UP BY) o decrementan (DOWN BY) en
el valor contenido en el identificador o literal que siga a estas dos
opciones.
SET INDICE BETA TO SUM.
(Indice y Beta pasan a valer SUM).
SET INDICE TO 46.
(Indice pasa a valer 46).
SET INDICE UP BY 2.
(Indice se incrementa en 2).
01 TABLA.
02 ELE PIC 99 OCCURS 10 TIMES
INDEXED BY K.
..................
..................
PROCEDURE DIVISION.
SET K TO ZERO.
CALCULO.
SET K UP BY 1.
IF K NOT > N ADD ELE(K) TO TOTAL
GO TO CALCULO.
..................
..................
DECLARACION "SEARCH"
====================
Lleva a cabo la busqueda en forma secuencial de una tabla hasta
que el contenido de un elemento de la misma satisfaga una determinada
condicion.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 43 de 56
Maual de COBOL II
Proyecto ALTAIR
_
_
SEARCH identificador | AT END declaracion-imperativa-1 |
declaracion-imperativa-2
WHEN condicion-1
NEXT SENTENCE
_
declaracion-imperativa-3 _
| WHEN condicion-2
|
NEXT SENTENCE
La tabla nombrada (identificador) es buscada desde el valor actual
del indice (por tanto, si se quiere que la busqueda empiece por el
principio de la tabla, se debe inicializar el valor del indice por
medio de la declaracion SET). Cuando termina la daclaracion SEARCH,
el indice tiene el valor del elemento de la tabla para el cual la
condicion es verdadera. Si se desea continuar una busqueda a partir
de donde se interrupio se deja ejecutar de nuevo la declaracion
SEARCH sin volver a restablecer el indice.
El efecto de la declaracion SEARCH es el siguiente:
Se incicia una busqueda de la tabla indicada y se prueba la
condicion que sigue al primer WHEN, caso de que la prueba resulte
cierta se ejecuta la declaracion o delaraciones que siguen a dicha
condicion y si no resulta cierta se realiza el mismo proceso para los
sucesivos WHEN. Si la prueba resulta falsa para todas las condiciones,
el indice se incrementa automaticamente en una unidad para repetir el
ciclo con el segundo elemento.
Si hecha la prueba de las distintas condiciones con todos los
elementos de la tabla no se encuentra alguno que cumpla una
de las condiciones, quiere decir que el valor buscado no existe en
ningun elemento de la tabla por lo que se da por finalizada la
busqueda con lo que pasaria a ejecutar la declaracion que sigue a AT
END.
Es decir, de una forma mas esquematica, el proceso seria:
a) Se prueba cada condicion o condiciones de la opcion WHEN en el
mismo orden de su escritura.
b) Si no se ha satisfecho ninguna de las condiciones se incrementa
el indice de la tabla para poder hacer referencia al siguiente
elemento de la misma y se repite el paso a).
c) Si despues de la evaluacion se ha satisfecho una de las
condiciones que siguen a WHEN, la busqueda concluye pasando a
ejecutarse la declaracion imperativa asociada con tal condicion.
El indice, en ese momento, contendra el numero del elemento de la
tabla que satisfizo la condicion.
d) Si se alcanza el final de la tabla sin haber satisfecho ninguna
condicion de las que siguen a WHEN, la busqueda concluye pasando a
ejecutarse la declaracion imperativa asociada con tal condicion.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 44 de 56
Maual de COBOL II
Proyecto ALTAIR
PIC X(10)
PIC X(20)
PIC X(10)
PIC X(2)
PIC Z.ZZ9
VALUE SPACES.
VALUE SPACES.
VALUE SPACES.
VALUE ZEROS.
01 TABLA.
02 ELEM OCCURS 45 TIMES INDEXED BY I.
03 NOMBRE PIC X(10).
03 VENTA PIC 9(4).
...........................
...........................
PROCEDURE DIVISION.
...........................
...........................
BUSQUEDA.
SET I TO 1.
SEARCH ELEMEN AT END GO TO NOEXISTE
WHEN NOMBRE(I) = NOM
MOVE NOMBRE(I) TO NOMIN
MOVE VENTA(I) TO VENIM
WRITE .................
GO TO FIN.
NOEXISTE.
...........................
...........................
OPCION "VARYING"
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 45 de 56
Maual de COBOL II
Proyecto ALTAIR
(2)
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 46 de 56
Maual de COBOL II
Proyecto ALTAIR
BUSQUEDA BINARIA
================
La instruccion SEARCH ejecuta una busqueda secuencial, es
decir, aun si la partida que se esta buscando esta cercana al
final de la tabla, se examinan todas las partidas anteriores hasta
que se llega a la que se busca. Este proceso se puede utilizar si
los valores de los elementos de la tabla estan en secuencia o si
no lo estan.
Si las entradas de la tabla estan en secuencia se puede
realizar un tipo de busqueda mas eficiente llamada busqueda
BINARIA. Una busqueda binaria requiere un campo clave en cada
entrada de la tabla. Se busca comprobando primero el valor del
campo clave en el punto medio de la tabla. Si el valor que se esta
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 47 de 56
Maual de COBOL II
Proyecto ALTAIR
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 48 de 56
Maual de COBOL II
Proyecto ALTAIR
PIC X(10)
01 TABLA.
02 ELEM OCCURS 45 TIMES
INDEXED BY I
ASCENDING KEY NOMBRE.
03 NOMBRE
PIC X(10).
03 VENTAS
PIC 9(4).
...................................
...................................
BUSQUEDA.
SEARCH ALL ELEMEN AT END GO TO NOEXISTE
WHEN NOMBRE(I) = NOM
MOVE NOMBRE(I) TO ...
MOVE VENTAS(I) TO ...
GO TO FIN.
BUSQUEDA DICOTOMICA
MENOR : PRIMER VALOR -1
MAYOR : ULTIMO VALOR +1
I : INDICE
|
|
| INICIALIZAR |
|
MAYOR
|
|
MENOR
|
-------------|
|
___________________________________
_______
SI
| NO
| -----| ESTA |
-------
______
| ESTA |
------
|
|
|
|
| NO
|
|
|
____________________
|
|
|
|
|
MAYOR - MENOR |
|
| I = ------------- |
|
|
2
|
|
-------------------|
|
|
|
|
|
TABLA(I)
|
=
. .
>
__________
|
-------------| MOVE I |
|
. .
| TO MAYOR |
|
BUSQUEDA
---------|
|
| <
|
|
|
__________
|
| MOVE I |
|
| TO MENOR | -----------------------------MAYOR - MENOR = 1
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 49 de 56
Maual de COBOL II
Proyecto ALTAIR
LITERALES.
FICHEROS ESDS.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 50 de 56
Maual de COBOL II
Proyecto ALTAIR
-----Campo emisor------
POINTER
Un campo pointer es un item elemental no numerico de 4 bytes.
Solo puede usarse en:
. La instruccion SET.
. En una comparacion.
. En la USING de una CALL o en la cabecera de la PROCEDURE.
Si se quiere mover un puntero a un campo numerico el pointer
tendra que redefinirse como PIC S9(8) COMP.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 51 de 56
Maual de COBOL II
Proyecto ALTAIR
EJEMPLOS.
___________
WORKING SECTION.
01 APUNTADOR-1 USAGE IS POINTER.
01 RAPUN-1 REDEFINES APUNTADOR-1 PIC S9(8) COMP.
LINKAGE SECTION.
01 DFHCOMMAREA.
03 APUN-DIRCOM USAGE IS POINTER.
03 DIRCOM REDEFINES APUN-DIRCOM PIC S9(8) COMP.
01 DATOS-RECIBIDOS.
03 MOVTOS290
03 RETORNO
PIC X(290).
PIC X.
COPY CWAAREC.
PROCEDURE DIVISION.
SET ADDRESS OF DATOS-RECIBIDOS TO APUN-DIRCOM.
EXEC CICS ADDRESS CWA(APUNTADOR-1)
END-EXEC.
SET ADDRESS OF CWAARE TO APUNTADOR-1.
EXEC CICS ADDRESS CWA(ADDRESS OF CWAARE) Esta instruccion es
END-EXEC.
equivalente a las dos
anteriores.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 52 de 56
Maual de COBOL II
Proyecto ALTAIR
RUTINAS DE CALCULO
************************************
TO NUMDIAS.
TO D.
TO CONTANOS.
PERFORM
UNTIL CONTANOS = AA-HASTA AND
D = MM-HASTA
ADD DIA(D)
TO NUMDIAS
ADD CN-1
TO D
IF D > CN-12
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 53 de 56
Maual de COBOL II
Proyecto ALTAIR
MOVE CN-1
TO D
MOVE CN-1
TO CONTANOS
END-IF
IF CONTANOS = CN-100
MOVE ZEROS
TO CONTANOS
END-IF
END-PERFORM.
SUBTRACT DD-DESDE
FROM NUMDIAS
ADD
DD-HASTA
TO NUMDIAS.
XXXX-CALCULO-DIAS-EXIT.
***********************
EXIT.
****************************************************
----- NUMERO DE MESES ENTRE DOS FECHAS
----****************************************************
WORKING-STORAGE SECTION.
********
01 CAMPOS-NUMERICOS.
03 MESES
PIC S9(3) COMP-3 VALUE +0.
03 CONTANOS
PIC S9(3) COMP-3 VALUE +0.
03 FECHA-DESDE
PIC 9(6).
03 FILLER REDEFINES FECHA-DESDE.
05 DD-DESDE
PIC 99.
05 MM-DESDE
PIC 99.
05 AA-DESDE
PIC 99.
03 FECHA-HASTA
PIC 9(6).
03 FILLER REDEFINES FECHA-HASTA.
05 DD-HASTA
PIC 99.
05 MM-HASTA
PIC 99.
05 AA-HASTA
PIC 99.
****>>>>>>>> TABLA DE MESES CON DIAS
01 FILLER.
03 T1-DIAS
PIC X(48) VALUE
'013102280331043005310630073108310930103111301231'.
03 T2-DIAS REDEFINES T1-DIAS OCCURS 12 TIMES.
05 MES
PIC 99.
05 DIA
PIC 99.
PROCEDURE DIVISION.
XXXX-CALCULO-MESES.
*******************
MOVE ZEROS
MOVE AA-DESDE
TO MESES.
TO CONTANOS.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 54 de 56
Maual de COBOL II
Proyecto ALTAIR
****************************************************
----- RESTAR UN PERIODO A UNA FECHA
----****************************************************
WORKING-STORAGE SECTION.
********
01 CAMPOS-NUMERICOS.
03 MESES
PIC S9(3) COMP-3 VALUE +0.
03 CONTANOS
PIC S9(3) COMP-3 VALUE +0.
03 FECHA-DESDE
PIC 9(6).
03 FILLER REDEFINES FECHA-DESDE.
05 DD-DESDE
PIC 99.
05 MM-DESDE
PIC 99.
05 AA-DESDE
PIC 99.
03 FECHA-HASTA
PIC 9(6).
03 FILLER REDEFINES FECHA-HASTA.
05 DD-HASTA
PIC 99.
05 MM-HASTA
PIC 99.
05 AA-HASTA
PIC 99.
****>>>>>>>> TABLA DE MESES CON DIAS
01 FILLER.
03 T1-DIAS
PIC X(48) VALUE
'013102280331043005310630073108310930103111301231'.
03 T2-DIAS REDEFINES T1-DIAS OCCURS 12 TIMES.
05 MES
PIC 99.
05 DIA
PIC 99.
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 55 de 56
Maual de COBOL II
Proyecto ALTAIR
Instruccin inpect para poner ceros por la izquierda y pasar un campo a numerco.
01 SG0001F.
05 WS-POLIZA
05 FILLER
05 WS-CERTIFICADO
05 FILLER
05 WS-CODGES47
05 FILLER
05 WS-CODGES31
PIC X(9).
PIC X(1).
PIC X(9).
PIC X(1).
PIC X(12).
PIC X(1).
PIC X(12).
01 VARIABLES.
05 WS-POLIZA-NUM
05 WS-CODGES47-NUM
05 WS-CODGES31-NUM
PIC 9(9).
PIC 9(12).
PIC 9(12).
MOVE 0 TO W-CONT1
W-CONT2
W-CONT3
W-CONT4
INSPECT WS-CODGES47 TALLYING W-CONT1 FOR LEADING '0'.
INSPECT WS-CODGES47 TALLYING W-CONT2 FOR CHARACTERS
BEFORE INITIAL ' '.
MOVE WS-CODGES47(W-CONT1 + 1 : W-CONT2 - W-CONT1)
TO WS-CODGES47-NUM
INSPECT WS-CODGES31 TALLYING W-CONT3 FOR LEADING '0'.
INSPECT WS-CODGES31 TALLYING W-CONT4 FOR CHARACTERS
BEFORE INITIAL ' '.
MOVE WS-CODGES31(W-CONT3 + 1 : W-CONT4 - W-CONT3)
TO WS-CODGES31-NUM.
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL
WS-POLIZA(WS-I:1) NOT = SPACES OR WS-I > 9
END-PERFORM
COMPUTE WS-J = WS-I - 1
COMPUTE WS-K = 9 - WS-J
COMPUTE WS-M = WS-J + 1
MOVE ZEROS
TO WS-POLIZA-NUM(1:WS-J)
MOVE WS-POLIZA(WS-I:WS-K)
TO WS-POLIZA-NUM(WS-M:WS-K)
/var/www/apps/conversion/tmp/scratch_1/282823747.doc
Pgina 56 de 56