martes, 25 de enero de 2011

Esquema de un programa cobol

Los programas cobol se dividen en partes llamadas "DIVISION" que a su vez se separan en secciones llamadas "SECTION". Vamos a ver el esquema básico 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 (código 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 pondríamos V.

    BLOCK CONTAINS 0 RECORDS
    RECORD CONTAINS 129 CHARACTERS.

   Longitud del fichero.

01 REG-FICHERO1 PIC X(129).

   Donde guardaremos la información.

WORKING-STORAGE SECTION.

   En ella definimos las variables que usaremos en el programa.

01 WX-VARIABLE PIC X.

   Definición de variables lo veremos más adelante.

LINKAGE SECTION.

   Área de comunicación 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 numeración de párrafos suele ser esa, pero cada empresa puede tener su propia nomenclatura estándar.

El proceso en un programa se suele repetir n veces, hasta que se cumple la condición indicada en el UNTIL.

En el párrafo de final se incluye la instrucción de finalización de ejecución:
STOP RUN para programas principales.
GOBACK para rutinas.

Se pueden definir tantos párrafos como queramos, pero la estructura de todos ellos será la siguiente:

1000-INICIO.
    código con instrucciones a realizar
    .


Es decir, todos los párrafos terminan con un punto "." que indica el final de párrafo.

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 sólo 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 posición 1 a la 6: no se codifica nada.
* Posición 7: se escribirá un * si queremos comentar la línea. En caso de que un texto no nos quepa en una línea, se escribirá en esta posición un guión "-" para continuarlo.
* De la posición 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 escribirán el resto de instrucciones del programa, y los niveles de variables subordinadas (02 en adelante).
* De la 73 a la 80: no se codifica nada.

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


Y hasta aquí la primera lección. En el siguiente artículo 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 cálculo de longitudes y como se visualizan en un fichero.

19 comentarios:

J. Vasquez dijo...

Muy bueno para empezar en el mundo cobol. Quiero aportar algo...agregar que la sintaxis del cobol en las diferentes plataformas se diferencian en muy poco. Pero básicamente es igual.
Yo estudie este lenguaje en el instituto e hice mi primer programa en el trabajo y, la verdad, que fue una buena experiencia.

Yo trabajo en as400 y solo programaba en RPG, recuerdo que mi primer programa cobol contenia algo de 1000 líneas, me demandó aprox. 2 meses implementarlo, tenia que leer una cola de datos y usando copybook mapear la información y grabarla en un fichero.
Personalmente, creo que fue un inicio difícil para mi inexistente experiencia, pero lo tome como un reto y, modestia aparte, no lo hice mal. Y es que la verdad si alguien domino un lenguaje de programación, aprender otro es fácil, solo es cuestión de aprenderse la sintaxis, y como dicen siempre “la logica es la misma”.
Eso fue hace 5 años, y aun esta en producción ese programa.
Para los que comienzan a programar en este lenguaje les digo que tiene sus cosas difíciles, a mi me costó adecuarme pero después de un tiempo me parece el lenguaje mas amigable para realizar procesos batcheros.
La parte mas laboriosa, por decirlo de alguna manera es la declaración de archivos, pero el resto es parecido a pseudocódigo. Suerte a los que empiezan en el mundo cobol.

Atte.
JV

Tallian dijo...

Muchas gracias por contarnos tu experiencia JV!
Mi primer contacto con la programación fue el COBOL (fácil teniendo en cuenta que estudié químicas). Y la verdad es que "amigable" lo define muy bien. Mira como he acabado, haciendo un blog de todo esto!! jajaja.
Probablemente la mayoría de los principiantes lo sean porque han empezado a trabajar en este mundillo, y como nos acordamos perfectamente de lo que es eso(no fue hace tanto), intentaremos hacerles el camino un poco más fácil : )
Ánimo a todos y preguntad todo lo que queráis, que para eso estamos.
Talli.

J.Vasquez dijo...

Aquí en Lima-Peru, es casi normal que gente de otras especialidades se orienten a la programación. He conocido a compañeros de trabajo, economistas e ing. electrónicos que se metieron a programar. Como dicen, “el habito no hace al monje” y si le pones dedicación a algo que haces puedes desenvolverte en cualquier contexto.
También les digo, cualquier duda, aporte, comentarios, etc…a disposición.
Saludos
JV

Anónimo dijo...

Hola, muy buena la informacion de cobol.. pero necesito saber donde bajar un compilador de cobol.. precisamente VisualAge cobol.. no se donde bajarla.. muchas gracias!

Anónimo dijo...

Amigos, en un trabajo me pidieron por norma de la empresa eliminar los puntos en algunas instrucciones debido a que demora la compilación, habian escuchado algo como esto..?

Llevo más de 20 años programando en AS400 (Rpg, Cobol, RpgIle, CobolIle, SQL) y nunca habia escuchado tal cosa.

Espero sus respuestas.

Tallian dijo...

Se me había pasado por alto este comentario. Mil perdones.

Lo cierto es que cuando me dieron el curso de cobol, nos obligaban a poner un punto por cada línea. Es decir, al final de cada move, if, etc ponías el punto.
Sin embargo cuando empecé a trabajar estaba prohibido poner puntos intermedios, y sólo se ponia el punto de final de párrafo. Como esto lo he visto en todos los clientes en los que he trabajado, he decidido contarlo así.
No sé si es debido a rendimiento pero imagino que sí.

Un saludo,
Talli.

Anónimo dijo...

Con estas instrucciones trataré de explicar el uso del (.) obligatorio en la sintaxis de Cobol para terminar los párrafos:

EJEMPLO-01.
IF EJE01 = "S" DISPLAY "SI".
DISPLAY "FIN".

