Archivos y Ficheros

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

CAPÍTULO 9

Archivos (ficheros)

9.1. Archivos y flujos (stream): La jerarquía de 9.10. Procesamiento de archivos directos (algo-
datos ritmos)
9.2. Conceptos y definiciones = terminología 9.11. Procesamiento de archivos secuenciales
9.3. Soportes secuenciales y direccionables indexados
9.4. Organización de archivos 9.12. Tipos de archivos: consideraciones prácticas
9.5. Operaciones sobre archivos en C/C++ y Java
9.6. Gestión de archivos ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
9.7. Flujos CONCEPTOS CLAVE
9.8. Mantenimiento de archivos RESUMEN
9.9. Procesamiento de archivos secuenciales EJERCICIOS
(algoritmos)

INTRODUCCIÓN
Los datos que se han tratado hasta este capítulo y namiento secundario, tales como cintas y discos mag-
procesados por un programa pueden residir simultá- néticos. Estas colecciones de datos se conocen como
neamente en la memoria principal de la computadora. archivos (ficheros). Las técnicas requeridas para ges-
Sin embargo, grandes cantidades de datos se alma- tionar archivos son diferentes de las técnicas de orga-
cenan normalmente en dispositivos de memoria auxi- nización de datos que son efectivas en memoria prin-
liar. Las diferentes técnicas que han sido diseñadas cipal, aunque se construyen sobre la base de esas
para la estructuración de estas colecciones de datos técnicas. Este capítulo introductorio está concebido
complejas se alojaban en arrays; en este capítulo se para la iniciación a los archivos, lo que son y sus mi-
realiza una introducción a la organización y gestión siones en los sistemas de información y de los proble-
de datos estructurados sobre dispositivos de almace- mas básicos en su organización y gestión.
308 Fundamentos de programación

9.1. ARCHIVOS Y FLUJOS (STREAM): LA JERARQUÍA DE DATOS

El almacenamiento de datos en variables y arrays (arreglos) es temporal; los datos se pierden cuando una variable
sale de su ámbito o alcance de influencia, o bien cuando se termina el programa. La mayoría de las aplicaciones
requieren que la información se almacene de forma persistente, es decir que no se borre o elimine cuando se termina
la ejecución del programa. Por otra parte, en numerosas aplicaciones se requiere utilizar grandes cantidades de infor-
mación que, normalmente, no caben en la memoria principal. Debido a estas causas se requiere utilizar archivos
(ficheros) para almacenar de modo permanente grandes cantidades de datos, incluso después que los programas que
crean los datos se terminan. Estos datos almacenados en archivos se conocen como datos persistentes y permanecen
después de la duración de la ejecución del programa.
Las computadoras almacenan los archivos en dispositivos de almacenamiento secundarios, tales como discos CD,
DVD, memorias flash USB, memorias de cámaras digitales, etc. En este capítulo se explicará cómo los programas
escritos en un lenguaje de programación crean, actualizan o procesan archivos de datos.
El procesamiento de archivos es una de las características más importantes que un lenguaje de programación debe
tener para soportar aplicaciones comerciales que procesan, normalmente, cantidades masivas de datos persistentes.
La entrada de datos normalmente se realiza a través del teclado y la salida o resultados van a la pantalla. Estas ope-
raciones, conocidas como Entrada/Salida (E/S), se realizan también hacia y desde los archivos.
Los programas que se crean con C/C++, Java u otros lenguajes necesitan interactuar con diferentes fuentes de
datos. Los lenguajes antiguos como FORTRAN, Pascal o COBOL tenían integradas en el propio lenguaje las entra-
das y salidas; palabras reservadas como PRINT, READ, write, writeln, etc, son parte del vocabulario del lenguaje.
Sin embargo, los lenguajes de programación modernos como C/C++ o Java/C# tienen entradas y salidas en el len-
guaje y para acceder o almacenar información en una unidad de disco duro o en un CD o en un DVD, en páginas de
un sitio web e incluso guardar bytes en la memoria de la computadora, se necesitan técnicas que pueden ser diferen-
tes para diferente dispositivo de almacenamiento. Afortunadamente, los lenguajes citados anteriormente pueden al-
macenar y recuperar información, utilizando sistemas de comunicaciones denominados flujos que se implementan
en bibliotecas estándar de funciones de E/S (en archivos de cabecera stdio.h y cstdio.h) en C, en una biblioteca
estándar de clases (en archivos de cabecera iostream y fstream) en C++, o en el paquete Java.io en el lenguaje
Java.
Las estructuras de datos enunciadas en los capítulos anteriores se encuentran almacenadas en la memoria central
o principal. Este tipo de almacenamiento, conocido por almacenamiento principal o primario, tiene la ventaja de su
pequeño tiempo de acceso y, además, que este tiempo necesario para acceder a los datos almacenados en una posición
es el mismo que el tiempo necesario para acceder a los datos almacenados en otra posición del dispositivo —memo-
ria principal—. Sin embargo, no siempre es posible almacenar los datos en la memoria central o principal de la
computadora, debido a las limitaciones que su uso plantea:

