RM/COBOL 85
Contenido.
- Códigos fuente.
- Estructura general del lenguaje.
- Archivos en RM/COBOL 85.
- Reflexiones.
- Enlaces.
- Comentarios.
- Códigos de excepción en RM/COBOL 85.
Programas código fuente incluido en RM/COBOL-85 (Ver. 5.36).
| Descripción | Descarga |
|---|---|
| fechas.zip (5,3 Kb) |
Estructura general de un fuente COBOL.
Un fuente de COBOL está separado en cuatro divisiones, cada una de ellas tiene un propósito específico. Las divisiones están ordenadas en secciones y las secciones en párrafo. Cada división y sección contiene un ámbito, es decir, no se pueden mezclar secciones que pertenecen a una división en otra y las divisiones no pueden estar desordenadas.
IDENTIFICATION DIVISION.
En esta división se declaran todos los datos identificatorios del programa en sí, como ser el autor, el nombre interno del programa, los comentarios, etc... En esta división que es obligatoria la única sección obligatoria es PROGRAM-ID seguido del nombre interno del programa, por ejemplo
Código:
IDENTIFICATION DIVISION.
PROGRAM-ID. HOLAMUND.
ENVIRONMENT DIVISION.
En esta sección se declaran entre otras cosas los encabezados de los archivos de datos usando una sección llamada INPUT-OUTPUT SECTION, párrafo FILE CONTROL.
Un ejemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPTIONAL CLIENTES ASSIGN RANDOM,
"CLIENTES.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE DYNAMIC
RECORD KEY CODIGO-CLIENTE
ALTERNATE RECORD KEY CUIT WITH DUPLICATES
ALTERNATE RECORD KEY NOMBRE-APELLIDO WITH DUPLICATES.
En este ejemplo he declarado un archivo con nombre lógico CLIENTES y nombre físico "clientes.dat" con acceso random (si el sistema operativo lo permite), la organización interna sera indexada (hay que mantener índices) el modo de acceso será dinámico (en COBOL significa que se puede leer secuencialmente o aleatoriamente usando cualquiera de los índices declarados a continuación). La clave principal del archivo es CODIGO-CLIENTE y tiene dos claves secundarias.
Esta división se puede omitir.
La tercera división es DATA DIVISION.
En esta división se declaran las variables del programa, los encabezados de los archivos de datos, la estructura de registros del mismo, las tablas en memoria y las constantes.
Hay dos secciones importantes en esta división, la primera es la FILE SECTION, en ella se declaran todos los registros que pertenecen a los archivos delcarados en el párrafo FILE-CONTROL de la sección INPUT-OUTPUT de la división ENVIRONMENT.
La otra sección es WORKING-STORAGE SECTION, en esta se declaran las variables, constantes y tablas. Todas las variables en COBOL-85 son globales. Siguiendo con el ejemplo anterior:
DATA DIVISION.
FILE SECTION.
FD CLIENTES BLOCK 250 CHARACTERS
RECORD 250 CHARACTERS
LABEL RECORD STANDARD.
01 CLIENTE.
02 CODIGO-CLIENTE PIC 9(5).
02 CUIT PIC X(11).
02 NOMBRE-APELLIDO.
03 NOMBRE PIC X(30).
03 APELLIDO PIC X(30).
WORKING-STORAGE SECTION.
77 ESPERA PIC X.
77 TECLA PIC 99.
77 FLAG PIC X.
En COBOL existen tres tipos de datos principales, numéricos, alfanuméricos y alfabéticos, los primeros se indican con un 9() en la declaración, los segundos con X() y los terceros con A().
La sintaxis de la declaración es:
NIVEL IDENTIFICADOR PICTURE TIPO-DE-DATO.
Donde NIVEL es un número entre el 1 y el 88 e indica la "profundidad" de la variable. Las variables entre los niveles 1 y 49 indican que se trata de una estructura de datos siendo la de mayor nivel el 01 (como se ve en la declaración del registro de cliente) esto significa que se puede referenciar un conjunto de datos con un solo identificador. Las variables de nivel entre 77 y 87 son variables independientes. Los identificadores de nivel 88 son constantes y se declaran obligatoriamente como sigue:
88 ESTO-ES-UNA-CONSTANTE PIC 9(3) VALUE 100.
La cláusula VALUE indica qué valor tomará la constante. En los identificadores de los otros niveles también se puede usar la cláusula VALUE para inicializalos a algún valor (sin embargo no se permite esta cláusula en la declaración de registro de archivos).
Las variables en COBOL se almacenan en formato BCD (código decimal binario) es decir, en base 10 y ocupan un byte por cada espacio de memoria; el rango de valores está dado por la propia definición, por ejemplo.
77 NOMBRE PIC X(20).
Ocupa 20 bytes en memoria *sin importar qué contenga la variable*. Para el caso de los datos numéricos (PIC 9()) también sucede lo mismo.
Por ejemplo:
77 NUMERO-ENTERO PIC 9(3).
Ocupa 3 bytes y puede almacenar un valor entre cero y 999. Si se le asigna un valor que excede el rango permitido por la declaración el valor se trunca por la izquierda en su valor literal, por ejemplo:
MOVE 1000 TO NUMERO-ENTERO.
Aquí NUMERO-ENTERO tomará el valor cero.
Es posible declarar variables de tipo numérico real sin signo como sigue:
77 NUMERO-REAL-SIN-SIGNO PIC 9(3)V99.
La "V" indica la posición de la coma decimal.
También es posible declarar un tipo numérico real con signo como sigue:
77 NUMERO-REAL-CON-SIGNO PIC S9(3)V99.
La "S" indica que se debe reservar un lugar para almacenar el signo.
El largo de los identificadores es ilimitado pero solo los primeros 30 caracteres son significativos. No pueden comenzar con números pero sí contenerlos, todas las letras son válidas más el guión.
Finalmente tenemos la PROCEDURE DIVISION.
Que es la división donde se escribe la parte "ejecutable" del programa. No está dividida en secciones sino en párrafos. Cada párrafo tiene un identificador único asignado por el usuario. Toda PROCEDURE DIVISION debe tener al menos un párrafo. Por ejemplo:
PROCEDURE DIVISION.
COMIENZO.
...sentencias...
Los nombres de párrafos son arbitrarios y sirven como puntos de saltos dentro del programa.
Ahora sí podemos crear un programa bien básico, este es el código:
IDENTIFICATION DIVISION.
PROGRAM-ID. HOLAMUND.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 ESPERA PIC X.
77 TECLA PIC 99.
PROCEDURE DIVISION.
COMIENZO.
DISPLAY "Hola mundo!, por favor presiona una tecla".
ACCEPT ESPERA NO BEEP ON EXCEPTION TECLA NEXT
SENTENCE.
DISPLAY "La tecla que presionaste fue: ".
DISPLAY TECLA.
EXIT PROGRAM.
STOP RUN.
Después de mi explicación espero que les resulte obvio lo que hace este programa.
Reflexiones acerca de COBOL.
COBOL es, por llamarlo de alguna manera "el decano de los lenguajes de bases de datos", de hecho su nombre ya determina cuál es su uso principal, COBOL, COmmon Business Oriented Languaje, es decir, Lenguaje Común Orientado a Negocios, y todos sabemos que cualquier aplicación de negocios hace un uso intenso de bases de datos. COBOL nació allá por el año 1960 a raíz de una comisión organizada por el gobierno de EEUU y las principales empresas de la industria de la computación de aquella epoca tal como IBM, Rand y Honeywell, llamada CODASYL. La intención de esta comisión era establecer un estandar para un lenguaje orientado a los negocios, de allí nace el COBOL 60 asi como el ALGOL 60, un lenguaje orientado al calculo cientifico (del cual nacería Pascal). En 1968 otra comisión, esta vez la ANSI, revisa al COBOL y establece el estandar 68 que luego devino en el estandar 74, este último planteó muy acertadamente a mi juicio, la implementación de la programación procedimental al lenguaje COBOL (los PERFORM, bah). Finalmente, en 1985 la ANSI saca un nuevo estandar para el lenguaje que es el que rige actualmente (hubo algunas mejoras y afinamientos en 1989). Entre los grandes logros de este lenguaje pueden contarse que es el lenguaje que mas lineas en ejecución tiene en el mundo, ser el mas confiable para grandes aplicaciones de negocios y el lenguaje que mas plataformas soporta, siendo a la vez un estandar casi dogmatico a todos los niveles. Como curiosidad, el gobierno de EEUU a partir del nacimiento de COBOL estableció que para que un aparato electronico pueda llamarse computadora DEBE poder ejecutar un programa COBOL, es por eso que aparatos que hoy sabemos implicitamente que son computadoras, tal como los handheld, no llevan ese nombre pues no existen compiladores y/o interpretes de COBOL para esos aparatos. Quizas el mayor exito de COBOL sea su portabilidad a nivel de código fuente (y en algunos casos hasta de codigo ejecutable), el mismo fuente casi sin modificaciones puede ser llevado de un sistema operativo a otro y de una arquitectura a otra. El concepto de diseño de bases de datos que nació con COBOL hasta hoy en día es materia de estudio en universidades y muchas de ellas aún enseñan COBOL como lenguaje.
En 1990 IBM anunció tajantemente que declaraba a COBOL un lenguaje "muerto", eso significaba que ya nadie lo usaría en el futuro, también anunció que dejaría de dar soporte para él (y asi lo hizo, ese año IBM vendió su compilador a una empresa pequeña). Ironicamente poco después al lanzar su linea de minicomputadoras AS/400 incluyó COBOL como uno de los cuatro lenguajes estandar del mismo (junto con C, RPG y Pascal). Desde ese anuncio todo aquel que se declaraba "programador en COBOL" ha llevado el mote de "anticuado" y "sin futuro". Para empeorar las cosas el lanzamiento de sistemas operativos con entorno gráfico y la revolución de la programación orientada a objetos llevó casi a la extinción a COBOL, relegado unicamente a arcaicos mainframes y a oficinas de procesamiento de datos con un monton de "gurus" revolviendo fuentes con mas de 20 años. Parecia que finalmente COBOL tenia sus dias contados. Pero, las pequeñas empresas que aún se sostenian gracias a la venta y soporte de compiladores COBOL, tales como Liant, Accu y Fujitsu, se dieron cuenta de esto y cada uno por su lado empezó a transformar a COBOL en un lenguaje moderno, mas acorde a los tiempos que pasan. El mayor problema que debian enfrentar es la bendita compatibilidad hacia atrás y esto no es una cosa trivial para un lenguaje con casi 40 años de antigüedad en aquella época. Pero si bien estas empresas pusieron a COBOL en la primera linea otra vez surgió un problema nuevo, COBOL, como ya antes dije, sobresalia por su portabilidad, como cada empresa se las arregló a su manera destruyeron en pocos años lo que se habia logrado con decadas de minuciosos estandares y reuniones de empresas de la industria. Hoy en día, los modernos compiladores de COBOL, Objective Cobol, PowerCobol, WOW no son ni remotamente compatibles entre sí, y algunos ni siquiera son multiplataforma. Para empeorar las cosas no hay intención, siendo Ocubre de 2001 cuando escribo esto, de volver a revisar a COBOL como lenguaje y establecer un estandar para la programación en entorno gráfico.
Todo esto me lleva a pensar que COBOL dejará de existir como tal y pasará a ser otra cosa, multitud de pseudocoboles surgirán, ya que ninguna empresa querrá tirar abajo lo que han desarrollado para apegarse a un futuro estandar que quizas nunca llegue, sumado a que las soluciones propietarias nunca hicieron mella en la industria del software, tal vez IBM sabia de lo que hablaba cuando declaró al COBOL un lenguaje muerto.
Actualización! El grupo de trabajo de la ANSI encargada de establecer los estandares para COBOL, llamado J4 ya tiene el borrador para el COBOL ANSI 2002, entre sus cosas mas resaltables está la inclusión de la programación orientada a objetos, esto pondrá a COBOL nuevamente en el estado del arte de la programación. El nuevo estandar tiene como fecha tentativa de publicación Julio de 2002. Para más información dirigirse a www.cobolstandards.com o bién a http://www.ncits.org/tc_home/j4.htm
Actualización! Ya está aprobado el estandar ANSI 2002.
Enlaces.
- COBOL en español. Imprescindible página sobre COBOL totalmente en espanol.
Comentarios
|
|
Agregar comentario |
|
83.50.75.54 Domingo, 17 de Octubre de 2010 a las 09:00:39 Por: Marie
Hola, necesitaria modelos de ejemplos sencillos de consulta, modificación, borrado y listado del programa cobol, gracias.
|
|
190.132.80.133 Lunes, 23 de Agosto de 2010 a las 17:01:45 Por: Enrique
Tengo programas en rm/cobol 84-85 versión 2.1a.
quisiera saber si existe algun programa de conversión, que tome los fuenes de ese cobol y los convierta a otro lenguaje o a otro cobol para ambiene windows |
|
186.28.116.252 Martes, 29 de Junio de 2010 a las 23:14:36 Por: Juan Corredor (juanelaspero@hotmail.com)
me gusto mucho la explicacion!!! stubo muy buena, me gustaria saber mas, si alguien pudiera ayudarme ocn manueales, se lo agradezco....
|
|
64.76.174.10 Lunes, 24 de Agosto de 2009 a las 18:59:49 Por: Christian
uf !!! después de casi 11 años. llegue a una empresa que tiene cobol y ahora tengo que aprender... despues de estar casi 12 años trabajando con genexus.... uf !!! algun manual, tutorial,tips !!! help !!!
Salu2.- |
|
88.2.223.253 Lunes, 13 de Julio de 2009 a las 08:35:56 Por: Carlos
Buenas. Mi problema con cobol es que tengo una serie de archivos .idx y .dat de los cuales no conozco su estructura y necesito recuperar la información contenida en los mismos. ¿Por dónde empiezo? Estoy bastante perdido...
|
|
190.25.225.131 Viernes, 26 de Junio de 2009 a las 16:06:56 Por: Sarita
Necesito verificar la fecha de modificación de un archivo .gnt es decir un ejecutable de Micro focus NetExpres, de tal manera que pueda hacer validaciónes en el Menu. El menu tambien esta desarrollado en MicroFocus y la idea es validar el programa que se va a ejecutar con la fecha de la ultima actualizaciòn del programa.
Muchas gracias si me pueden ayudar. |
|
201.229.169.62 Domingo, 31 de Mayo de 2009 a las 21:48:45 Por: Mike
tengo una archivo donde cobol guarda la data el archivo es binario como puedo saber la estructura del archivo osea sabe como estan compuesto los campos
|
|
200.88.190.137 Viernes, 22 de Mayo de 2009 a las 22:18:10 Por: Norberto
Muy buena tu explicacion sobre el cobol
|
|
200.45.119.110 Domingo, 22 de Febrero de 2009 a las 15:44:26 Por: Curulo
Tengo un ABM y cuando lo quiero compilar me da este error.
OPEN ERROR FOR FILE ABM****. PODRIAS DECIRME DONDE TENGO EL ERROR GRACIAS. ME INTERESARIA LOS MANUALES .OK. GRACIAS. |
|
200.84.201.227 Miércoles, 21 de Enero de 2009 a las 12:07:22 Por: Enmascarado
SAS que por queria de ayuda
|
|
200.121.223.33 Lunes, 19 de Enero de 2009 a las 17:05:04 Por: Hector
Excelente tu explicación y el detalle de los ejemplos, sobretodo para los que programan en cobol o desean conocer sobre este compilador. Mis felicitaciones y agradecimientos por tu aporte
|
|
83.50.179.175 Miércoles, 24 de Diciembre de 2008 a las 09:51:35 Por: Campiki
Para JoeAccion.
Para vaciar una archivo de RmCobol sólo debes hacer un OPEN OUTPUT archivo. Para pasar una dat a txt o excel. Create un archivo organization line sequential, y entre campo y campo de este, crea un campo adicional PIC X. Haces lectura sequencial del archivo origen, grabando en el destino, a cada campo adicional creado le pasas un valor p.ej ":". Este archivo creado lo puedes capturar en excel sin problema. Espero haberte ayudado aunque algo tarde. Campiki |
|
189.142.146.177 Viernes, 21 de Noviembre de 2008 a las 16:31:13 Por: Joeaccion
Vaciar un archivo Dat creado por RMcobol. ( mi experiencia en Cobol es nula )
Deseo pasar un archivo Dat a Txt o Excel lo que sea mas fácil, como puedo hacerlo? hay una utileria gratuita? puede ser por medio de Excel? tendras un programa base para modificarlo, correrlo y me pueda mandar mi información? Gracias por toda la ayuda que me puedan dar. |
|
201.228.170.208 Sábado, 13 de Septiembre de 2008 a las 12:15:23 Por: Victor
Tengo un problema con RMCOBOL /85 ver. 5.36 cuando utilizo el ACCEPT (VARIABLE) FROM TIME. Cuando la rutina vuelve a pasar por ese comando a veces se queda la hora anterior. Por ejemplo si en el computador la HOra es 10:30 am me deja la hora del hace 15 minutos me marca las 10;15 am. este programa es para el control de ingresos y salidas de vehiculos de un parqueadero. Al tomar mal la hora liquida mal elprecio del servicio. Alguien me podría a yudar?
|
|
190.100.158.6 Viernes, 25 de Abril de 2008 a las 00:04:32 Por: Pedro (pedrocortesd@hotmail.com)
Alguien tiene la rutina para generar codigos de barra en cobol. si la tuvieran porfavor, se los agradeceria muchisimo...
Gracias |
|
190.42.230.43 Domingo, 06 de Abril de 2008 a las 01:17:22 Por: Victor
Muy buena explicacion
Soy cobolero todavia trabajo con la version 5.2 y por exigencias del mercado estoy tratando de pasarloa powercobol 5 que es el que me parece se semeja mas a la version anterior, pero tengo problemas para majesjar el detalle de un documento, es decir, donde van los item, he probado con tablas, creando lineas de texto, etc.pero nada, a ver si alguien me da alguna sujerencia, por lo demas todo bien |
|
190.31.115.236 Martes, 25 de Marzo de 2008 a las 00:35:22 Por: Seba
BUENA EXPLICACION.
GRACIAS |
|
201.223.92.222 Lunes, 17 de Marzo de 2008 a las 02:27:31 Por: Ortografia
A Sebastian:
eSplicacion = eXplicacion haVer = haBer Espero que te ayude a no cometer la misma falta. Saludos. |
|
201.250.103.30 Lunes, 10 de Marzo de 2008 a las 11:48:30 Por: Sebastian
bien echo la esplicación de como se conformma una ABM.
Yo necesitaría si me pueden ayudar,como se hace un ejercicio donde se usa el caso especial de ABM, es decir no va a haver (altas-bajas-mod),es todo modificaciones;por ejemplo q un ejerc. pida calcular el ingreso y egreso de mercadería?., ese es uno.y su estructura de: archivo original y archivo con la actualización no son iguales, el q va a actualizar al original tiene mas campos. |
|
200.117.29.77 Viernes, 07 de Marzo de 2008 a las 11:07:00 Por: Fabian (fabianconte@yahoo.com.ar)
hola trabajo con microfocus cobol y quisiera usar algo que pueda graficar o usar el mouse habra algo compatible con esto ... gracias espero alguna repuesta de alquien
|
|
201.140.160.177 Martes, 04 de Marzo de 2008 a las 03:40:46 Por: Erick
apenas empiezo a utilizar cobol es buen programa
saludos |
|
201.228.129.42 Viernes, 29 de Febrero de 2008 a las 17:52:23 Por: Luis Miguel Figueroa
solicito la descarga del compilador y utilitarios de: powercobol version 5, objetive cobol
|
|
200.8.110.107 Martes, 15 de Enero de 2008 a las 16:27:53 Por: Beyker (beykerpreteroti@hotmail.con)
porf cual es la sentencia para el sato de paguina
|
|
190.137.199.44 Martes, 18 de Septiembre de 2007 a las 15:08:07 Por: Luis Casiello
Estoy probando FujitsuCobol y me esta interesando bastante....no pude hacer funcionar Fuji con base de datos....Algun ejemplo a mano para poder aprender??? Gracias a quien lo provea!!!
|
|
146.82.88.135 Miércoles, 08 de Agosto de 2007 a las 18:06:02 Por: Giani
pucha estoy super complicada con cobol....
quien me puede indicar donde sacar un buen manual please es urgente!!!!!!
|
|
209.124.116.248 Jueves, 24 de Mayo de 2007 a las 17:37:56 Por: Ronald
Cuales son las cuatro Divisiones que tiene COBOL
|
|
200.85.222.70 Viernes, 18 de Mayo de 2007 a las 10:51:53 Por: Victor Muñoz
Hola
encontre esta pagina por casulaidad, me alegra que todavia querdemos COBOLIANOS de corazon, ha de tener en cuenta que el el COBOL es mas viejo que el Hilo negro y todavia funciona.....GRACIAS COBOL, nosotros trabajamos todo en Cobol y otras aplicaciones pero la empresda basicamenbte se maneja en COBOL ....Gracias felkicidades...
CHILE
|
|
190.31.223.82 Jueves, 17 de Mayo de 2007 a las 15:34:07 Por: Mauricio Mss
hola, estoy haciendo un programa de liquidacion de sueldos. yo quiero guardar una formula en la base de datos; tipo= (total*cant)/algo.
y despues leer los datos de una persona y esjecutar la formula. si alguien sabe como hacerlo le dejo mi mail pra que me informen. desde ya gracias. mauriciomss@hotmail.com
|
|
190.74.201.229 Martes, 01 de Mayo de 2007 a las 22:35:20 Por: Andres Eloy Vnzla
Si de hecho es de los mejores para trabajar todo tipo de archivos y muy usado en bancos. solo soy estudiante y hay pocas pag de cobol quisiera pedir dos tipos de programas mas complejos 1 como trabaja con vectores y otro con archivos indexados leidos desde una base de datos gracias si es esto posible me ayudarias mucho = P
|
|
200.82.57.20 Sábado, 28 de Abril de 2007 a las 01:40:36 Por: Diego Romero
Roberto A.
Hombre, acá no hay malos comentarios acerca de COBOL y créeme que a mi también me gusta, me ha dado de comer los últimos 10 años :D.
Si no, no tendría esta página dedicada a COBOL ;).
|




