Concepto de fichero

La jerarquía de datos

Podemos establecer una jerarquía para los distintos tipos de datos, organizándolos en diferentes niveles:

  • Bit: Su valor es 0 o 1. Es la unidad mínima de información.

  • Byte: 8 bits: Pueden usarse para almacenar caracteres o números pequeños

  • Campo: Grupo de bytes con un significado, por ejemplo, un nombre de persona, un entero, un real

  • Registro: Un grupo de campos relacionados. Por ejemplo, los campos nombre, apellidos, edad y DNI pueden ser un registro para describir a una persona en un contexto determinado. En C++, un registro se programa con una clase, class. No programaremos clases en este curso, pero vector<T> es un buen ejemplo de clase que venimos utilizando.

  • Fichero: Un grupo de campos o registros relacionados.

  • Base de datos: Un grupo de ficheros relacionados. Hablaremos sobre ellas en la parte de Fundamentos de Informática.

Ficheros

Un fichero o archivo es una colección ordenada de datos que tienen entre sí una relación y que se almacenan de forma permanente en un dispositivo de memoria no volátil.

En este contexto, permanente quiere decir que, salvo fallos catastróficos o hasta que sean borrados a propósito, estos datos permanecen en el medio en que se almacenan (medios magnéticos o de otro tipo) y continúan existiendo después de que el programa que los creó deja de ejecutarse, incluso después de apagar el ordenador.

Esto marca la diferencia con los datos que son provisionalmente almacenados en la memoria RAM, la memoria volátil del ordenador, que no sobreviven al programa que los crea y mucho menos a la desconexión del computador.

Utilidad de los ficheros

El concepto de fichero es una abstracción del Sistema Operativo (S.O.) que, de forma transparente al programador, utiliza los recursos del hardware creando sobre ellos una estructura lógica para representarlos, facilitando a los lenguajes de programación el uso de interfaces de usuario simples y versátiles.

El Sistema Operativo crea todo el sistema de ficheros del ordenador: los directorios para organizarlos, las tablas para localizarlos en el disco, etc.

Los ficheros son enormemente importantes en programación. No sólo debido al hecho evidente de que brindan el soporte que permite la mera existencia de las aplicaciones en el disco duro. Si no existieran los ficheros, por ejemplo, toda la interacción del usuario con una aplicación concreta, como la introducción y la obtención de resultados parciales, tendría que ser laboriosamente recreada cada vez que se ejecutara el programa. La existencia del fichero hace posible que, al terminar una sesión de trabajo, se almacenen los datos y resultados en el disco, para poder retomar la tarea en una sesión posterior.

Por otra parte, los ficheros son útiles como vehículos para el intercambio de información entre diferentes aplicaciones: los datos resultantes escritos en un fichero por el programa A podrán servir como entrada de un programa B. Huelga comentar el masivo sistema de distribución de documentos a través de Internet.

El formato

Un fichero tiene un formato predefinido, conocido de antemano, lo que permite su lectura y/o escritura siguiendo unas pautas preestablecidas.

Ejemplo Para almacenar matrices de números se ha decidido utilizar ficheros que siguen el siguiente formato:

  • Los dos primeros valores son el tamaño en filas (fil) y columnas (col) de la matriz

  • A continuación, aparecen en el fichero los fil*col valores de la matriz separados por espacios en blanco (incluidos tabuladores, retornos de línea, etc.)

Por ejemplo, si deseamos almacenar con ese formato la matriz:

\[\begin{split}\begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}\end{split}\]

cualquier variante similar a las tres mostradas en la siguiente figura sería válida:

../../_images/ficheros1.jpg

Tres ficheros (Bloc de notas) con el mismo formato de la misma matriz

Otro formato podría utilizar el carácter retorno de línea para diferenciar las filas:

../../_images/ficheros2.jpg

Dos ficheros (Bloc de notas) con el mismo formato de la misma matriz

Lo relevante de estos dos ejemplos es que, para una correcta lectura o escritura de la matriz, el formato del fichero debe ser conocido de antemano.

Un inconveniente del segundo formato es que, cuando se lee el archivo, el tamaño de la matriz no se conoce hasta que se ha completado la lectura.

Los sistemas operativos utilizan la extensión de los ficheros (pdf, docx, ppt, cbp, cpp, etc.) para asociar al proceso de lectura del archivo la aplicación informática adecuada. Y, por supuesto, la aplicación abrirá correctamente el archivo si el formato es el idóneo.

Tipos de ficheros

Como hemos comentado, el contenido y la estructura de un fichero responde a un criterio de diseño libre, elegido por el desarrollador de una aplicación.

En cualquier caso, en relación a la forma en que los datos son almacenados, los ficheros podríamos clasificarlos como:

  • Ficheros binarios: Contienen una representación exacta del contenido binario de los datos, ceros y unos. Por tanto, no son directamente editables.

    Ejemplo: Representación de 3 números enteros int, 255, 3, y 10 en complemento a 2.

    ¡Cada entero ocupa el mismo número de bytes: 4!

    ../../_images/fichero_binario.jpg

    Fichero binario

  • Ficheros de texto: Los datos están representados con los caracteres alfanuméricos que los representan. Pueden ser leídos y modificados a través de un editor de texto.

    Ejemplo: Representación de 3 números enteros 255, 3 y 10 cuyas cifras están codificadas en ASCII. Los números se separan por un espacio en blanco (20H en ASCII) para poder diferenciarlos.

    ¡Cada entero ocupa un número de bytes distinto!

    ../../_images/fichero_texto.jpg

    Fichero texto

En este curso trabajaremos con ficheros de texto. Vamos a ver que el trabajo con los ficheros de texto es esencialmente análogo al trabajo con entrada/salida convencional a través del teclado y la pantalla.

Los ficheros binarios son también extremadamente útiles. Una vez comprendido el funcionamiento de los ficheros tipo texto, el alumno que desee ampliar conocimientos no tendrá ninguna dificultad en utilizarlos.