Vous êtes sur la page 1sur 33

INSTITUTO TECNOLOGICO

SUPERIOR DE CALKINI EN EL
ESTADO DE CAMPECHE

PRCTICA NO. 5 ARCHIVOS


SECUENCIALES Y DIERECTOS

Nombre del alumno: Rigel Didier


Lpez Wong -5751
Asignatura: programacin bsica
Especialidad: Mecatrnica
3er Parcial
Grado: 1ro Grupo
CICLO ESCOLAR 2016-2017
Dr. Jos Manuel Lira Turriza
Archivos Secuenciales y Directos Pgina |2

NDICE
NDICE..................................................................................................................2
INTRODUCCIN..................................................................................................3
ARCHIVOS SECUENCIALES Y DIRECTOS.......................................................4
Archivos:............................................................................................................4
Apertura de archivos:....................................................................................5
Clasificacin de archivos por el tipo de datos:..............................................5
Clasificacin de archivos por el tipo de acceso:...............................................7
Archivos de Acceso Secuencial:.......................................................................7
Consulta o recorrido Secuencial:..................................................................8
Archivos Secuenciales Indexado:.................................................................9
Codificacin de Archivos Secuenciales:......................................................10
Archivos de Acceso Directo:...........................................................................16
Consulta Directa:.........................................................................................17
Organizacin Directa:..................................................................................18
Codificacin de Archivos Directos:..............................................................19
Funciones y Mtodos de Archivos:.................................................................25
Tabla de Caractersticas:................................................................................28
CONCLUSIN....................................................................................................30
BIBLIOGRAFA...................................................................................................31
REFERENCIA ELECTRNICA..........................................................................31

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos Pgina |3

INTRODUCCIN

El uso de la programacin es muy interesante hoy en da que sorprende cada


vez ms, por lo que, desde una perspectiva personal, podemos interactuar con
aquellos componentes internos que proporciona una computadora, siendo la
programacin una gran herramienta para poder aplicar dicha interaccin.
Cuando se programa comnmente en C++, se usa la memoria principal o
memoria RAM como nico medio de almacenamiento (usando variables,
arreglos o estructuras de datos ms complejas), con el inconveniente que esto
representa: la volatilidad de la memoria RAM; es decir, si se apaga la
computadora se pierden los datos. Adems, algunas aplicaciones exigen
transportar los datos de una computadora a otra. Es por esto que surge la
necesidad de almacenar dichos datos de forma permanente que permita
retenerlos en ciertos dispositivos de almacenamiento secundario por un
perodo de tiempo largo sin el suministro de energa, de tal forma que permitan
transportarlos y utilizarlos en otro equipo computacional.[ CITATION Gar03 \l
2058 ]
Al desarrollar la programacin a travs de manejos de archivos, existe una
estrecha relacin entre la memoria principal, el microprocesador y los
dispositivos de almacenamiento secundario ya que el procesamiento que
realiza una computadora es tarea absoluta del microprocesador en conjuncin
con la memoria principal; es decir, los dispositivos de almacenamiento
secundario (diskettes, discos duros, CDs, flash drives, etc.) no procesan datos,
slo los almacenan. En estos dispositivos slo se reflejan los datos
previamente procesados y funcionan exclusivamente como una bodega. Esto
repercute de manera significativa al momento de programar archivos, ya que
para hacerle modificaciones a los datos de un registro previamente
almacenado es necesario primero cargarlo en la memoria principal, es decir,
localizar el registro en el archivo y leerlo para colocar sus datos en la memoria
RAM, ah modificarlo y posteriormente grabarlo en la misma posicin en la que
se encontraba, sin embargo estas operaciones no se realizan directamente,
sino a travs de la unidad aritmtica-lgica, la unidad de control y los registros
del microprocesador.[ CITATION Gar03 \l 2058 ]
Es por ello que en esta respectiva investigacin se proporcionar toda aquella
informacin que repercute el manejo de archivos especficamente en el
lenguaje C++.
Adems de tratar sus distintas clasificaciones, respecto al tipo de acceso como
son: directas y aleatorias. As como el tipo de datos: texto y binario.
A continuacin, procedamos al desarrollo de esta correspondiente investigacin
para entender de manera adecuada lo que se pretendi involucrar en esta
presente introduccin.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos Pgina |4

ARCHIVOS SECUENCIALES Y DIRECTOS

Archivos:
Un archivo o fichero informtico es un conjunto de bits que son almacenados
en un dispositivo. Un archivo es identificado por un nombre y la descripcin de
la carpeta o directorio que lo contiene. A los archivos informticos se les llama
as porque son los equivalentes digitales de los archivos escritos en
expedientes, tarjetas, libretas, papel o microfichas del entorno de oficina
tradicional.
En lo que concierne al sistema operativo un archivo es, en la mayora de los
casos, simplemente un flujo unidimensional de bits, que es tratado por el
sistema operativo como una nica unidad lgica. Un archivo de datos
informtico normalmente tiene un tamao, que generalmente se expresa en
bytes; en todos los sistemas operativos modernos, el tamao puede ser
cualquier nmero entero no negativo de bytes hasta un mximo dependiente
del sistema. Depende del software que se ejecuta en la computadora el
interpretar esta estructura bsica como por
ejemplo un programa, un texto o una imagen,
basndose en su nombre y contenido. Los tipos
especiales de archivos, como los nodos de
dispositivo que representan simblicamente
partes del hardware, no consisten en un flujo de
bits y no tienen tamao de archivo.[ CITATION
Gar03 \l 2058 ]
El nombre de un archivo y la ruta al directorio
del archivo lo identifica de manera unvoca entre
todos los dems archivos del sistema
informtico -no puede haber dos archivos con el
mismo nombre y ruta-. El aspecto del nombre depende del tipo de sistema
informtico que se use.
Al igual que ocurre con la escritura en pantalla, a la hora de manejar los
ficheros desde C++, podemos emplear las funciones que ya han sido
interpretados, o bien emplear otras nuevas posibilidades que aporta C++.
Tambin al igual que ocurra con la pantalla, el manejo de ficheros se basar en
flujos de entrada y salida. [ CITATION Gar03 \l 2058 ]
Tenemos las clases fstream (fichero, en general), ifstream (fichero de entrada)
y ofstream (fichero de salida), todas ellas definidas en "fstream.h". Leeremos y
escribiremos con << y >>, al igual que para la pantalla. Cerraremos un fichero
con "close" (tanto si lo hemos abierto como para leer o para escribir) y
comprobaremos si se ha terminado un fichero de entrada con "eof".[ CITATION
Gar03 \l 2058 ]

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos Pgina |5