• La cantidad de datos que puede manipular un programa no puede ser muy grande debido a la limitación de la
memoria central de la computadora1.
• La existencia de los datos en la memoria principal está supeditada al tiempo que la computadora está encendi-
da y el programa ejecutándose (tiempo de vida efímero). Esto supone que los datos desaparecen de la memoria
principal cuando la computadora se apaga o se deja de ejecutar el programa.

Estas limitaciones dificultan:

• La manipulación de gran número de datos, ya que —en ocasiones— pueden no caber en la memoria principal
(aunque hoy día han desaparecido las limitaciones que la primera generación de PC presentaba con la limitación
de memoria a 640 KBytes, no admitiéndose información a almacenar mayor de esa cantidad en el caso de
computadoras IBM PC y compatibles).
• La transmisión de salida de resultados de un programa pueda ser tratada como entrada a otro programa.

1
En sus orígenes y en la década de los ochenta, 640 K-bytes en el caso de las computadoras personales IBM PC y compatibles. Hoy día
esas cifras han sido superadas con creces, pero aunque las memorias centrales varían, en computadoras domésticas, portátiles (laptops) y de es-
critorio, entre 1 GB y 4 GB, la temporalidad de los datos almacenados en ellas aconseja siempre el uso de archivos para datos de carácter perma-
nente.
Archivos (ficheros) 309

Para poder superar estas dificultades se necesitan dispositivos de almacenamiento secundario (memorias externas
o auxiliares) como cintas, discos magnéticos, tarjetas perforadas, etc., donde se almacenará la información o datos
que podrá ser recuperada para su tratamiento posterior. Las estructuras de datos aplicadas a colección de datos en
almacenamientos secundarios se llaman organización de archivos. La noción de archivo o fichero está relacionada
con los conceptos de:

• Almacenamiento permanente de datos.


• Fraccionamiento o partición de grandes volúmenes de información en unidades más pequeñas que puedan ser
almacenadas en memoria central y procesadas por un programa.

Un archivo o fichero es un conjunto de datos estructurados en una colección de entidades elementales o básicas
denominadas registros o artículos, que son de igual tipo y constan a su vez de diferentes entidades de nivel más bajo
denominadas campos.

9.1.1. Campos
Un campo es un item o elemento de datos elementales, tales como un nombre, número de empleados, ciudad, núme-
ro de identificación, etc.
Un campo está caracterizado por su tamaño o longitud y su tipo de datos (cadena de caracteres, entero, lógico,
etcétera.). Los campos pueden incluso variar en longitud. En la mayoría de los lenguajes de programación los campos
de longitud variable no están soportados y se suponen de longitud fija.

Campos

Fecha
Nombre Dirección Estudios Salario Trienios
de nacimiento

Figura 9.1. Campos de un registro.

Un campo es la unidad mínima de información de un registro.


Los datos contenidos en un campo se dividen con frecuencia en subcampos; por ejemplo, el campo fecha se di-
vide en los subcampos día, mes, año.

Campo 0 7 0 7 1 9 9 5

Subcampo Día Mes Año

Los rangos numéricos de variación de los subcampos anteriores son:

1 ≤ día ≤ 31
1 ≤ mes ≤ 12
1 ≤ año ≤ 1987

9.1.2. Registros
Un registro es una colección de información, normalmente relativa a una entidad particular. Un registro es una co-
lección de campos lógicamente relacionados, que pueden ser tratados como una unidad por algún programa. Un
ejemplo de un registro puede ser la información de un determinado empleado que contiene los campos de nombre,
dirección, fecha de nacimiento, estudios, salario, trienios, etc.
Los registros pueden ser todos de longitud fija; por ejemplo, los registros de empleados pueden contener el mis-
mo número de campos, cada uno de la misma longitud para nombre, dirección, fecha, etc. También pueden ser de
longitud variables.
310 Fundamentos de programación

Los registros organizados en campos se denominan registros lógicos.

Registro de datos

N
N = longitud del registro

Figura 9.2. Registro.

Nota
El concepto de registro es similar al concepto de estructura (struct) estudiado en el Capítulo 7, ya que ambas
estructuras de datos permiten almacenar datos de tipo heterogéneo.

