Domina la Declaración y Manipulación de Archivos Relativos en COBOL con Estos Consejos Infaliblespost-template-default single single-post postid-46 single-format-standard et_pb_button_helper_class et_fixed_nav et_show_nav et_secondary_nav_enabled et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db
771 715 4434

Sin duda, las instrucciones con las que cuenta el lenguaje COBOL para manipular la información de archivos son de las más importantes. Con ellas tendremos la oportunidad de abrir, cerrar, leer, guardar información nueva o modificar datos existentes en nuestros archivos.

Los ficheros son archivos de datos donde se almacenan los valores que necesitemos de un programa a nivel de registro, algo parecido a lo que ocurre con los registros de las bases de datos. Aunque COBOL se puede utilizar para procesar otros tipos de archivo de datos, se utiliza generalmente solo para procesar registros.

Conceptos Básicos de Ficheros

¿Qué es un Fichero?

Podríamos definir un fichero como un conjunto de registros. Se usa el término archivo o fichero para almacenar todos aquellos valores que necesitemos en un programa.

Si comparásemos un fichero de COBOL con nuestra vieja agenda de teléfonos, para cada amigo tendríamos los mismos datos, es decir, nombre, teléfono, dirección, etc. El fichero sería toda la agenda, un fichero con el nombre agenda.

¿Qué es un Registro?

El término registro se usa para describir un conjunto de campos que registran información acerca de un solo objeto. El conjunto de todos esos campos para cada amigo sería un registro.

Lea también: IVA 21% Excel

El registro sería el conjunto de información de cada persona, es decir; nombre, teléfono, dirección, código postal, etc.

¿Qué es un Campo?

Cada uno de esos datos es lo que llamamos campo. Usamos el término campo para describir cada información registrada sobre un solo objeto, por ejemplo, teléfono, dirección.

El campo sería cada información independiente que tiene una persona de la agenda, por ejemplo, el nombre es un campo, teléfono sería otro campo, la dirección otro campo más y así sucesivamente. Todos los campos juntos es lo que forma un registro, es decir, la fila entera, que resulta que es toda la información que tenemos de una sola persona u objeto.

¿Qué es una Clave?

Una clave es un campo de nuestra agenda que nos sirve para identificar a cada amigo. En la agenda normal la clave podría ser la lengüeta con la letra del abecedario correspondiente a los apellidos del amigo.

Tipos de Organización de Archivos en COBOL

La organización de un archivo indica cómo se organizan los registros en un archivo, con la finalidad de aumentar la eficiencia de acceso a los mismos. En COBOL hay varios tipos de ficheros, cada uno con sus ventajas y desventajas. Hay esencialmente tres tipos de organización de registros:

Lea también: Guía IVA reducido

  • Archivos Secuenciales: Los registros se organizan y se accede en serie, es decir, de forma secuencial pasando por los registros anteriores para ir a uno específico.
  • Archivos de Acceso Directo o Indexados: En un archivo de acceso directo, los registros se organizan de una manera que permite el acceso directo a un registro determinado sin tener que pasar por ninguno de los registros anteriores. Estos se basan en uno o varios índices, es decir, por una o varias claves.
  • Archivos Relativos: Organización basada en el número relativo de registro.

Un archivo secuencial consta de registros almacenados en el archivo y cuyo acceso a ellos es meramente secuencial. Un archivo secuencial indexado consiste en registros que pueden tener acceso a los datos de forma secuencial y consta de dos partes: Archivo de Datos y Archivo de Índice.

Archivos Relativos

Un archivo relativo consiste en registros ordenados por su dirección relativa. Los registros pueden ser accedidos usando una clave relativa. Los registros pueden ser insertados usando una clave relativa.

Algunas organizaciones son más versátiles que otras; por ejemplo, un archivo con una organización indexada puede tener acceso a sus registros de forma secuencial o de forma directa, pero los registros en un archivo con una organización secuencial solo se pueden acceder de forma secuencial.

Declaración de Archivos en COBOL

Una file debe ser declarada con todas sus características para su procesamiento en el programa de aplicación. Si no se declara, el programa desconoce el archivo. Los programas utilizan estas características para determinar el tipo de archivo, longitud, modo de grabación, etc., y comenzar a procesar el archivo. La definición lógica del archivo es el primer paso obligatorio para introducir un archivo al programa para su procesamiento.

Estas definiciones se declaran en el párrafo FILE-CONTROL dentro de la sección INPUT-OUTPUT SECTION de la ENVIRONMENT DIVISION.