A continuacin, de manera explcita se presentar un ejemplo prctico y


sencillo sobre la creacin de un archivo de texto en C++.

Apertura de archivos:
Antes de escribir o leer datos de un archivo es necesario abrirlo. Al abrir el
archivo se establece comunicacin entre el programa y el sistema operativo
acerca de cmo accesarlo. Es necesario que el programa le proporcione al
sistema operativo el nombre completo del archivo y la intencin de uso (leer o
escribir datos), entonces se definen reas de comunicacin entre ellos. Una de
estas reas es una estructura que controla el archivo (alias del archivo), de
esta forma cuando se solicita una operacin del archivo, se recibe una
respuesta que informa el resultado mediante un apuntador. Cada archivo
abierto requiere un alias para poder realizar operaciones en l.[ CITATION
Gar03 \l 2058 ]
La estructura del archivo contiene informacin del archivo que se est usando,
as como el tamao actual y la localizacin de los buffers de datos.

Clasificacin de archivos por el tipo de datos:


Existen muchas clasificaciones de archivos de acuerdo a diferentes criterios o
aplicaciones. Aqu se presenta una muy importante: de acuerdo al contenido.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos Pgina |6

Archivos de Texto:
Son aquellos que pueden contener cualquier clase de datos y de tal manera
que son entendibles por la gente. Los datos en un archivo de texto se
almacenan usando el cdigo ASCII, en el cual cada carcter es representado
por un simple byte. Debido a que los archivos de texto utilizan el cdigo ASCII,
se pueden desplegar o imprimir. En este tipo de archivos, todos sus datos se
almacenan como cadenas de caracteres, es decir, los nmeros se almacenan
con su representacin ASCII y no su representacin numrica, por lo tanto, no
se pueden realizar operaciones matemticas directamente con ellos. Pr
ejemplo: Si se guarda el dato 3.141592 en un archivo de texto, se almacena
como 3.141592 y ntese que 3.141592 3.14159. [ CITATION Ign16 \l
2058 ]
Archivos Binarios:
Este tipo de archivos almacenan los datos numricos con su representacin
binaria. Pueden ser archivos que contienen instrucciones en lenguaje mquina
listas para ser ejecutadas. Por ejemplo, cuando escribimos un programa en un
lenguaje en particular (como C++, Pascal, Fortran, etc), tenemos las
instrucciones almacenadas en un archivo de texto llamado programa fuente,
pero una vez que lo sometemos a un proceso de compilacin y ejecucin
nuestro programa lo trasladamos a un programa ejecutable (en lenguaje
mquina), que es directamente entendido por la computadora y se crea un
archivo binario. En este tipo de archivos tambin se pueden almacenar
diferentes tipos de datos incluyendo datos numricos; sin embargo, cabe
destacar que los datos numricos se graban con su representacin binaria (no
con su representacin ASCII), por tal razn, cuando se despliegan con un
editor de textos o por medio de comandos del sistema operativo, aparecen
caracteres raros que no se interpretan. P. ejem. Si se guarda el dato 27 en un
archivo binario, se almacena como 00001111 y no como 27.[ CITATION
Ign16 \l 2058 ]

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos Pgina |7

Clasificacin de archivos por el tipo de acceso:


De acuerdo a la forma de acceder los datos de los archivos, stos se clasifican
en secuenciales o directos (tambin conocidos como de acceso directo,
relativos o aleatorios). En esta seccin no se pretende analizar las diferentes
estructuras de datos involucradas en estas clasificaciones de archivos ni
desarrollar aplicaciones complejas debidamente diseadas usndolos, sino
conocer esencialmente sus conceptos tericos y la forma de manejarlos.

[ CITATION Gar03 \l 2058 ]

Archivos de Acceso Secuencial:

Como su nombre lo indica, en este tipo de archivos los registros se graban en


secuencia o consecutivamente y deben accesarse de ese mismo modo, es
decir, conforme se van insertando nuevos registros, stos se almacenan al final
del ltimo registro almacenado; por lo tanto, cuando se desea consultar un
registro almacenado es necesario recorrer completamente el archivo leyendo
cada registro y comparndolo con el que se busca. En este tipo de archivo se
utiliza una marca invisible que el sistema operativo coloca al final de los
archivos: EOF (End of File), la cual sirve para identificar dnde termina el
archivo.[ CITATION Ign16 \l 2058 ]

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos Pgina |8

La forma ms comn de estructura de archivo es el archivo secuencial. En este


