Manual Cobol

  • View
    215

  • Download
    3

Embed Size (px)

Transcript

Manual CobolEsquema de un programa cobolLos programas cobol se dividen en partes llamadas "DIVISION" que a su vez se separan en secciones llamadas "SECTION". Vamos a ver el esquema bsico que todo programa cobol debe tener: IDENTIFICATION DIVISION. PROGRAM-ID. PRUEBA1. Nombre del programa. Debe coincidir con el nombre externo del programa. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. Nosotros usamos los puntos como separadores de miles y la coma como el separador de decimales. INPUT-OUTPUT SECTION. FILE-CONTROL. En esta parte se definen los ficheros en caso de que los haya. SELECT FICHERO1 Nombre de fichero. ACCES MODE IS SEQUENTIAL Tipo de acceso: SEQUENTIAL para los planos, INDEXED para los indexados. FILE STATUS IS FS-FICHERO1 Variable donde guardar el file-status (cdigo de control de errores de acceso a ficheros). DATA DIVISION. FILE SECTION. FD FICHERO1 RECORDING MODE IS F Fichero con longitud fija. Si fuese de longitud variable pondramos V. BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 129 CHARACTERS. Longitud del fichero. 01 REG-FICHERO1 PIC X(129). Donde guardaremos la informacin. WORKING-STORAGE SECTION. En ella definimos las variables que usaremos en el programa. 01 WX-VARIABLE PIC X. Definicin de variables lo veremos ms adelante. LINKAGE SECTION. rea de comunicacin con otros programas 01 AREA-LINKAGE PIC X.

PROCEDURE DIVISION. / PROCEDURE DIVISION USING AREA-LINKAGE. Si hay un rea definida en la linkage debemos incluir el USING en la procedure. Aqu es donde va el programa en s. La estructura general ser: 0000-PRINCIPAL. PERFORM 1000-INICIO PERFORM 2000-PROCESO UNTIL CUMPLE-CONDICION PERFORM 3000-FINAL . La numeracin de prrafos suele ser esa, pero cada empresa puede tener su propia nomenclatura estndar. El proceso en un programa se suele repetir n veces, hasta que se cumple la condicin indicada en el UNTIL. En el prrafo de final se incluye la instruccin de finalizacin de ejecucin: STOP RUN para programas principales. GOBACK para rutinas. Se pueden definir tantos prrafos como queramos, pero la estructura de todos ellos ser la siguiente: 1000-INICIO. cdigo con instrucciones a realizar . Es decir, todos los prrafos terminan con un punto "." que indica el final de prrafo. A tener en cuenta: En cobol no podemos empezar a escribir donde queramos, pues cada cosa tiene su sitio^^ Un programa cobol mide de ancho 80 posiciones, aunque slo escribiremos hasta la 72.----+----1----+----2----+----3----+----4----+----5----+----6----+----7-01 WX-CAMPOS. 05 WX-CAMPO1 PIC X. 05 WX-LITERAL PIC X(40) VALUE 'LITERAL TAN GRANDE QUE NO CABE ' 'EN UNA LINEA Y LO TENEMOS QUE PARTIR'. * PROCEDURE DIVISION. ****************************************************************** 00000-PRINCIPAL. * PERFORM 10000-INICIO.

* De la posicin 1 a la 6: no se codifica nada. * Posicin 7: se escribir un * si queremos comentar la lnea. En caso de que un texto no nos quepa en una lnea, se escribir en esta posicin un guin "-" para continuarlo. * De la posicin 8 a la 11: se denomina rea A. Aqu escribiremos las "divisiones" y "secciones", los niveles 01 y los descriptores de ficheros "FD". * De la 12 a la 72: se denomina rea B. Aqu se escribirn el resto de instrucciones del programa, y los niveles 05 en adelante. * De la 73 a la 80: no se codifica nada.

Esto que acabamos de ver es algo muuuuy general, pero iremos vindolo mejor con ejemplos.

Y hasta aqu la primera leccin. En el siguiente artculo veremos la WORKING-STORAGE, donde se definen las varibles que vamos a usar a lo largo del programa. Veremos los diferentes tipos de variables, el clculo de longitudes y como se visualizan en un fichero.

