Professional Documents
Culture Documents
Definicin
Tipos de archivos
El tipo de archivo es muy importante pues permite establecer o definir su organizacin y su acceso.
Organizacin de archivos
Se llama organizacin de archivos la tcnica empleada para representar y almacenar la informacin en archivos.
Existen tres tcnicas fundamentales:
Organizacin
Organizacin secuencial
Un
archivo organizado secuencialmente es el formado por una sucesin de datos relacionados, done su acceso est limitado a recorrer la secuencia desde el inicio.
Los
archivos secuenciales operan de la misma forma que la estructura de cola, el primer registro (fsico) es el primer registro escrito. La principal ventaja de la organizacin secuencial es la capacidad para acceder rpidamente al siguiente registro.
Organizacin directa
Cuando en un archivo el orden fsico no se corresponde con el orden lgico de acceso decimos que est organizado de un modo directo. Los datos se sitan en el archivo y se acceden a ellos directamente mediante su posicin. Las condiciones para que un archivo sea de organizacin directa son las siguientes: Almacenamiento en un soporte direccionable. Cada registro debe contener un campo clave. Debera haber correspondencia entre los posibles valores de la clave y las direcciones existentes en el soporte.
Hashing
El
mtodo hashing aumenta la velocidad de bsqueda en el que los datos no necesitan estar ordenados, ste mtodo se conoce como transformacin de claves (clave-direccin)
deseable que se cumplan en la funcin las siguientes condiciones:
Es
Distribuir las claves uniformemente entre las direcciones para evitar colisiones. Ejecucin eficiente. Utilizar el menor tamao de estructura posible.
Es una forma de organizar datos de almacenamiento secundario. Tiene como objetivo fundamental organizar de manera efectiva una coleccin de registros para facilitar y agilizar su acceso.
Es un recurso para encontrar informacin. El ndice contiene una lista de temas (llaves) y nmeros de pginas donde encontraremos esos temas (campos de referencia).
ndice:
Archivos en C++
Archivos y streams
C++ reconoce y opera con un archivo simplemente como una secuencia de bytes
Un archivo finaliza ya sea con una marca de end-of-file (eof) o en un nmero de byte determinado (que determina el tamao del archivo)
Archivos y streams
Cuando un archivo se abre, se instancia un objeto archivo denominado stream a travs de una variable.
El objeto archivo es asociado a esa variable, que har de nombre lgico del archivo. Para realizar estas acciones en C++ deben incluirse las libreras <iostream> y <fstream> que contienen las clases del mismo nombre.
close()
Cerrar un archivo: Se encarga de vaciar los buffers que usa el archivo y desconectar la conexin entre el dispositivo de almacenamiento y el programa.
archi.close();
eof()
DevuelvePara conocer si se ha llegado al final del archivo al leerlo.
archi.eof();
fail() Retorna true en los mismos casos que bad() y adems en caso
de que ocurra un error de formato, como tratar de leer un nmero entero y obtener una letra.
Archivos de texto
Se organiza la secuencia de bits de manera de formar caracteres. De esta manera funciona cin y cout, por lo que podemos utilizar los operadores de redireccin << y >>. Los caracteres pertenecen al cdigo ASCII por lo que los datos del archivo son fcilmente portables.
Archivos de texto
El acceso es secuencial y los datos no tienen que estar dispuestos en una estructura lgica.
Al no tener estuctura C++ solo identifica lneas y algunos separadores. La entrada y salida por consola es un caso especial de archivo de texto.
// EJ1: escribiendo en un archivo de texto #include <fstream.h> int main () { ofstream archi(C:\mis_cosas\ archi.txt); if (archi.is_open()) { archi << "Esto es una lnea.\n"; archi << Segunda lnea.\n"; archi.close(); } else cout << El archivo no pudo abrirse; return 0; }
El uso de getline()
getline() puede emplearse para leer lneas completas o parte una lnea de un archivo de texto. Con cstrings el formato es: archi.getline(cstr, n)
La extraccin << e insercin >> en archivos de texto es idntica a la empleada con objetos cin y cout en modo consola.
La diferencia sustancial entre consola y archivo es la no permanencia de la informacin en el soporte. (display de video).
Se debe tener en cuenta que en la insercin (lectura desde el archivo de texto ) el espacio en blanco hace de separador de datos.
En la insercin (escritura en el archivo de texto), es fundamental considerar el uso de los manipuladores de formato para disponer la informacin de un modo fcilmente recuperable.
Archivos de texto
Caso de estudio 1: Leer las lneas de un archivo de texto e incorporarlas a un nico objeto string. Mostrar el contenido del objeto. Caso de estudio 2:
Leer los nombres y calificaciones de un grupo de estudiantes que se halan en el archivo NOTAS.TXT. Determinar el promedio de cada alumno e informarlo junto a su nombre. Lpez Andrs Los datos del archivo se disponen como lo indica el recuadro.
67 89 75 Gimelli Pablo 65 72 60 . . .
Archivos binarios
Limitacin de los archivos de texto de los datos a almacenar. Problemas en la lectura de caracteres como eof. Tamao de los elementos almacenados. Procesamiento implcito o explcito de lo que se lee.
Archivos binarios
Entrada/Salida con write y read
write es una funcin de ostream, heredada por ofstream. write ( char * variable, streamsize tamanio ); read es una funcin de istream heredada por ifstream read ( char * variable, streamsize tamanio ); variable es la direccin de un bloque de memoria donde los datos a leer estn almacenados o desde se tomarn los datos que desean escribirse. tamanio es un valor entero que especifica el nmero de bytes/caracteres a ser ledos/escritos desde/hacia el buffer. Los objetos de tipo fstream poseen ambas funciones.
Archivos binarios
Se puede leer y escribir simultneamente. El aceso a cada byte es directo. El acceso es a travs de direcciones lo que hace la E/S ms rpida que en los archivos de texto. Cualquiera sea el tipo del archivo, se puede acceder con un archivo binario.
menos, un puntero de flujo. ifstream, como istream, tiene un puntero conocido como puntero get que apunta al elemento que ser ledo a continuacin. ofstream, como ostream, tiene un puntero llamado puntero put que apunta al lugar donde ser escrito el siguiente elemento. Finalmente fstream, como iostream, hereda ambos: get y put
tellg()
tellp()
Estas dos funciones no admiten parmetros Devuelven un valor de tipo pos_type (de acuerdo al standard ANSIC++) que es un nmero entero y representa la posicin actual del puntero de flujo get (en el caso de tellg) o del puntero de flujo put (en el caso de tellp).
seekg()
seekp()
seekg (off_type desplazamiento, seekdir direccin); seekp (off_type desplazamiento, seekdir direccin);
Ejemplo:
archi.seekp(8, ios::beg);
Direccin ios::beg ios::cur ios::end Significado Desde el inicio (begin) Desde la posicin actual (current) Desde el final
// Ejemplo determinar el tamao de un archivo // y almacenar todos su informacin en un cstring ... const char *nom = "archi.txt";
int main () {char *datos; long tamanio; ifstream arhi(nom,ios::in|ios::binary|ios::ate); tamanio = archi.tellg(); datos = new char [tamanio]; archi.seekg(0, ); archi.read (datos, tamanio); archi.close(); cout << "El archivo est en una variable"; delete datos; return 0; }
ejemplo 7.8. Uso de read() y write() en un archivo // que contiene nmeros flotantes ...
main() { float dato1=34.5, dato2=19.5, dato3; fstream archi(reales.dat,ios::in|ios::out|ios::binary|ios::ate); archi.write(&dato1, sizeof(dato1)); archi.write(&dato2, sizeof(dato2)); archi.seekg (sizeof(float), ios::beg); archi.read(&dato, sizeof(dato)); cout << dato; }