tipo de archivo, un formato fijo es usado para los registros. Todos los registros
tienen el mismo tamao, constan del mismo nmero de campos de tamao fijo
en un orden particular. Como se conocen la longitud y la posicin de cada
campo, solamente los valores de los campos se necesitan almacenarse; el
nombre del campo y longitud de cada campo son atributos de la estructura de
archivos.
Un campo particular, generalmente el primero de cada registro se conoce como
el campo clave. El campo clave identifica unvocamente al registro. As, los
valores de la clave para registros diferentes son siempre diferentes.
Los archivos secuenciales son tpicamente utilizados en aplicaciones de
proceso de lotes Y son ptimos para dichas aplicaciones si se procesan todos
los registros. La organizacin secuencias de archivos es la nica que es fcil
de usar tanto en disco como en cinta.
Para las aplicaciones interactivas que incluyen peticiones o actualizaciones de
registros individuales, los archivos secuenciales ofrecen un rendimiento pobre.
Normalmente un archivo secuencial se almacena en bloques, en un orden
secuencial simple de los registros. La organizacin fsica del archivo en una
cinta o disco se corresponde exactamente con la ubicacin lgica del archivo.
En este caso, el procedimiento para ubicar los nuevos registros en un archivo
de pila separado, llamado archivo de registro (log file) o archivo de
transacciones. Peridicamente, se realiza una actualizacin por lotes
que mezcla el archivo de registro con el archivo maestro para producir un
nuevo archivo en secuencia correcta de claves.
Los soportes secuenciales son aquellos en los que los registros informaciones
estn escritos a continuacin de otros y para acceder a un determinado
registro, n se necesita pasar por los n-1 registros anteriores. La secuencia
puede corresponder al orden fsico de los registros en el archivo (organizacin
secuencial) o bien el orden de las claves (ascendente o descendente) de los
registros (organizacin indexada).

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos Pgina |9

Un archivo con organizacin secuencial


es una sucesin de registros
almacenados consecutivamente sobre
el soporte externo, de tal modo que
para acceder a un registro m dado es
obligatorio pasar por todos los n-1
artculos que le preceden.
Los registros se graban
consecutivamente cuando el archivo se
crea y se debe acceder
consecutivamente cuando se leen
dichos registros.[ CITATION Ign16 \l
2058 ]

Consulta o recorrido Secuencial:


A continuacin, se muestra un diagrama de flujo de una rutina de consulta de
un registro en particular mediante un recorrido secuencial. En esta rutina se
maneja un archivo que almacena datos de productos (PRODUCTO.SEC)
segn el registro declarado y lo recorre completamente en forma secuencial
(registro por registro) hasta encontrar el producto solicitado.[ CITATION Gar03 \l
2058 ]

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 10

Archivos Secuenciales Indexado:


Un mtodo popular para superar las desventajas de los archivos secuenciales
es el del archivo secuencias indexado. El archivo secuencial indexado
mantiene las caractersticas bsicas de los archivos secuenciales: los registros
estn organizados en una secuencia basada en un campo. Dos caractersticas
se aaden: un ndice del archivo para soportar los accesos aleatorios y un
archivo de desbordamiento (overflow). El ndice provee una capacidad de
bsqueda para llegar rpidamente a las proximidades de un registro deseado.
El archivo de desbordamiento (overflow) es similar al archivo de registro usado
en un archivo secuencial, pero est integrado de forma que los registros del
archivo de desbordamiento se ubican en la direccin de un puntero desde si
registr precedente. En la estructura secuencial indexada ms simple, se usa
un solo nivel de indexacin. El ndice, en este caso, es un archivo secuencial
simple. Cada registro del archivo ndice tiene dos campos: un campo clave, que
es el mismo que el campo clave del archivo principal y un puntero al archivo
principal. Para encontrar un campo especfico se busca en el ndice hasta

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 11

encontrar el valor mayor de la clave que es igual o precede al valor deseado de


la clave. La bsqueda continua en el archivo principal a partir de la posicin
indicada por el puntero.

Los archivos secuenciales indexados retienen la limitacin del archivo


secuencial: la eficacia en el procesamiento se limita al basado en un nico
campo del archivo. Cuando es necesario buscar un registro basndose en
algn otro atributo distinto del campo clave ambas formas de archivo
secuencial no son adecuadas. En algunas aplicaciones esta flexibilidad es
deseable.
Para alcanzar esta flexibilidad, se necesita una estructura que utilice mltiples
ndices, uno para cada tipo de campo que pueda ser objeto de la bsqueda.
Se suelen utilizar dos tipos de ndices. Uno ndice exhaustivo contiene una
entrada para cada registro del archivo principal. Otro ndice parcial contendr
entradas a los registros donde este el campo de inters. Con registros de
longitud variable, algunos registros no contendrn todos los campos.
Los archivos indexados son muy utilizados en aplicaciones donde es critica la
oportunidad de la informacin y donde los datos son rara vez procesados de
forma exhaustiva.[ CITATION Sal01 \l 2058 ]
Codificacin de Archivos Secuenciales:
Acceso secuencial del archivo:
La primera operacin despus de declarar un archivo y antes de cualquier otra
operacin con l es abrirlo.
Fopen:
<variable_archivo> = fopen (<nombre_archivo>, <modo_acceso>);
Donde:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 12

- variable_archivo es la variable declarada de la forma: FILE


*<variable_archivo>
- nombre_archivo es el nombre que tendr el archivo en el dispositivo usado.
Podr ser variable o constante.
- modo_acceso es el modo de apertura del archivo, mediante el cual le
diremos al compilador si se trata
de un archivo de texto o binario, y si vamos a leer o escribir en el archivo.
Los distintos modos de abrir un archivo son los siguientes:
Modos:
r: Abre un archivo de texto para solo lectura. Si el archivo no existe, devuelve
un error
w: Abre el archivo de texto para solo escritura. Si el archivo no existe, lo crea, y
si existe lo sobrescribe.
a: Abre el archivo de texto para aadir al final. Si el archivo no existe, lo crea.
r+: Abre el archivo de texto para lectura/escritura. Si el archivo no existe, da un
error.
w+: Abre el archivo de texto para lectura/escritura. Si el archivo no existe, lo
crea, y si existe lo sobrescribe.
a+: Abre el archivo de texto para aadir al final, con opcin de lectura. Si el
archivo no existe, lo crea.
rb: Abre un archivo binario para solo lectura. Si el archivo no existe, devuelve
un error
wb: Abre el archivo binario para solo escritura. Si el archivo no existe, lo crea, y
si existe lo sobrescribe.
ab: Abre el archivo binario para aadir al final. Si el archivo no existe, lo crea.
rb+: Abre el archivo binario para lectura/escritura. Si el archivo no existe, da un
error
wb+: Abre el archivo binario para lectura/escritura. Si el archivo no existe, lo
crea, y si existe lo sobrescribe.
ab+: Abre el archivo binario para aadir al final, con opcin de lectura. Si el
archivo no existe, lo crea.