WORKING-STORAGE: definiendo variables.Las variables que se usan en un programa cobol deben haber sido previamente definidas en la WORKING-STORAGE SECTION. Existen diferentes tipos de variables en cobol. Cada variable que definamos debe terminar con un punto ".". Si la variable va a tener un valor inicial lo indicaremos con la clusula VALUE. Alfanumricas: se indican con un PIC X(nmero de caracteres). Podrn tener como valores nmeros y letras. 01 WX-VARIABLE-ALFNUM PIC X(10) VALUE 'LOQUESEA10'. Numricas normales: se indican con un PIC 9(nmero de dgitos). Slo tendrn valor numrico. La V indica la coma decimal. 01 WX-VARIABLE-NUM PIC 9(5)V9(2) VALUE 12345,67. (value sin las comillas) Numricos comprimidos: se indican con un PIC 9(nmero de dgitos) COMP-3. Slo valores numricos. Estas variables ocuparn, en espacio, menos que un numrico normal. El clculo de longitudes lo veremos ms adelante. La S indica que lleva signo decimal que puede ser positivo o negativo. 01 WX-VARIABLE-COMP3 PIC S9(5)V9(2) COMP-3 VALUE 12345,67. Numricos hexadecimales: se indican con un PIC 9(nmero de dgitos) COMP. Slo valor numrico. OJO! Aceptan letras porque el nmero va en formato hexadecimal, pero eso no significa que podamos informarlas con caracteres alfabticos. 01 WX-VARIABLE-COMP PIC 9(5)V9(2) COMP VALUE 12345,67. Editados: se indican con la clusula PIC seguida por tantas "zetas" Z como necesitemos. Se utilizan para dar formato a campos numricos. 01 WX-VARIABLE-EDI PIC -Z.ZZZ.ZZ9,99. Esto equivaldra a un campo numrico PIC S9(7)V9(2). El ltimo dgito antes de la coma decimal se indica con un 9 para que aparezca el valor numrico del 0 al 9. Las Zs sustituirn los "ceros" 0 a la izquierda por espacios. 01 WX-VARIABLE-NUM PIC S9(7)V9(2) VALUE -0001234,56. 01 WX-VARIABLE-EDI PIC -Z.ZZZ.ZZ9,99 DISPLAY 'WX-VARIABLE-NUM:'WX-VARIABLE-NUM MOVE WX-VARIABLE-NUM TO WX-VARIABLE-EDI DISPLAY 'WX-VARIABLE-EDI:'WX-VARIABLE-EDI

El resultado sera: WX-VARIABLE-NUM:00012345O WX-VARIABLE-EDI:1.234,56

Ahora que sabemos definir variables, vamos a ver que las variables pueden estar definidas en diferentes "niveles". Estos niveles vienen indicados por un nmero a la izquierda: 01 WX-INFORMACION-PERSONA. 05 WX-NOMBRE PIC X(10). 05 WX-APELLIDO1 PIC X(10). 05 WX-APELLIDO2 PIC X(10). 05 WX-DIRECCION. 10 WX-CALLE PIC X(10). 10 WX-NUMERO PIC 9(3). 10 WX-PISO PIC 9(2). Y as sucesivamente. Si tenemos algn subnivel que sea una constante, en lugar de ponerle nombre al campo podemos utilizar la clusala FILLER: 01 WX-FECHA. 05 WX-DIA 05 FILLER 05 WX-MES 05 FILLER 05 WX-ANO PIC PIC PIC PIC PIC 9(2). X VALUE '-'. 9(2). X VALUE '-'. 9(4).

La diferencia del FILLER con un campo "con nombre", es que el FILLER no se puede utilizar para "mover" la informacin que contenga. Es un campo fijo (la traduccin sera "RELLENO") que no se puede informar (a no ser que informsemos el nivel superior y nos cargsemos todo, claro... xd). El resultado del campo informado sera por ejemplo: Fecha = 01-01-2011 Existe una forma de definir variables con dos o ms tipos de formato (PIC) distintos. Se trata de la clusula REDEFINES. Se suele utilizar para evitar mover campos alfanumricos a numricos, o bien para agrupar un campo que tenga subniveles: 01 WX-CAMPO1 PIC X(3). 01 WX-CAMPO2 REDEFINES WX-CAMPO1 PIC 9(3). 01 WX-CAMPO1. 05 WX-SUBCAMPO1 PIC X(3). 05 WX-SUBCAMPO2 PIC 9(5). 01 WX-CAMPO2 REDEFINES WX-CAMPO1 PIC X(8). IMPORTANTE: slo se pueden "redefinir" campos que estn al mismo nivel, es decir, para redefinir un campo de un nivel 01, tendremos que hacerlo en otro campo de nivel 01.