EJEMPLO-02.
IF EJE01 = "S" DISPLAY "SI"
DISPLAY "FIN".

Aunque ambos párrafos parecen iguales el resultado puede ser diferente dependiendo del valor en EJE01, en el primero si EJE01 no tiene el valor "S", solo será mostrada la palabra "FIN"; en el segundo caso si EJE01 no tiene el valor "S", no será mostrada ninguna palabras ya que al no haber el punto (.) es tomado como parte de la pregunta, ahora para mejorar la lectura y evitar dolores de cabeza buscando el final de cada párrafo lo colocaremos de esta forma:

EJEMPLO-03.
IF EJE01 = "S" DISPLAY "SI"
.
DISPLAY "FIN"
.

En nuestro cerebro siempre ponemos un (.) al final de un párrafo aunque no esté escrito, por esa razón a la hora de programar en Cobol y conociendo la importancia del punto (.) es mejor hacerlo visible al colocarlo como separador de líneas...

jimrock979 dijo...

EXCELENTE APORTE MUY AMABLES QUE DIOS LOS BENDIGA. TRABAJO CON EL BBVA Y ESTOY EMPEZANDO COMO PROGRAMADOR JUNIOR EN UNA EXCELENTE EMPRESA. GLORIA A DIOS PORQUE GRACIAS A ÉL, AL BANCO Y A USTEDES, ESTOY COMENZANDO MI FORMACIÓN COMO COBOLISTA, SI SE PUEDE DECIR ASÍ. MUCHAS GRACIAS

Anónimo dijo...

Gracias =D me quedo super claro

Tallian dijo...

A vosotros! Gracias por leernos : )

Unknown dijo...

Tallian, debo de felicitarte por tu trabajo, no sera muy complejo y completo que digamos, pero es muy sencillo de entender, lo cual lo hace mucho mejor que cualquier guia de IBM o demas guias, que muchas veces la complican y ponen ejemplos inentendibles xD me gustaria poder contactarme contigo, yo me estoy iniciando en la programacion cobol mainframe.. empeze a laburar a traves de una consultora para peugeot argentina, nos van a dar 2 meses de capacitacion en cobol y db2, mi duda surge en lo siguiente: en el sueldo que debo de pedir pasado los 2 meses de capacitacion que tras ese tiempo ya seriamos productivos por asi decir, o por lo menos esa es la idea de la empresa, los primeros 2 meses empezamos con un sueldo minimo de 2500 $ argentinos (600 dolares aproximadamente)pero al finalizar la capacitacion, tenemos que negociar dicho sueldo, con lo cual me encuentro que no se que plata pedir, teniendo en cuenta que ya practicamente no existen programadores cobol jovenes (tengo 19 años y es mi primer trabajo) agradeceria que me puedas orientar, no se si me podes responder a mi mail (carlos_delgado@live.com.ar) o por aca, desde ya muchas gracias, y exito en todos tus emprendimientos

Tallian dijo...

Te escribo al mail!
Como siempre, gracias por leernos : )

Anónimo dijo...

hola a todos soy programador de c# y java pero de verdad me gustaria iniciarme en este mundo de cobol rpg y as400 ya que en el banco donde trabajo usan rpg AS/400, actualmente no trabajo en el area soy analista de RRHH pero quiero postularme en un futuro como programador pero necesito aprender mas de estas herramientas de verdad que es tan amplio que no se por donde empezar que me Recomiendan!!!

Alejandro Hernàndez dijo...

Muchas Gracias por el aporte!!!! Me sirve más tu explicación que la que nos están dando en el curso!!!.. Gracias!!!

David Solé González dijo...

Hola,
Me gustaría aportar mi (pequeño) grano de arena, haciendo un pequeño matiz:

Cuando habláis de la zona B decís "y los niveles 05 en adelante.". De aquí me gustaría destacar:

Si una variable es subordinada de otra deberá estar en la zona B. Esto incluye los niveles 02, 03, y 04... Los "COBOLEROS" tenemos (a veces) la costumbre de nivelar de 5 en 5 o de 10 en 10, pero no tenemos que olvidar que algo así:

01 VAR.
02 VAR-1
03 VAR-2

También es correcto, incluso

01 VAR
65 VAR-2
87 VAR-3

También es correcto (aunque puede que duela a la vista y a mas de uno le salte el ToC, jejeje).

Con esto me refiero a que se podría matizar mejor el trozo "y los niveles 05 en adelante."...

Saludos :-)

Tallian dijo...

Totalmente de acuerdo David.
La costumbre de empezar en el 05 hizo que se nos olvidase mencionar al 2,3 y 4 :P
Ahora mismo lo cambio!

El Mae dijo...

He vuelto a los tiempos en que programaba en COBOL (a partir de 1973) y deseo expresar mi humilde opinión de por qué las instrucciones tienen un lugar específico donde escribirse. Se menciona aquí que un programa de cobol tiene 80 posiciones de largo y que de la posición 73 a la 80 no se escribe nada. La explicaci{on de esto es porque el Cobol se usaba para programar en tiempos de las tarjetas perforadas que sólo admitían 80 posiciones por tarjeta. De la posición 1 a la 6 se usaba para numerar las tarjetas de código. Esto era muy importante porque se podía caer el fichero de tarjetas y con la numeraci{on se podía reconstituir el deck o fichero. También de la posición 73 a la 80 se usaba para perforar la identificación del programa en cada tarjeta.

Luisfdo.barrantes@gmail.com

Tallian dijo...

No había leído este último comentario hasta ahora!! Muchas gracias por la aclaración. Siempre me han gustado las historias de la época de las tarjetas perforadas :P

YACK dijo...

como conseguir el editor ?