Decir que los archivos de texto se pueden referenciar tambin como "rt", "wt",
"at", "rt+", "wt+" y "at+", pero para facilitar ms las cosas, cuando no
especificamos si queremos abrir un archivo de texto o binario, por defecto se

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 13

supone que es de texto, es por ello que los modos "r", "w" y "a" se refieren a
archivos de texto.
Hemos de tener cuidado con los modos de apertura de los archivos porque al
abrir con cualquier modo "w", si ya exista el archivo, se borrar la informacin
que contuviese. Si no existe, lo crear. Por el contrario, con el modo "a"
tambin lo crear si no existe el archivo, pero si ya existe, aadir al final del
mismo los datos que escribamos.
Podemos saber si un archivo ha sido abierto correctamente o no. Debido a que
los archivos son punteros a estructuras tipo FILE, podemos conocer su valor al
hacer que apunten a ellas. La forma de hacerlo es comparando el puntero con
la constante predefinida NULL. De esta forma, cuando el puntero valga NULL
(no apunta a ninguna variable o posicin de memoria), es porque ha habido
algn problema al abrir el archivo.
Este problema se puede deber a que no existe el archivo que intentamos abrir
para lectura, que no hay espacio suficiente en el disco al tratar de crear el
archivo, que la unidad de disco no est preparada, que el disco est daado
fsicamente o que la impresora no est conectada. Veamos en ejemplo del
testeo de la existencia de un archivo de texto.

Fclose:
<valor> = fclose (<variable_archivo>);
Donde:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 14

- valor es el valor que nos dir si ocurre algn error cerrando el archivo. 0 indica
que todo ha ido bien.
- variable_archivo es la variable declarada de la forma: FILE
*<variable_archivo>
Cuando terminemos de trabajar con un archivo hemos de realizar la operacin
de cierre del archivo. Si no lo hacemos podemos ocasionar la prdida de todos
los datos del mismo. Si se necesitan cerrar varios archivos a la vez, nos
podemos ahorrar varios fclose utilizando la funcin fcloseall.
Fcloseall:
<numero_archivos> = fcloseall ();
Donde:
- numero_archivos es una variable entera que indica el nmero de archivos
cerrados, o EOF si ha ocurrido un error.
Ahora veamos unas funciones para escribir y leer datos de un archivo de texto.
Putc:
Esta funcin escribe un carcter en un archivo de texto. Devuelve un entero si
la escritura es correcta. De
otra forma devuelve el valor EOF que indica que ha habido un error. Su formato
es:
putc (<carcter>, <var_fich>);
Donde:
- carcter es el carcter que se desea escribir en el archivo.
- var_fich es la variable declarada como FILE.
Ejemplos:
- putc ('a', f1);
- c = 'G'; putc (c, f1);
Ni que decir tiene que cuando usemos funciones para escribir en archivos,
estos tendrn que haber sido abiertos en modo escritura o para aadir datos.
Getc:
Esta funcin lee un carcter de un archivo de texto abierto en modo lectura.
Devuelve un entero si la lectura es correcta. De otra forma devuelve el valor
EOF que indica que hemos llegado al final del archivo. Su formato es:
<carcter> = getc (<var_fich>);
Donde:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 15

- carcter es la variable que contendr el carcter ledo del archivo.


- var_fich es la variable declarada como FILE.
Ejemplos:
- c = getc (f1);
Un ejemplo del uso de estas dos funciones sera leer todos los caracteres de
un archivo de texto y escribirlos en otro archivo de texto y por pantalla a la vez
para comprobar la correcta ejecucin:

Aparece en este ejemplo una nueva funcin, la funcin exit (). Esta funcin
provoca que acabe el programa con lo que la funcin main () devuelve un valor,
en este caso el valor 1. Recordamos que toda funcin devuelve un valor.
Fscanf:

Esta funcin trabaja de la misma manera que scanf, pero leyendo los datos
formateados de un archivo. Su
sintaxis es:
fscanf (<var_fich>, <cadena_de_control>, <lista_variables>);
Donde:
- var_fich es la variable declarada como FILE.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 16

- cadena_de_control son las cadenas de control que se desean leer, tales como
%d, %s, %f, %x, etc...
- lista_variables son las variables que contendrn los valores de la lectura del
archivo que deben coincidir con sus respectivas cadenas de control.
Ejemplos:
- fscanf (fich, "%s%d%f", nombre, &edad, &altura);
Fprintf:
Esta funcin trabaja de la misma manera que printf, pero escribiendo los datos
formateados sobre un archivo. Su sintaxis es:
fprintf (<var_fich>, <cadena_de_control>, <lista_variables>);
Donde:
- var_fich es la variable declarada como FILE.
- cadena_de_control son las cadenas de control que se desean escribir, tales
como %d, %s, %f, etc...
- lista_variables son las variables que contendrn los valores para la escritura
en el archivo que deben coincidir con sus respectivas cadenas de control.
Ejemplos:
- fprintf (fich, "%s%d%f", nombre, edad, altura);
Gestin de un Archivo Secuencial de Estructuras:
Los componentes o registros de un archivo pueden ser de cualquier tipo de
datos, desde tipos bsicos (enteros, float, char, etc..) hasta estructuras de
datos.
Las operaciones en cualquiera de los casos son siempre iguales. Veamos un
ejemplo de un archivo de estructuras:
- Apertura:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 17