Tambin podemos definir tablas o arrays: 01 WX-TABLA-INTERNA OCCURS 5 TIMES. 05 WX-CAMPO1 PIC X VALUE 'A'. 05 WX-CAMPO2 PIC X VALUE 'B'. De tal manera que el conjunto de los campos 1 y 2 se repiten 5 veces: ABABABABAB Existen otro tipo de niveles que son los niveles "88": 01 WX-RESPUESTA PIC X. 88 RESPUESTA-SI VALUE 'S'. 88 RESPUESTA-NO VALUE 'N'. De tal forma que la variable WX-RESPUESTA podr tomar los valores S N segn queramos. Para hacer que la variable tome un valor: SET RESPUESTA-SI TO TRUE SET RESPUSETA-NO TO TRUE tomar el valor S. tomar el valor N.

Imaginemos que tenemos una serie de campos que definen la estructura de un fichero. Si tenemos varios programas que usan ese fichero, tendremos que escribir esos campos tantas veces como programas tengamos. Para ahorrarnos trabajo tenemos la clusula COPY. Una "COPY" es un trozo de cdigo cobol que puede contener la definicin de variables (COPY de WORKING) o una parte del cdigo del programa (COPY de PROCEDURE): COPY WORKING Se incluirn dentro de la WORKING-STORAGE. COPY WSCOPY. Donde WSCOPY contendr algo de este estilo: 01 WX-WSCOPY. 05 WX-CAMPO1 PIC X(5). 05 WX-CAMPO2 PIC X(5). 05 WX-CAMPO3 PIC X(5). 05 WX-CAMPO4 PIC X(5). COPY PROCEDURE Se incluirn dentro de la PROCEDURE DIVISION. COPY PDCOPY. Donde PDCOPY contendr algo de este estilo: MOVE WX-CAMPO1 TO WX-REGISTRO1 MOVE WX-CAMPO2 TO WX-REGISTRO2 MOVE WX-CAMPO3 TO WX-REGISTRO3 MOVE WX-CAMPO4 TO WX-REGISTRO4 MOVE WX-CAMPO5 TO WX-REGISTRO5

CLCULO DE LONGITUDES Numricos y alfanumricos: lo que venga indicado en el PIC X(n) PIC 9(n) respectivamente. 01 WX-VARIABLE-ALFNUM PIC X(5). 01 WX-VARIABLE-NUM PIC 9(5). longitud = 5

Numricos COMP-3: si tenemos un PIC 9(n) COMP-3, la longitud ser (n+1)/2. Si el resultado tiene decimales redondeamos hacia arriba. Hay que tener en cuenta que la coma decimal no ocupa espacio, y que el signo ocupa slo media posicin. 01 WX-VARIABLE-COMP3 PIC S9(5) COMP-3. longitud = (5 + 1)/2 = 3 Numricos COMP: Un campo con PICTURE numrica y COMP se almacena en formato binario puro (base 2); el signo lo representa el bit de la derecha. El nmero de bytes que se reservan en memoria para cada campo es: 2 posiciones para nmeros de 1 a 4 dgitos. 4 posiciones para nmeros de 5 a 9 dgitos. 8 posiciones para nmeros de 10 a 18 dgitos. 01 WX-VARIABLE-COMP PIC 9(5) COMP. longitud = 4

VISUALIZANDO CAMPOS Como ya hemos comentado, existen campos en cobol q no se ven "tal cual", como son los comprimidos o los hexadecimales. Vamos a ver como se veran en un fichero estos campos: ----+----1----+----2----+----3----+----4 999999999 q % 00000 S FFFFFFFFF444444444493716000000FFFFF00E2 99999999900000000008265C000000000000122 ------------------------------