Lea también: ¿Cómo localizar tus XML del SAT?

ENVIRONMENT DIVISION

Se declara la división, una nueva sección (Input-Output), y se declara un fichero mediante FILE CONTROL.

La Cláusula SELECT

La sintaxis de la instrucción SELECT es la siguiente: SELECT NombreFichero ASSIGN TO NombreFicheroExterno.

  • NombreFichero (logical-file-name): Este es el nombre que usamos en el programa para referirnos al archivo. Es como un alias para el archivo físico.
  • NombreFicheroExterno (DSNname): Este es el nombre del dispositivo de 8 caracteres donde se almacena el archivo. Es decir, DDname en JCL o DSName en CICS.
  • ORGANIZATION IS: Especifica la organización del archivo al programa, y las organizaciones de archivo son: SEQUENTIAL, INDEXED y RELATIVE.
  • ACCESS MODE IS: Especifica cómo se accederán los registros. Aparte de los tipos de archivo, hay lo que se denomina modo de acceso: SEQUENTIAL, RANDOM, DYNAMIC.
  • RELATIVE KEY IS: Este campo numérico indica la posición relativa del registro dentro del archivo y debe ser único para cada registro.
  • FILE STATUS IS: Aquí se usa un campo alfanumérico de dos caracteres para guardar el estado del fichero. Por ejemplo, si abriéramos un archivo y este no existiera por algún motivo, o no lo abriera correctamente, almacenaría un código de error en esa variable. El código de error con el que trabajaremos será el “35”. Este número se guarda en la variable que indiquemos en el FILE STATUS, cuando al abrir un fichero este no exista.

Para un archivo de organización relativa, la sintaxis en la cláusula SELECT sería:

SELECT nombre-logico-fichero
    ASSIGN TO "nombre-fisico.dat"
    ORGANIZATION IS RELATIVE
    ACCESS MODE IS {SEQUENTIAL | RANDOM | DYNAMIC}
    RELATIVE KEY IS campo-clave-relativa
    FILE STATUS IS variable-estado-fichero.

DATA DIVISION

La definición de la estructura lógica del archivo tiene la definición de la estructura lógica del archivo que se necesita para procesar los datos en el programa.

  • FD: Se usa para especificar la entrada de descripción del archivo para el logical-file-name. Es la abreviatura de "File Descriptor".
  • LABEL RECORD IS: Especifica si existen registros de etiqueta en el archivo o no, y su tipo.
  • DATA RECORD IS: Asigna un nombre local al registro del archivo.
  • RECORDING MODE IS: Especifica cómo se almacenan los registros en el archivo (ej., F(Fijo), V(Variable), U(Sin Formato), S(Espaciado)).

Después de FD, definimos la estructura para la variable de registro: 01 var1... Declaramos la estructura para la variable. A continuación, definimos cómo se llama el registro y cómo se estructura.

Operaciones Fundamentales con Archivos

Hay varias operaciones para manipular el archivo. En este tipo de archivos debemos tener en cuenta las siguientes instrucciones fundamentales: OPEN, CLOSE, READ, WRITE, REWRITE, DELETE, START.

OPEN

Antes de trabajar con un fichero, hay que asegurarse de abrirlo correctamente para acceder a los datos que pueda contener para trabajar con ellos. Existen 4 formas de abrir un fichero para archivos relativos o indexados:

  • INPUT: Se abre un fichero en modo lectura. Usando esta cláusula se coloca el puntero en el primer registro. Si el fichero no existiera, daría un error, ya que el primer requisito es que el fichero exista.
  • OUTPUT: Se abre un fichero en modo escritura. Usando esta cláusula tiene la peculiaridad de que si no existe lo crea y si existe, lo elimina y vuelve a crearlo. Hay que tener cuidado con esto, ya que crea un nuevo fichero cada vez que lo utilizamos, borrando los datos que pudiéramos tener almacenados.
  • EXTEND: Como su nombre indica, se abre un fichero para extenderlo, es decir, para agregar más registros a los ya existentes. Cuando se abre de esta forma, el puntero se coloca en el último registro para continuar almacenando datos. Obviamente el requisito fundamental es que el fichero exista; si no fuera así, la instrucción OPEN nos mostraría un error.
  • I-O: El archivo se abre en modo lectura/escritura, de forma que podemos agregar, leer, escribir, reescribir o modificar y borrar la información de los registros.

CLOSE

CLOSE es la instrucción contraria a OPEN, es decir, termina la conexión establecida con el archivo. A partir del momento en que aparezca esta instrucción, el archivo no estará disponible para operar con él hasta la próxima vez que se abra.