- Escritura:
fwrite (&cliente, sizeof(cliente), 1, f);
- Lectura:
fread (&cliente, sizeof(cliente), 1, f);
Las operaciones bsicas en el mantenimiento o gestin de un archivo
secuencial son las siguientes:
- Comprobacin de la existencia del archivo: Se abrir el archivo en modo
lectura, si no existe, se permitir la creacin del mismo, volvindolo a abrir en
modo escritura.
- Altas: Se abrir el archivo en modo aadir.
- Bajas: Utilizaremos dos archivos: el maestro y otro auxiliar. El maestro lo
abriremos para lectura, y el auxiliar para escritura. Iremos transfiriendo todos
los registros del maestro al auxiliar excepto el que queramos borrar. A
continuacin, borraremos el maestro, y asignaremos al auxiliar el nombre del
maestro.
- Modificaciones: Procederemos de igual forma que para las bajas, salvo que
transferiremos todos los registros al auxiliar, los no modificados y el modificado.
Borraremos el maestro y renombraremos el auxiliar para darle el nombre del
maestro.
- Consultas: Se abrir el archivo en modo lectura.
- Listado por pantalla: Se abrir el archivo en modo lectura. Se ir leyendo
informacin mientras no se llegue al final del archivo.
- Listado por impresora: Utilizaremos dos archivos, el maestro y el de
impresora. El primero lo abriremos para lectura, y el segundo para escritura, del
siguiente modo:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 18

De tal forma que todo lo que escribamos en fimp saldr por impresora. Por tal
motivo, debemos pensar que se trata de un archivo de texto, por lo cual,
usaremos funciones de escritura en archivos de texto.
[ CITATION Lui08 \l 2058 ]

Archivos de Acceso Directo:


A diferencia de los archivos secuenciales, en los archivos directos o aleatorio
no es necesario recorrerlo completamente para acceder un registro en
particular, sino se puede colocar el apuntador interno del archivo directamente
en el registro deseado, permitiendo con esto mayor rapidez de acceso. Cabe
destacar que para reposicionar este apuntador se utiliza el comando SEEK
indicndole la direccin del registro que se desea.
Permiten situarse en cualquier punto del archivo para actualizar ciertos valores.
La distincin, por tanto, entre archivos de acceso secuencial y archivos de
acceso aleatorio no es sino una distincin entre qu operaciones se utilizan
para acceder a los datos.

Con el uso del acceso directo se puede acceder de forma directa a la posicin
que se requiera sin tener que pasar por las posiciones anteriores, como si
fueran arreglos en la memoria. Lo cual permitir tomar modifica e insertar
informacin en la posicin que se desee. Las operaciones de lectura y/o
escritura pueden hacerse en cualquier punto del archivo.
Muchas veces se desea acceder un dato concreto de un archivo en una
posicin relativa conocida de antemano. Por ejemplo, queremos leer o escribir
en el registro 713 de un archivo. El acceso directo est pensado para resolver
fcilmente estas operaciones. Un archivo de acceso directo permite leer o
escribir bloques de informacin en un punto cualquiera del archivo, que se pasa
como parmetro en la llamada del sistema correspondiente. Hay total libertad
en el orden en que se accede a los registros. Por ejemplo, el 15, luego 713,
luego 9 este modo de acceso es muy til en sistema de base de datos.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 19

[ CITATION Lui05 \l 2058 ]


Consulta Directa:
A continuacin, se muestra un diagrama de flujo de una
rutina de consulta directa de un registro en particular.
En esta rutina se maneja el archivo PRODUCTO.SEC
segn el registro declarado. A diferencia del recorrido
secuencial, en el que es necesario leer cada registro del
archivo, en la consulta directa se calcula la direccin
fsica del registro solicitado y se posiciona el apuntador
del archivo directamente en ese registro para leerlo.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 20

Organizacin Directa:
Un archivo est organizado en modo directo cuando el orden fsico no
corresponde con el orden lgico. Los datos se sitan en el archivo y se accede
a ellos directa aleatoriamente mediante su posicin, es decir, el lugar relativo
que ocupan.
Esta organizacin tiene la ventaja que se pueden leer y escribir registros en
cualquier orden y posicin. Son muy rpidos de acceso a la informacin que
contiene.
La organizacin directa tiene el inconveniente de que se necesita programar la
relacin existente entre el contenido de un registro y la posicin que ocupa. El
acceso a los registros en modo directo implica la posible existencia de espacios
libres dentro del soporte, y por consecuencia pueden existir espacios libres
entre registros.

La correspondencia entre clave y direccin debe poder ser programada y la


determinacin de la relacin entre un registro y su posicin fsica se obtiene
mediante una formula.
Las condiciones para que un archivo sea de organizacin directa son:
- Almacenado en un soporte direccionable.
- Los registros deben contener un campo especifico denominado clave que
identifica cada registro de modo nico; es decir, dos registros distintos no
pueden tener un mismo valor de clave.[ CITATION Ign16 \l 2058 ]
Codificacin de Archivos Directos:
os archivos de acceso aleatorio son ms verstiles, permiten acceder a
cualquier parte del fichero en cualquier momento, como si fueran arrays en
memoria. Las operaciones de lectura y/o escritura pueden hacerse en cualquier
punto del archivo.
En general se suelen establecer ciertas normas para la creacin, aunque no
todas son obligatorias:
Abrir el archivo en un modo que te permita leer y escribir. Esto no es
imprescindible, es posible usar archivos de acceso aleatorio slo de lectura o
de escritura.
Abrirlo en modo binario, ya que algunos o todos los campos de la estructura
pueden no ser caracteres.
Usar funciones como fread y fwrite, que permiten leer y escribir registros de
longitud constante desde y hacia un fichero.
Usar la funcin fseek para situar el puntero de lectura/escritura en el lugar
apropiado de tu archivo.
Por ejemplo, supongamos que nuestros registros tienen la siguiente estructura:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 21

Teniendo en cuenta que los registros empiezan a contarse desde el cero, para
hacer una lectura del registro nmero 6 usaremos:

Anlogamente, para hacer una operacin de escritura, usaremos:

Muy importante: despus de cada operacin de lectura o escritura, el cursor del


fichero se actualiza automticamente a la siguiente posicin, as que es buena
idea hacer siempre un fseek antes de un fread o un fwrite.
En el caso de streams, la forma de trabajar es anloga:

