Manejo de archivos

13. Acceso Aleatorio.

Hasta ahora , hemos visto cómo trabajar con archivos secuenciales, crearlos, escribir , leer y buscar.
Primero diremos que se conoce con el nombre de “record” o “registro” un conjunto de datos que se encuentran en una línea , si hacemos una analogía con una planilla de cálculo sería algo así como una fila, y se llama “campo” o “field”, a cada elemento del arreglo, siguiendo la analogía con la planilla de cálculo, sería como una celda dentro de una fila. Aclarado esto, usaremos estos terminos en esta sección.


Los archivos secuenciales son inapropiados para algunos tipos de aplicaciones, primero por que para acceder a un campo hay que recorrer TODOS los campos y segundo por que para insertar algún dato corremos el riesgo de  sobre escribir algún otro.

Veamos esto con algún ejemplo.
Supongamos que tenemos un archivo del tipo secuencial que contiene los siguiente regis-
tros o records, donde se quiere guardar los siguientes datos.

  • 1 Juan 424555
  • 2 Jorge 423555
  • 3 Pedro 402555
  • 4 Anibal 421555

Esto como es un archivo secuencial en realidad se encuentra dispuesto fisicamente de la
siguente manera:
1 Juan 424555 2 Jorge 423555 3 Pedro 402555 4 Anibal 421555
Bien imaginemos que queremos editar este archivo y modificar el campo teléfono del se-
gundo registro :423555 (teléfono de Jorge), el nuevo dato que nos da Jorge que es un número
de teléfono celular: 15123456. El programa , busca la ocurrencia de ese campo en el archivo,
busca en TODOS los campos!! , cuando encuentra esa cadena de caracteres escribe el nuevo
dato, esto es lo que quedaría de la siguiente manera:
1 Juan 424555 2 Jorge 15123456 Pedro 402555 4 Anibal 421555


Observaciones:

1. Podemos ver que se sobreescribió cierta información que es lo mismo que decir que se
perdió.
2. Otro punto a tener en cuenta es que por ejemplo el nro. de orden de esta simple agenda
que está representado con un dígito , es un sencillo número del tipo int , que por ejemplo
generalmente usa 4 bytes, pero cuando superemos los nueve registros, el nro. será de dos
dígitos , pero aún así seguirá siendo un entero de 4 bytes


Podemos ver con punto 2 de la observación ,que el hecho de que trabajemos con caracteres en un archivo (entiendase con archivos de texto ), no ayuda a resolver nuestros problemas.
Bueno el caso expuesto es un caso sencillo, y expone dos características importantes, una sobre escribir en los archivos de acceso secuencial y otra en particular sobre los archivos de texto de acceso aleatorio.
Dado que C++, no tiene definido nada para manejar el formato de los registros o records y en particular para los campos, es el programa el que tiene que realizar estos controles.
Algo que si nos ayuda de C++, es que dispone de algunas funciones que permiten trabajar sobre una cantidad determinadad de bytes, esto implicitamente quiere decir que al leer no importa el tipo de dato ( char ,1 byte, int 4 bytes) , lo que definitivamente quiere decir que los archivos serán tratados como binarios!!.

Esta condición nos ayudaría con el punto 2 de la observación realizada.