Anda di halaman 1dari 36

PROGRAMACION

Ma.Inga. Susana Beltrn

Archivos

Organizacin
Acceso
Comandos C++
Archivos de texto
Archivos binarios

Ma.Inga. Susana Beltrn

DEFINICION
RECORDATORIO
EJEMPLO
FIN
Ma.Inga. Susana Beltrn

Definicin

Un archivo es un conjunto
sistematizado de informacin
homognea.

Un fichero es una coleccin de


informacin, estructurada en
unidades de acceso llamada
artculos o registros.
Ma.Inga. Susana Beltrn

Organizacin de archivos
Se llama organizacin de archivos la
tcnica empleada para representar y
almacenar registros en archivos.
Existen tres tcnicas fundamentales:
Organizacin secuencial
Organizacin directa o al azar
Organizacin secuencial indexada

Ma.Inga. Susana Beltrn

Organizacin secuencial

Un archivo organizado secuencialmente es


el formado por una sucesin de registro
relacionados de manera que su acceso est
determinado por su ordenamiento.

Los archivos secuenciales operan de la


misma forma como la cola larga, 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.
Ma.Inga. Susana Beltrn

Organizacin directa

Cuando en un archivo el orden fsico no se


corresponde con el orden lgico 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.
Debe haber correspondencia entre los posibles valores
de la clave y las direcciones existentes en el soporte.
Conocer el nmero el nmero de registros que van a
almacenar.
Ma.Inga. Susana Beltrn

Organizacin directa Implementacin

Relacin posicin clave

Funciones de conversin de claves


Hashing

Tablas de bsqueda - ndices

Ma.Inga. Susana Beltrn

Mtodos para resolver


colisiones

Sondeo Lineal: Es un proceso de bsqueda secuencial desde


la direccin de origen hasta la siguiente localidad vecina.

Doble Hashing: Este mtodo consiste en aplicar una nueva


funcin de transformacin a una clave que ya ha incurrido en
colisin.

rea Separada de Desborde: Coloca todo los registros que


provocan un encadenamiento a partir del registro primario.

Cubeta o Bloqueo: Cuando una posicin o direccin de


almacenamiento puede contener varios registros se conoce
como cubeta o bloqueo. Para utilizar este mtodo hay que
saber cuantos registros podrn ser almacenaos en una
direccin. Si las cubetas se desbordan podemos utilizar
sondeo lineal o rea separada de desborde

Ma.Inga. Susana Beltrn

Archivo secuencial
indexado

Indexacin: 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.

ndice: 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).
Ma.Inga. Susana Beltrn

Secuencial indexado

Ma.Inga. Susana Beltrn

Organizacin secuencial
indexado

El tipo de sus registros contiene un


campo clave identificador.

Los registros estn situados en un


soporte direccionable por el orden de
los valores indicados por la clave.

Existe un ndice con cada una de las


posiciones direccionables que
almacena la direccin de la posicin y
el valor de la clave, es decir, en el
ndice encontramos la clave del ltimo
registro y la direccin de acceso al
primer registro bloque.

Ma.Inga. Susana Beltrn

Areas de un archivo
secuencial indexado

MENU

rea de Datos: contiene registros en


forma secuencial, est organizado en
secuenciales de claves sin dejar huecos
intercalados.
rea de ndice: Los niveles de ndice
estn contenidos en una tabla, si
existieran varios ndices enlazados se
denomina nivel de indexacin.
rea de Desbordamiento o
Excedentes: Esta rea es utilizada
para realizar actualizaciones si ello es
necesario. Ma.Inga. Susana Beltrn

Archivos en C++
RECORDATORIO

Ma.Inga. Susana Beltrn

Archivos y streams

C++ ve a cada archivo simplemente como una


secuencia de bytes
Un archivo finaliza ya sea con una marca de
end-of-file (eof) o en un byte determinado
(tamao del archivo) en una estructura de
datos administrada por el sistema operativo
(como un archivo en un directorio)
Cuando un archivo se abre, se instancia un
objeto archivo del tipo adecuado y un stream
(tambin llamado nombre de archivo lgico) es
asociado con este objeto.
Para realizar estas acciones en C++ deben
incluirse los archivos <iostream> y
<fstream>
Ma.Inga. Susana Beltrn

Jerarqua de clases stream

Ma.Inga. Susana Beltrn

Apertura de archivos
ofstream archivo;
archivo.open ("ejemplo.bin", ios::out | ios::app |
ios::binary);
ios::in

Abrir archivo para lectura

ios::out

Abrir archivo para escritura

ios::ate

Posicin inicial: fin del archivo

ios::app

Cada salida se agrega al final del archivo

ios::trunc

Si el archivo ya existe se borra su contenido

ios::binary

Modo binario

ofstream archivo ("ejemplo.bin", ios::out | ios::app |


ios::binary);
Ma.Inga. Susana Beltrn

Funciones de archivos

Cerrar un archivo: Se encarga de