Y para hacer una operacin de escritura, usaremos:

Calcular Longitud de un Fichero:


Para calcular el tamao de un fichero, ya sea en bytes o en registros se suele
usar el siguiente procedimiento:

En el caso de streams:

Borrar registros:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 22

Borrar registros puede ser complicado, ya que no hay ninguna funcin de


biblioteca estndar que lo haga.
Es su lugar se suele usar uno de estos dos mtodos:
1- Marcar el registro como borrado o no vlido, para ello hay que aadir un
campo extra en la estructura del registro:

Si el campo Valido tiene un valor prefijado, por ejemplo 'S' o ' ', el registro es
vlido. Si tiene un valor prefijado, por ejemplo 'N' o '*', el registro ser invlido o
se considerar borrado.
De este modo, para borrar un registro slo tienes que cambiar el valor de ese
campo.
Pero hay que tener en cuenta que ser el programa el encargado de tratar los
registros del modo adecuado dependiendo del valor del campo Valido, el hecho
de marcar un registro no lo borra fsicamente.
Si se quiere elaborar ms, se puede mantener un fichero auxiliar con la lista de
los registros borrados. Esto tiene un doble propsito:
Que se pueda disear una funcin para sustituir a fseek () de modo que
se tengan en cuenta los registros marcados.
Que, al insertar nuevos registros, se puedan sobrescribir los
anteriormente marcados como borrados, si existe alguno.

2- Hacer una copia del fichero en otro fichero, pero sin copiar el registro
que se quiere borrar. Este sistema es ms tedioso y lento, y requiere
cerrar el fichero y borrarlo o renombrarlo, antes de poder usar de nuevo
la versin con el registro eliminado.
Lo normal es hacer una combinacin de ambos, durante la ejecucin normal
del programa se borran registros con el mtodo de marcarlos, y cuando se
cierra la aplicacin, o se detecta que el porcentaje de registros borrados es alto
o el usuario as lo decide, se "empaqueta" el fichero usando el segundo
mtodo.
Funcin Fwrite:
La funcin fwrite transfiere a un archivo un nmero especificado de bytes
empezando en una posicin especificada de memoria. Los datos se escriben al
principio de la posicin en el archivo indicada mediante el apuntador de
posicin de un archivo. La funcin fread transfiere un nmero especificado de
bytes de la posicin en el archivo, especificado por el apuntador de posicin de

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 23

archivo, a un rea en memoria empezando a partir de una direccin


especificada. Por ejemplo, para escribir un entero, en vez de especificar:
fprintf (cuentaPtr, %d, numero);
para escribir el mismo nmero de tipo int, se puede especificar:
fwrite (&numero, sizeof(int), 1, cuentaPtr);
ms adelante ese dato puede ser ledo con la funcin fread.
El primer parmetro de fprintf es la direccin de la variable a escribir en disco,
el segundo el tamao de bytes del dato que se va a escribir (devuelto por la
funcin sizeof), el tercer parmetro es el nmero de datos que se van a escribir
del tamao especificado (por lo comn ser 1) y el ltimo es el apuntador al
archivo que se abri para escritura o modificacin.
Para tener datos de tamao fijo en los archivos y lo que formalmente sern
registros del archivo se crea una estructura, es decir, un nuevo tipo de dato
definido por el usuario y compuesto por uno o varios tipos de datos con sus
nombres de campo respectivos.
La declaracin de un tipo struct se hace antes de la funcin main de la
siguiente manera:

Por ejemplo, para crear una estructura que permita almacenar los datos de un
cliente puede declararse de la siguiente manera:

De este modo se crea una estructura de nombre DatosCliente con los campos
descritos, en el programa se podrn declarar variables de tipo DatosCliente y
para acceder a cada uno de los campos se utilizar la notacin registro. campo.
La declaracin de una variable de este tipo se har:

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 24

De esta manera la variable micliente tiene los cuatro campos definidos para el
tipo de estructura, y el nombre del cliente se accede con la siguiente lnea:

El uso de una estructura y de las funciones fread, fwrite y fseek ser


bsicamente la diferencia entre programar para utilizar un archivo secuencial y
un archivo de acceso directo.
Cmo crear un archivo de acceso directo.

Escribir y leer datos de un archivo de acceso directo


La introduccin de los datos ser mediante la misma funcin fwrite, donde lo
que se escribe es la variable del tipo de la estructura deseada, con el tamao
de la misma estructura y el apuntador al archivo. Cada dato debe ser llenado

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 25

con scanf al campo deseado de la misma estructura. A continuacin, se


presenta un ejemplo de captura de datos y escritura al archivo.

La lectura de cada registro en el archivo se har con la funcin fread, cuyos


parmetros son: la variable que almacena los datos ledos del archivo, el
tamao de la estructura o del tipo de dato, el nmero de datos a leer y el
apuntador al archivo.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 26

[ CITATION Sal01 \l 2058 ]

Funciones y Mtodos de Archivos:


Operaciones con archivos:
Creacin de Archivos: Es la asignacin de un espacio en el medio de
almacenamiento mediante la colocacin del nombre del archivo en el directorio.
Apertura: Establecimiento de un canal de comunicacin con un archivo
determinado. En C++ se utiliza el comando fopen.
Cierre: Cancelacin de un canal de comunicacin previamente establecido con
un archivo. En C++ se utiliza el comando fclose ();
Asignacin: Se le asocia un nombre de archivo con la extensin
correspondiente.
Actualizacin: Es un proceso que modifica el contenido de la base de datos
(altas, bajas, cambios).

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 27

Al especificar la apertura de un archivo en el cdigo en C++, el programa