9.1.3. Archivos (ficheros)


Un fichero (archivo) de datos —o simplemente un archivo— es una colección de registros relacionados entre sí con
aspectos en común y organizados para un propósito específico. Por ejemplo, un fichero de una clase escolar contiene
un conjunto de registros de los estudiantes de esa clase. Otros ejemplos pueden ser el fichero de nóminas de una
empresa, inventarios, stocks, etc.
La Figura 9.3 recoge la estructura de un archivo correspondiente a los suscriptores de una revista de informá-
tica.

Registro 4

Registro 3

Registro 2

Registro 1 Nombre Profesión Dirección Teléfono Ciudad

Figura 9.3. Estructuras de un archivo “suscriptores”.

Un archivo en una computadora es una estructura diseñada para contener datos. Los datos están organizados de
tal modo que puedan ser recuperados fácilmente, actualizados o borrados y almacenados de nuevo en el archivo con
todos los campos realizados.

9.1.4. Bases de datos


Una colección de archivos a los que puede accederse por un conjunto de programas y que contienen todos ellos da-
tos relacionados constituye una base de datos. Así, una base de datos de una universidad puede contener archivos de
estudiantes, archivos de nóminas, inventarios de equipos, etc.

9.1.5. Estructura jerárquica


Los conceptos carácter, campos, registro, archivo y base de datos son conceptos lógicos que se refieren al medio en
que el usuario de computadoras ve los datos y se organizan. Las estructuras de datos se organizan de un modo jerár-
quico, de modo que el nivel más alto lo constituye la base de datos y el nivel más bajo el carácter.
Archivos (ficheros) 311

9.1.6. Jerarquía de datos

Una computadora, como ya conoce el lector (Capítulo 1), procesa todos los datos como combinaciones de ceros y
unos. Tal elemento de los datos se denomina bit (binary digit). Sin embargo, como se puede deducir fácilmente, es
difícil para los programadores trabajar con datos en estos formatos de bits de bajo nivel. En su lugar, los programa-
dores prefieren trabajar con caracteres tales como los dígitos decimales (0-9), letras (A-Z y a-z) o símbolos espe-
ciales (&, *, , @, €, #,...). El conjunto de todos los caracteres utilizados para escribir los programas se denomina
conjunto o juegos de caracteres de la computadora. Cada carácter se representa como un patrón de ceros y unos. Por
ejemplo, en Java, los caracteres son caracteres Unicode (Capítulo 1) compuestos de 2 bytes.
Al igual que los caracteres se componen de bits, los campos se componen de caracteres o bytes. Un campo es
un grupo de caracteres o bytes que representan un significado. Por ejemplo, un campo puede constar de letras ma-
yúsculas y minúsculas que representan el nombre de una ciudad.
Los datos procesados por las computadoras se organizan en jerarquías de datos formando estructuras a partir de
bits, caracteres, campos, etc.
Los campos (variables de instancias en C++ y Java) se agrupan en registros que se implementan en una clase en
Java o en C++. Un registro es un grupo de campos relacionados que se implementan con tipos de datos básicos o
estructurados. En un sistema de matrícula en una universidad, un registro de un alumno o de un profesor puede cons-
tar de los siguientes campos:

• Nombre (cadena).
• Número de expediente (entero).
• Número de Documento Nacional de Identidad o Pasaporte (entero doble).
• Año de nacimiento (entero).
• Estudios (cadena).

Un archivo es un grupo de registros relacionados. Así, una universidad puede tener muchos alumnos y profesores,
y un archivo de alumnos contiene un registro para cada empleado. Un archivo de una universidad puede contener
miles de registros y millones o incluso miles de millones de caracteres de información. Las Figura 9.4 muestra la
jerarquía de datos de un archivo (byte, campo, registro, archivo).

Base de datos

Archivos

Registros

Campos

Subcampos

Caracteres

Figura 9.4. Estructuras jerárquicas de datos.

Los registros poseen una clave o llave que identifica a cada registro y que es única para diferenciarla de otros
registros. En registros de nombres es usual que el campo clave sea el pasaporte o el DNI (Documento Nacional de
Identidad).
Un conjunto de archivos relacionados se denomina base de datos. En los negocios o en la administración, los
datos se almacenan en bases de datos y en muchos archivos diferentes. Por ejemplo, las universidades pueden tener
archivos de profesores, archivos de estudiantes, archivos de planes de estudio, archivos de nóminas de profesores y
de PAS (Personal de Administración y Servicios). Otra jerarquía de datos son los sistemas de gestión de bases de
datos (SGBD o DBMS) que es un conjunto de programas diseñados para crear y administrar bases de datos.

También podría gustarte