vaciar los buffers que usa el
archivo y cerrar el archivo.
Archivo.close();

Funcin eof(): para conocer si se


ha llegado al final del archivo al
leerlo.
Ma.Inga. Susana Beltrn

Opciones de estado

Permiten conocer el estado de los flujos


de datos
bad() :Retorna true si ocurre una falla en las
operaciones de lectura o escritura. Por ejemplo en caso
de que tratemos de escribir en un archivo que no est
abierto para escritura.
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.
eof() Retorna true si el archivo abierto ha llegado a su
fin.
good() Es el ms genrico: Retorna false en los
mismos casos en los que al llamar a las funciones
previas hubiramos obtenido true.
Ma.Inga. Susana Beltrn
Ejemplos errfile01,errfile02

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 >>.

// escribiendo en un archivo de texto


#include <fstream.h>
int main () {
ofstream ejemplo("ejemplo.txt");
if (ejemplo.is_open()) {
ejemplo << "Esto es una lnea.\n";
ejemplo << "Esto es otra lnea.\n";
ejemplo.close();
}
return 0;}

Ma.Inga. Susana Beltrn

Lectura de archivos de
texto
// leyendo un archivo de texto
#include <iostream>
#include <fstream.h>
int main () {
char buffer[256];
ifstream ejemplo ("ejemplo.txt");
if (! ejemplo.is_open()) {
cout << "Error al abrir el archivo";
exit (1); }
while (! ejemplo.eof() ) {
ejemplo.getline (buffer,100);
cout << buffer << endl; }
return 0;}
Ma.Inga. Susana Beltrn

Esto es una lnea.


Esto es otra lnea.

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.
Ma.Inga. Susana Beltrn

Archivos binarios
(ejemplo)
// readbin.cpp leyendo archivos binarios
#include <iostream>
#include <fstream.h>

El archivo completo est en el buffer

const char * nombre_archivo = "ejemplo.txt";


int main () {
char * buffer;
long tamanio;
ifstream file (nombre_archivo,ios::in|ios::binary|
ios::ate);
tamanio = file.tellg();
buffer = new char [tamanio];
file.read (buffer, tamanio);
file.close();
cout << "El archivo completo est en el buffer";
delete[] buffer;
return 0;}

Ma.Inga. Susana Beltrn

Punteros de flujo get y put

Funciones para obtener posicin


tellg()

tellp()

Funciones para posicionarse


seekg()

seekp()

seekg ( off_type desplazamiento, seekdir direccin );


seekp ( off_type desplazamiento, seekdir direccin );
ios::beg

Desplazamiento especificado desde el principio del flujo

ios::cur

Desplazamiento especificado desde la posicin actual del


puntero

ios::end

Desplazamiento especificado desde el final del flujo

Ma.Inga. Susana Beltrn

Archivos de acceso
aleatorio

Permiten acceso secuencial y


aleatorio.
Es posible insertar elementos y
cambiar sus valores sin tener que
escribir nuevamente el archivo.
Todos los registros del archivo son
del mismo tipo y tamao.
Ma.Inga. Susana Beltrn

Ma.Inga. Susana Beltrn

Ma.Inga. Susana Beltrn

Ma.Inga. Susana Beltrn

MENU

Ma.Inga. Susana Beltrn

EJEMPLO

Ma.Inga. Susana Beltrn

void main()
{
char tecla;
do
#include <stdio.h>
{
#include <ctype.h>
clrscr();
#include <io.h>
centra(14,"Agenda Telefonica");
#include <dos.h>
gotoxy(20,17);printf("Crear.................................1");
#include <string.h>
gotoxy(20,19);printf("Altas.................................2");
#include <conio.h>
gotoxy(20,21);printf("Bajas.................................3");
struct reg
gotoxy(20,23);printf("Modificar.............................4");
{
gotoxy(20,25);printf("Consultas.............................5");
int pos,edo;
gotoxy(20,27);printf("Listado...............................6");
char nom[15],email[15],cel[15];
gotoxy(20,29);printf("Salir.................................7");
} agenda;
gotoxy(20,32);printf("Opcion...............................
void crear();
[ ]\b\b");
void altas();
tecla=getche();
void mostrar();
switch(tecla)
int file_exists(char *filename);
{
int abre_archivo(char *nombre,char *tipo);
case '1': crear();break;
void centra(int fila,char *texto);
case '2': altas();break;
case '6': mostrar();break;
}
}
while(tecla!='7');
Ma.Inga.
Susana Beltrn
}

//CENTRA
void centra(int fila,char *texto)
{
gotoxy((80strlen(texto))/2,fila);printf("%s",texto);
}

if(toupper(op)=='N')
{ //borra contenido y escribe
if(abre_archivo("C:\\AGENDA_T.txt","w+t")==1)
{ centra(40,"SE DESTRUYO EL CONTENIDO PARA
ESCRIBIR");
getch();
return;
}
}
if(toupper(op)=='E')
{ centra(40,"ACABAS DE CANCELAR");
getch();
return;
}
} //fin if
else
{ if(abre_archivo("C:\\AGENDA_T.txt","w+t")==1)
{ centra(35,"SE CREO DE MODO w+t");
getch();
return;
}
else
{ centra(24,"SE ACABA DE CREAR EL ARCHIVO");
getch();
return;
}
}
fclose(archivo);
getch();
}