sobrescribe cualquier archivo existente llamado Datos.txt en el directorio de
trabajo del programa. Dependiendo del propsito del programa es posible que
sea necesario agregar datos a los ya existentes en el archivo, o quiz sea
necesario que las operaciones del programa no se lleven a cabo en caso de
que el archivo especificado exista en el disco, para stos casos podemos
especificar el modo de apertura del archivo incluyendo un parmetro adicional
en el constructor, cualquiera de los siguientes:
ios::app Operaciones de aadidura.
ios::ate Coloca el apuntador del archivo al final del mismo.
ios::in Operaciones de lectura. Esta es la opcin por defecto para
objetos de la clase ifstream.
ios::out Operaciones de escritura. Esta es la opcin por defecto para
objetos de la clase ofstream.
ios::nocreate Si el archivo no existe se suspende la operacin.
ios::noreplace Crea un archivo, si existe uno con el mismo nombre la
operacin se suspende.
ios::trunc Crea un archivo, si existe uno con el mismo nombre lo borra.
ios::binary Operaciones binarias.

Funciones miembros de Iostream:


put (char c) escribe un carcter en un flujo de salida
get (char& c) lee un carcter de un flujo de entrada.
write (const char* s, int n) escribe n bytes de la cadena s en un flujo de salida
(normalmente se usar para salida binaria).
read (char* s, int n) lee n bytes del flujo de entrada y los deposita en las
cadenas (normalmente se usar para entrada binaria).
get (char* s, int n, char c="\n") lee como mximo n caracteres del flujo de
entrada (incluyendo el "\0") y los introduce en la cadena s, o hasta que
encuentre el carcter de terminacin (por defecto "\n", salto de lnea), o el fin de
fichero. No retira el carcter de terminacin del flujo de entrada.
getline (char* s, int n, char c="\n") lee como mximo n-1 caracteres del flujo de
entrada, o hasta que encuentre el carcter de terminacin (por defecto un final
de lnea) o hasta el fin de fichero. Retira el carcter de terminacin del flujo de
entrada, pero no lo almacena en la cadena s.
ignore (int n=1, int delim=EOF) ignora o descarta los n caracteres siguientes de
un flujo de entrada (o un solo carcter, si no se indica el valor de n), o hasta
que encuentra un cierto carcter de terminacin (por defecto el fin de fichero
EOF).
peek () lee un carcter del flujo de entrada, pero sin retirarlo de dicho flujo.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 28

putback (char c) devuelve el carcter c al flujo de entrada (de modo que sera lo
primero que se leera en la prxima operacin de entrada).
[ CITATION Ana16 \l 2058 ]
Funciones miembros de Fstream: Manejo de Archivos.
FILE:
Declara la variable donde se almacena la ruta del archivo a utilizar,
generalmente se coloca como global. Su sintaxis es la siguiente:
FILE *nombre_variable;
fopen ();
Permite abrir un archivo, devolviendo un valor NULL sino se abri
correctamente y TRUE si ocurre lo contrario. Su sintaxis es la siguiente:
nombre_FILE = fopen (< nombre de archivo>, < modo>);
Modo:
r = Slo lectura.
w = Abre o sobrescribe.
a = Aade al fichero.
r+ = Lectura y escritura.
w+ = Lectura, escritura y sobrescribe.
a+ = Aadir, lectura y escritura.
NOTA: Despus del modo se incluye el tipo (b = binario, t = texto).
fclose ();
Permite cerrar un archivo, al final de un programa es necesario cerrar un
archivo para no perder informacin. Su sintaxis es la siguiente:
fclose(<nombre_FILE>);
fputs ();
Escribe una cadena en un fichero. Su sintaxis es la siguiente:
fputs(<variable_char>, *nombre, <variable_FILE>);
fwrite ();
Escribe en un fichero uno o varios registros de la misma longitud,
almacenados a partir de una direccin; trabajo en conjunto con fread (). Su
sintaxis es la siguiente:
fwrite(<&registro>, sizeof(<estructura>),1, <variable_FILE>);
fprintf ();

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 29

Permite escribir o imprimir en un archivo. Su sintaxis es la siguiente:


fprintf(<variable_FILE>, < informacin>);
fread ();
Permite leer registros de un archivo y permite almacenar la informacin en una
variable. Su sintaxis es igual a la de fwrite.
fread(<&registro>, sizeof(<estructura>),1, <variable_FILE>);
feof ();
Comprueba el final de un archivo y retorna un valor booleano. Usualmente se
combina con algn ciclo (for, if, while). Su sintaxis es la siguiente.
feof(<variable_FILE>);
fscanf ();
Permite leer en un archivo utilizando una mscara para el tipo de dato que se
lee. Su sintaxis es la siguiente:
fscanf(<variable_FILE>, <mscara>, <variable_registro. campo>);

fseek ();
Permite posicionar el cursor dentro del archivo para despus realizar una
bsqueda. Su sintaxis es la siguiente:
fseek(<variable_FILE>, <longitud>, <origen>);
Origen: Es la posicin a mandar el cursor:

[ CITATION Fco091 \l 2058 ]

Tabla de Caractersticas:
Secuencial Directa
Definicin Es la forma bsica de organizar Un archivo est organizado en
un conjunto de registros, que modo directo cuando el orden
forman un archivo, utilizando fsico no corresponde con el orden
una organizacin secuencial. lgico.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 30

Caractersticas 1- Lectura o escritura de 1- Acceso rpido de Archivo