Se debe siempre asegurar, antes de terminar con un programa, que se cierran debidamente todos los ficheros que hayamos utilizado, ya que de lo contrario pueden grabarse los datos de mala manera y perder el acceso a estos ficheros en el futuro. Es importante apuntar que si finalizamos el programa con la sentencia STOP RUN, los archivos que estuvieran abiertos se cierran automáticamente aunque no se haya especificado la orden CLOSE.

READ

READ es la instrucción que utilizamos para leer registros de un archivo; este debe estar abierto. Una vez que tengamos un fichero abierto, toca usar una instrucción para leer cada registro. Cuando utilizamos esta instrucción, lo que hace es almacenar en la memoria una copia del registro que se está leyendo para trabajar con él.

Hay que tener en cuenta que la lectura en archivos relativos se debe hacer en función del tipo de acceso; si el acceso es secuencial, se lee exactamente igual que los ficheros de organización secuencial. Para acceso directo o dinámico:

READ nombreinternodelfichero [INTO descripción]
    KEY IS clave-relativa
    INVALID KEY instrucciones
END-READ

  • INTO: Indica cuál de las descripciones de registro que hayamos podido declarar será la que almacene los datos del registro leído.
  • KEY IS: Se debe indicar el campo que utilizamos como clave relativa para la consulta.
  • INVALID KEY: Ejecuta las instrucciones expuestas aquí cuando la clave no es válida o el registro no existe.

Tenemos que tener en cuenta que COBOL nos permite mantener más de una descripción de registro para un mismo archivo.

WRITE

Con la instrucción WRITE se consigue grabar la información contenida en ese momento en los campos del registro de un fichero. Es decir, si introducimos una ficha nueva en la agenda con los datos de un nuevo amigo, esta instrucción será la que nos sirva para almacenar en el fichero los datos. A partir de ese momento estarán disponibles tantas veces como queramos para leerla.

WRITE registro [FROM variable]
    INVALID KEY instrucciones
    NOT INVALID KEY instrucciones
END-WRITE

  • FROM: Sirve para realizar una copia en una variable del registro que vayamos a almacenar en el fichero.
  • INVALID KEY: Ocurre cuando se produce un error al grabar el registro en el fichero (por ejemplo, clave duplicada en un archivo relativo si no se permite, o intentar escribir en una posición ya ocupada si el modo de acceso lo restringe).
  • NOT INVALID KEY: Realiza las instrucciones que aquí se exponen cuando no ocurre error alguno al grabar los datos en el archivo.

REWRITE

La instrucción REWRITE se utiliza para regrabar datos de un registro ya existente. Todas las opciones son similares a las de WRITE.

REWRITE registro [FROM variable]
    INVALID KEY instrucciones
    NOT INVALID KEY instrucciones
END-REWRITE

  • FROM: Sirve para realizar una copia en una variable del registro que vayamos a almacenar en el fichero.
  • INVALID KEY: Ocurre cuando se produce un error al regrabar el registro en el fichero.
  • NOT INVALID KEY: Realiza las instrucciones que aquí se exponen cuando no ocurre error alguno al regrabar los datos en el archivo.

DELETE

DELETE es la instrucción para borrar un registro de un fichero. La explicación es corta, pero tiene pocos más matices; lo que conseguimos es borrar todos los datos de un registro. Hay que tener en cuenta que para usar esta instrucción hay que hacer un READ antes.

DELETE nombreinternodelfichero
    INVALID KEY instrucciones
    NOT INVALID KEY instrucciones
END-DELETE

  • INVALID KEY: Ocurre cuando se produce un error al intentar borrar el registro (por ejemplo, si el registro no existe).
  • NOT INVALID KEY: Realiza las instrucciones que aquí se exponen cuando no ocurre error alguno al borrar los datos del archivo.

START

La instrucción START es de suma importancia en el tratamiento de ficheros, y nos sirve para posicionarnos en cualquier parte del mismo para una lectura más rápida. Esta instrucción es esencial en el uso de ficheros relativos con acceso dinámico cuando queremos hacer lecturas secuenciales a partir de una clave específica.

Por ejemplo, si tuviéramos un archivo con muchos registros y solo queremos visualizar a partir de un número de registro determinado, START nos permitiría posicionarnos directamente sin leer los anteriores. Luego, la lectura se hace en un párrafo diferente, ya que si no, siempre estaríamos haciendo el START.

tags: #como #declarar #un #archivo #relativo #en