//CREA ARCHIVO
void crear()
{ char op;
FILE *archivo;
clrscr();
if(file_exists("C:\\AGENDA_T.txt")==1)//si existe
{ centra(21,"EL ARCHIVO YA EXISTE");
gotoxy(18,24);printf("Abrir y escribir (r+t).........................S");
gotoxy(18,26);printf("Borrar Contenido y volver a escribir
(w+t).....N");
gotoxy(18,28);printf("Exit...........................................E");
gotoxy(18,31);printf("Elige Opcion..................................
[ ]\b\b");
op=getche();
if(toupper(op)=='S') //abre para escribir
{
if(abre_archivo("C:\\AGENDA_T.txt","r+t")==1)
{
centra(40,"EL ARCHIVO SE ABRIO PARA ESCRIBIR");
getch();
return;
}
Ma.Inga. Susana Beltrn
}

do {
fread(&agenda,sizeof(agenda),1,archivo);
if(agenda.edo==1 && !feof(archivo))
{
if(agenda.pos==p)
{ band=1;
centra(24,"Ya existe ese registro");
gotoxy(3,12);printf("Registro");
gotoxy(20,12);printf("Nombre");
gotoxy(32,12);printf("Email");
gotoxy(60,12);printf("Celular");
gotoxy(5,13);printf("%d",agenda.pos);
//ALTAS
gotoxy(20,13);printf("%s",agenda.nom);
void altas()
gotoxy(32,13);printf("%s",agenda.email);
{
gotoxy(60,13);printf("%s",agenda.cel);
int band=0,p;
getch();
clrscr();
break;
FILE *archivo;
}
archivo=fopen("C:\\AGENDA_T.txt","r+t");
}
if(archivo==NULL)
} while(!feof(archivo));
{
if(!band)
centra(24,"NO SE PUDO LEER PARA ESCRIBIR (r+t)"); { agenda.pos=p;
}
gotoxy(3,10); printf("Nombre: ");
else
scanf("%s",&agenda.nom);
{
gotoxy(3,12); printf("Email: ");
//SOLICITA ID DE REGISTRO
scanf("%s",&agenda.email);
do
gotoxy(3,14);printf("Celular: ");
{
scanf("%s",&agenda.cel);
clrscr();
agenda.edo=1;
centra(4,"AGENDA TELEFONICA");
fseek(archivo,(p-1)*sizeof(agenda),SEEK_SET);
gotoxy(3,8);printf("Introduce numero de registro: ");
fwrite(&agenda,sizeof(agenda),1,archivo);
scanf("%d",&p);
centra(24,"Acabas de ingresar nuevo numero");
}
}
while(p<=0 || p>100);
} fclose(archivo);
getch();
Ma.Inga.
Susana Beltrn
}

//MOSTRAR DATOS
void mostrar()
{
int band=0,y=10,x=0;
clrscr();
FILE *archivo;
archivo=fopen("C:\\AGENDA_T.txt","rt");
if(archivo==NULL)
{
centra(24,"NO SE ENCONTRO EL ARCHIVO DE LECTURA");
}
else
{
centra(4,"LISTADO");

do
{
fread(&agenda,sizeof(agenda),1,archivo);
if(agenda.edo==1 && !feof(archivo))
{
band=1;
gotoxy(3,7);printf("Registro");
gotoxy(20,7);printf("Nombre");
gotoxy(32,7);printf("Email");
gotoxy(60,7);printf("Celular");
gotoxy(5,y);printf("%d",x);
gotoxy(20,y);printf("%s",agenda.nom);
gotoxy(32,y);printf("%s",agenda.email);
gotoxy(60,y);printf("%s",agenda.cel);
y+=2;
//
x++;
}
x++;
}
while(!feof(archivo));
if(!band)
{
centra(24,"NO SE ENCONTRO NIONGUN DATO");
}
}
fclose(archivo);
getch();
}

Ma.Inga. Susana Beltrn

//EXISTE
int file_exists(char *filename)
{
int existe;
if(access(filename,0)==0)
{
existe=1;
}
return(existe);
}
//ABRE ARCHIVO

El alumno debe
desarrollar los mdulos
de consulta y modificar

int abre_archivo(char *nombre,char *tipo)


{
int valor=0; //si es cero no hay error
FILE *archivo;
archivo=fopen(nombre,tipo);
if(archivo==NULL)
{
valor=1;
centra(24,"ERROR DE ESCRITURA");
}
return valor;
}

Ma.Inga. Susana Beltrn

MENU

FIN
Ma.Inga. Susana Beltrn

Anda mungkin juga menyukai