datos en forma con el cual se puede
secuencial, es decir, uno acceder de forma rpida a
tras otro, de principio a un programa o aun fichero.
fin. 2- Un archivo de acceso
2- El orden fsico en que directo puede moverse o
fueron grabados o copiarse a cualquier lugar,
escritos los registros es pero siempre apuntar a la
el orden de lectura de los misma direccin.
mismos. 3- Funcin de algunos
3- Todos los tipos de programas para acceder
dispositivos de memoria rpidamente a un servicio
auxiliar soportan la de la misma. Por ejemplo, el
organizacin secuencial. men contextual posee
4- Exige el tratamiento de archivos de accesos
elemento, para esto es directos para facilitar las
necesario una tareas.
exploracin secuencial 4- En general se suelen
comenzando desde el establecer ciertas normas
primer elemento. para la creacin, aunque no
5- Los ficheros slo se todas son obligatorias:
pueden abrir para lectura 1- Abrir el archivo en un
o para escritura, nunca modo que te permita leer
de los dos modos a la y escribir. Esto no es
vez. imprescindible, es
6- La escritura de nuevos posible usar archivos de
datos siempre se hace al acceso aleatorio slo de
final del archivo. lectura o de escritura.
7- Para leer una zona 2- Abrirlo en modo binario,
concreta del archivo hay ya que algunos o todos
que avanzar siempre, si los campos de la
la zona est antes de la estructura pueden no ser
zona actual de lectura, caracteres.
ser necesario 3- Usar funciones como
"rebobinar" el archivo. fread y fwrite, que
permiten leer y escribir
registros de longitud
constante desde y hacia
un fichero.
4- Usar la funcin fseek
para situar el puntero de
lectura/escritura en el
lugar apropiado de tu
archivo.
Ventajas 1- Los archivos 1- La ventaja principal de un
secuenciales proveen la archivo de tipo directo es la
mejor utilizacin de habilidad de acceder a
espacio y son rpidos registros individuales
cuando los registros son directamente.
accesados 2- Los registros se pueden

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 31

secuencialmente. acceder de forma inmediata


2- Los archivos con poca para ser actualizados.
volatilidad, gran actividad 3- ste tipo de acceso a los
y tamao variable son archivos facilita
altamente susceptibles considerablemente la
de ser organizados implementacin de las
secuencialmente. bsquedas.
3- la tcnica de
organizacin secuencial
de archivos es la
capacidad de acceso al
"siguiente" registro
rpidamente: Mientras
que el patrn de acceso
a un archivo secuencial
se conforme al
ordenamiento de
registros en el archivo,
los tiempos de acceso
sern correctamente
adecuados.
Desventajas 1- El acceso a un registro 1- Su desventaja radica en
es pobre, la localizacin que se puede presentar la
de un determinado misma una misma direccin
registro no se puede para diferentes valores de
hacer individualmente no llave, es decir, se presentan
de manera rpida, y el colisiones.
acceso aleatorio es 2- Presenta desperdicio de
imprctico. espacios en la distribucin
2- Adems, en los archivos al azar de los registros.
secuenciales la direccin
de registro est implcita
y estn vulnerables a
fallas del sistema.

CONCLUSIN
En esta respectiva investigacin se desarrollaron una serie temas relacionados
con los archivos o ficheros que se puede conformar en un programa de C++,
dividindolos de manera explcita por el tipo de datos como el textual y el
binario, y la divisin implcita con el tipo de acceso a los archivos, es decir,
secuencial y directo o aleatorio.
Se pudo observar que primero se mostr el contenido del desarrollo,
detallndolo con sus respectivos subtemas. Al final se resumi con una tabla de
caractersticas contextuando tambin las ventajas y desventajas.
Ahora, es correspondiente resumir de manera conclusiva el contenido ms
importante desde el punto de vista particular.

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 32

Primero es importante resaltar que un archivo es un conjunto de bits


almacenados en un dispositivo, cada bit ser el resultado de los datos que
estemos ingresando en el fichero, y por consiguiente deber guardarse con un
tipo de extensin, y una direccin, en el caso de C++ se emplea con mayor
frecuencia la extensin de texto (.txt) siempre y cuando sea de tipo textual
como se especific en el desarrollo.
Ahora para diferenciar entre un archivo con acceso secuencial y aleatorio, no
es muy complejo de entender, por lo que sus nombres lo indican a primera
instancia.
El tipo secuencial se basa en el acceso desde el primer dato o registro hasta al
ltimo, uno tras otro. Si se requiere tomar uno, primero se debe pasar por los
anteriores, por lo que se recorre bloque por bloque.
En cambio, el tipo directo, si se requiere tomar un archivo, enseguida
accedemos a ella, sin necesidad de pasar por lo anteriores, por tal motivo se
conoce tambin como aleatorio, adems de guardar los registros de esta
manera. Sin embargo, no tiende a ser tan fcil como parece, por lo que la
programacin de sta es ms compleja que el secuencial, sabiendo que incluso
es necesario emplear punteros.
En cada uno de estos accesos se describe la codificacin con sus respectivas
funciones y mtodos que las conforman para entenderlos con ms claridad.
Finalmente puedo externar que se ha cumplido con el objetivo de este trabajo
resaltando cada tema que respecta el concepto de archivos en C++ por lo que
no es tan fcil inclusive en la documentacin para poder codificar, debido a que
hay una gran cantidad de formas y libreras para hacerlo, por supuesto, trat de
seleccionar los ms importantes.

BIBLIOGRAFA
Aguilar, L. J. (2005). Programacin en C: Metodologa, Algoritmos y Estructura
de Datos. Madrid: McGRAW-HILL.
Aguilar, L. J. (2008). Fundamentos de Programacin:Algoritmos, Estructura de
Datos y Objetos. Madrid: McGRAW-HILL.
Badel, G. (2003). Turbo C. Programacin en manejo de archivos. Microbit.
Sierra, F. C. (2009). Enciclopedia del lenguake C++. Madrid : AlfaOmega.

REFERENCIA ELECTRNICA

Rigel Didier Lpez Wong Mecatrnica 1 B.


Archivos Secuenciales y Directos P g i n a | 33

Cabanes, I. (2006-2016). AprendeAProgramar.com. Obtenido de


http://www.aprendeaprogramar.com/mod/resource/view.php?id=171
Coronado, S. P. (2001). http://c.conclase.net/ficheros/?cap=004. Obtenido de
http://c.conclase.net/ficheros/?cap=004.
Laureano-Cruces, A. L. (2016). Programacin Estructurada en C++. Obtenido
de
http://kali.azc.uam.mx/clc/03_docencia/licenciatura/e_datos/Programacio

Rigel Didier Lpez Wong Mecatrnica 1 B.

Vous aimerez peut-être aussi