SlideShare una empresa de Scribd logo
1 de 37
ARCHIVOS SECUENCIALES INDEXADOS
¿Alguna vez has buscado el teléfono de una
persona en la guía telefónica?
Cuando buscas un número telefónico no
buscas secuencialmente desde los nombres
cuya inicial es “a” hasta la “z” lo cual te
llevaría mucho tiempo, si no que abres la guía
por la letra inicial del nombre.
Por ejemplo:
Si desearas buscar “Mario”, abrirías la guía
por la letra “m” y buscarías la cabecera de
páginas hasta encontrar la página más
próxima al nombre, buscando nombre a
nombre hasta encontrar “Mario”.
Como veras la guía es un ejemplo típico de
archivo secuencial indexado con dos niveles
de índices:
1) El nivel superior, para las letras iniciales.
2) El nivel menor, para las cabeceras de
páginas.
Este método contiene dos archivos para
almacenar información relacionada.
Índice: Contiene un dato que identifica a la
información.
Archivo de datos: Contiene toda la información
guardada.
Descripción:
Área de
índices
Área
principal
Archivo de
desbordamiento u
Overflow
1. Área de índices:
Los registros de esta área están formados por
dos campos que permiten identificar cada
registro de forma única:
 El primero contiene una clave del último registro de cada
bloque.
 El segundo contiene el apuntador al archivo principal.
Por ejemplo, si se quieren grabar los estudiantes de cierta
escuela en un archivo secuencial indexado, el campo índice que
se puede elegir es el nombre del estudiante (también se puede
elegir el número de carnet del estudiante).
2. Área Principal:
Es la parte del fichero donde se guardan
los registros ordenados por el valor del
campo “clave”. Contiene un campo que
apunta al archivo de desbordamiento el cual
sirve para insertar registros.
Su acceso se realiza mediante dos
operaciones:
 Primero, buscando en el bloque del registro.
 Luego analiza secuencialmente ese bloque hasta
localizar el registro deseado.
3. Área de Desbordamiento u Overflow:
Tras completar el área primaria, los registros
añadidos posteriormente que no pueden ser
realizadas en el área primaria, serán enviados al
área de overflow.
En este los registros se presentan como una
lista encadenada, en que el puntero al próximo
registro está compuesto por la pista y el lugar
que ocupa el registro dentro de la pista.
Esta lista se mantiene ordenada por clave.
1)
2)
3)
Ejemplo:
Ventajas
Búsqueda mas rápidas gracias a la utilización
de un índice.
Se pueden actualizar los registros en el mismo
fichero nuevo para el proceso de
actualización.
Inconvenientes
Ocupa más espacio en el disco que los ficheros
secuenciales, debido al uso del área de
índices.
Tiende tendencias a que aumente el tiempo
medio de acceso a los registros, cuando se
producen muchas altas nuevas con claves que
hay que intercalar entre las existencias, ya que
aumenta el área de overflow.
Proceso de un Archivo Secuencial
Indexado
Al diseñar un archivo secuencial indexado,
lo primero que hay que decidir es cuál va a ser
el campo clave. Los registros han de ser
grabados en orden secuencial, y
simultáneamente a la grabación de los
registros, el sistema crea los índices en orden
secuencial ascendente del contenido del
campo clave.
Se desarrollan las operaciones (altas, bajas,
consultas…) para un archivo con esta
organización. También es necesario considerar
el inicio y la salida de la aplicación que
procesa un archivo indexado, para cargar y
descargar, respectivamente la tabla de índices.
Tipos de datos
Se declaran dos tipos de estructuras para
representar el registro de datos y el índice
respectivamente:
struct estudiante {
int carnet;
string nombre; };
struct index{
int carnet;
int posicion; };
 Esta declaración de la variable para switch contiene la
variable para almacenar datos de la estructura
estudiante y la variable para almacenar indice y
almacenar temporalmente (aux), durante la busqueda.
int main(){
int opcion, bus;
estudiante alumno, auxi;
index indice, aux;
Creación
 A continuación se abre un do while para repetir el menú cada vez que sea
necesario para realizar las distintas operaciones del programa.
do{
system("cls");
 Declaramos el archivo para almacenar datos del área principal.
ofstream dat("datos.txt", ios::binary | ios::app);
 Declaramos el archivo para almacenar datos y clave del área de índice.
ofstream ind("index.txt", ios::binary | ios::app);
 Declaramos el archivo para buscar datos .
ifstream indic("index.txt", ios::binary);
remove("datos.txt");
 Se coloca un cout con la intención de colocar un texto de bienvenida a todo
usuario que ejecute el programa.
cout<<"*** BIENVENIDOS ***"<<endl<<endl;
 Se crea los cout respectivos para mostrar un menú de opciones para el switch que
hemos declarado anteriormente asi a la hora de ejecutar el programa, el usuario
pueda seleccionar la opción que necesite.
cout<<"1. Ingresar datos de estudiante"<<endl;
cout<<"2. Buscar datos de estudiante"<<endl;
cout<<"3. Borrar registros"<<endl;
cout<<"4. Salir del programa"<<endl;
 En las siguientes líneas colocamos un cout, con la intención de mostrar en la
consola un texto indicando la selección de una opción. Luego se agrega un cin
para indicar donde se almacena la opción que se escriba o indique.
cout<<endl<<"Seleccione una opcion: ";
cin>>opcion;
cout<<endl;
 Este if es para que entre al switch solo si va a ser usado con la condición que el
número de opción este entre 1 (ingresar) y 3 (borrar).
if(opcion>0 && opcion<4){
 Inicio del switch.
switch(opcion){
 Inicia con opción uno en caso de ser seleccionado para ingresar datos.
case 1:
 Esta condición sirve para ver si los archivos a los cuales vamos a escribir se abren
correctamente.
if(!dat && !ind){
cout<<"Error al abrir archivo"<<endl;
}else{
 En caso de que se ejecute o se abra el archivo sin ningún problema
entraría al siguiente paso.
 En estas líneas de código se hace uso del cout que muestra en la consola
el texto dando instrucciones sobre el ingreso del carnet y el cin para
almacenar la información en la variable alumno. Esto hace que podamos
ingresar datos y almacenarlos en la variable alumno.
cout<<"Ingrese carnet: ";
cin>>alumno.carnet;
cout<<endl;
 En las siguientes líneas abrimos un while llamando y determinando la
cantidad de bites que ocupa cada bloque de información.
while(!indic.eof()){
indic.read((char*) &aux, sizeof(struct index));
 Creamos un if.
if (alumno.carnet==aux.carnet){
cout<<"El archivo ya existe, Posicion: "<<aux.posicion;
cout<<endl;
bus=10;
 cierra if
}
 cierra while
}
 cierra archivo indc de busqueda
indic.close();
 Abrimos un if .
if(bus!=10){
 A continuación se crean las siguientes líneas de código para poder pedir, ingresar y
almacenar la información de cada alumno.
cout<<"Ingrese nombre: ";
cin>>alumno.nombre;
cout<<endl;
cout<<"Ingrese edad: ";
cin>>alumno.edad;
cout<<endl;
cout<<"Ingrese carrera: ";
cin>>alumno.carrera;
cout<<endl;
 En la siguiente línea persistimos la estructura en el archivo creado para datos.
dat.write((char*) &alumno, sizeof(struct estudiante));
 En esta línea se cumple con la función de colocar el curso al final del archivo para
ver la ubicación.
dat.seekp(0, ios::end);
 Se le asigna a la variable indice el valor del campo clave.
indice.carnet=alumno.carnet;
 Se determina la posición dividiendo entre el tamaño del archivo para asi nos da
valores desde 1
indice.posicion=dat.tellp()/sizeof(struct estudiante);
 Persistimos la estructura del indice en el archivo.
ind.write((char*) &indice, sizeof(struct index));
 Está línea nos muestra la posición en la que se guarda la estructura.
cout<<"Guardado en posicion: "<<"["<<indice.posicion<<"]"<<endl;
 Así mismo se debe de cerrar ambos archivos al ya haber terminado de
ingresar datos y haber guardado la estructura y esto se logra haciendolo
de la siguiente forma:
dat.close();
ind.close(); }
 La siguiente línea solo detiene el programa y el break finaliza el caso.
system("PAUSE"); break;
 Y cerramos if en case 1.
}
 Empieza el caso 2 el de búsqueda de archivo.
case 2:
 Se coloca una variable que guarda lo que queramos buscar. En este caso la
clave va a ser el carnet.
int buscar;
cout<<"Escriba carnet de alumno a buscar: ";
cin>>buscar;
 Abrimos un while que va a repetir mientras no sea el final del archivo.
while(!indic.eof()){
 La siguiente línea permite que se lea el archivo y guarda en variable aux.
indic.read((char*) &aux, sizeof(struct index));
 Se abre un if comparando si lo que se busca es igual a lo de la variable aux.
if (buscar==aux.carnet){
 Si fuere igual se escribiría lo en la consola lo siguiente y si no fuere así
sigue hasta encontrarlo .
cout<<endl<<"POSICION: "<<aux.posicion;
cout<<endl<<endl;
 Colocamos una variable de tipo ifstream para leer el archivo , en el cual se
encuentra la información que buscamos.
ifstream dato("datos.txt", ios::binary);
bus=aux.posicion-1;
dato.seekg(sizeof(struct estudiante)*bus, ios::beg);
dato.read((char*) &auxi, sizeof(struct estudiante));
 En las siguientes líneas llamamos a cada variable de alumno
para poder mostrar la información del alumno que indique
el usuario.
cout<<"Carnet: "<<auxi.carnet<<endl;
cout<<"Nombre: "<<auxi.nombre<<endl;
cout<<"Edad: "<<auxi.edad<<endl;
cout<<"Carrera: "<<auxi.carrera<<endl;
dato.close();
 Luego debemos de detener el programa por un momento y
eso lo logramos colocando la siguiente línea.
system("PAUSE");
 Como siguiente paso cerramos if comparación
}
 Cerramos while de final del archivo.
}
 Al finalizar la operación se cierra el archivo para la búsqueda.
indic.close();
 se cierra el casa dos.
break;
 Empieza el caso 3 que nos permitirá eliminar datos.
case 3:
bus=0;
if(bus==0){
 Se crean variables de tipo ifstream para lectura con la
intención de abrir los archivos de datos e indíce y
poder realizar el proceso de eliminación de datos.
ifstream eliminar("datos.txt", ios::binary);
ifstream elim_ind("index.txt", ios::binary);
ofstream temporal("temp.txt", ios::binary | ios::out);
ofstream temp_ind("tempi.txt", ios::binary |
ios::out);
 Creamos un if el cual nos mostrara dos opciones indicándonos si
hay error al abrir el archivo o de lo contrario pasaría a la búsqueda
de la información que va a eliminarse.
if(!eliminar || !elim_ind){
cout<<"Error al abrir el archivo"<<endl;
}else{
cout<<"Ingrese el numero de carnet del alumno que desea borrar:
";
cin>>opcion;
while(!eliminar.eof()){
eliminar.read((char*) &auxi, sizeof(struct estudiante));
 A continuación creamos un if para mostrar un texto en la consola
indicando la eliminación del archivo del Área Principal..
if(auxi.carnet==opcion){
cout<<"El archivo se ha eliminado de datos"<<endl;
}else{
temporal.write((char*) &auxi, sizeof(struct estudiante));
}
}
 A continuación se realiza el proceso para la eliminación de los datos en el
Área de Índice.
while(!elim_ind.eof()){
elim_ind.read((char*) &aux, sizeof(struct index));
if(aux.carnet==opcion){
cout<<"El archivo se ha eliminado de indice"<<endl;
}else{
temp_ind.write((char*) &aux, sizeof(struct index));
}
}
}
 En las siguientes líneas finalizamos el proceso de eliminación de
datos.
eliminar.close();
temporal.close();
elim_ind.close();
temp_ind.close();
}
remove("datos.txt");
remove("index.txt");
rename("temp.txt", "datos.txt");
rename("tempi.txt", "index.txt");
 La siguiente línea detiene el programa un momento.
system("PAUSE"); break;
default: break;
 Cerramos switch.
}
 Cerramos if para entrar a switch
}
} while(opcion>0 && opcion!=4);
 La condición del do while es que se va a repetir el menú mientras la variable
opción se mayor a cero(0) y también sea diferente de 4, en caso sea 0 o cuatro se
sale del programa
system("PAUSE");
 Aquí finaliza el programa
}

Más contenido relacionado

La actualidad más candente

Introduction to HiveQL
Introduction to HiveQLIntroduction to HiveQL
Introduction to HiveQLkristinferrier
 
Deep Dive - Amazon Elastic MapReduce (EMR)
Deep Dive - Amazon Elastic MapReduce (EMR)Deep Dive - Amazon Elastic MapReduce (EMR)
Deep Dive - Amazon Elastic MapReduce (EMR)Amazon Web Services
 
Archivos Secuenciales Indexados
Archivos Secuenciales IndexadosArchivos Secuenciales Indexados
Archivos Secuenciales Indexadosjennifergu17
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : ColaEmerson Garay
 
SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...
SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...
SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...Chester Chen
 
composicion de algoritmos
 composicion de algoritmos composicion de algoritmos
composicion de algoritmosG Hoyos A
 
Archivo secuencial indexado
Archivo secuencial indexadoArchivo secuencial indexado
Archivo secuencial indexadolesster ostorga
 
9. Document Oriented Databases
9. Document Oriented Databases9. Document Oriented Databases
9. Document Oriented DatabasesFabio Fumarola
 
Explicacion archivo secuencial indexado
Explicacion archivo secuencial indexadoExplicacion archivo secuencial indexado
Explicacion archivo secuencial indexadoIsrael Lopez perez
 
Introduccion a las bases de datos
Introduccion a las bases de datosIntroduccion a las bases de datos
Introduccion a las bases de datosCristian Salazar C.
 
Protect your private data with ORC column encryption
Protect your private data with ORC column encryptionProtect your private data with ORC column encryption
Protect your private data with ORC column encryptionOwen O'Malley
 

La actualidad más candente (20)

Etl elt simplified
Etl elt simplifiedEtl elt simplified
Etl elt simplified
 
Introduction to HiveQL
Introduction to HiveQLIntroduction to HiveQL
Introduction to HiveQL
 
Deep Dive - Amazon Elastic MapReduce (EMR)
Deep Dive - Amazon Elastic MapReduce (EMR)Deep Dive - Amazon Elastic MapReduce (EMR)
Deep Dive - Amazon Elastic MapReduce (EMR)
 
Data warehouse
Data warehouseData warehouse
Data warehouse
 
Archivos Secuenciales Indexados
Archivos Secuenciales IndexadosArchivos Secuenciales Indexados
Archivos Secuenciales Indexados
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : Cola
 
Diseño de archivos
Diseño de archivosDiseño de archivos
Diseño de archivos
 
Indexing
IndexingIndexing
Indexing
 
SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...
SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...
SF Big Analytics 20190612: Building highly efficient data lakes using Apache ...
 
Base de datos
Base de datosBase de datos
Base de datos
 
composicion de algoritmos
 composicion de algoritmos composicion de algoritmos
composicion de algoritmos
 
Deductive Database
Deductive DatabaseDeductive Database
Deductive Database
 
Archivo secuencial indexado
Archivo secuencial indexadoArchivo secuencial indexado
Archivo secuencial indexado
 
9. Document Oriented Databases
9. Document Oriented Databases9. Document Oriented Databases
9. Document Oriented Databases
 
Estructuras lineales
Estructuras linealesEstructuras lineales
Estructuras lineales
 
Indices 1
Indices 1Indices 1
Indices 1
 
Explicacion archivo secuencial indexado
Explicacion archivo secuencial indexadoExplicacion archivo secuencial indexado
Explicacion archivo secuencial indexado
 
Oracle query optimizer
Oracle query optimizerOracle query optimizer
Oracle query optimizer
 
Introduccion a las bases de datos
Introduccion a las bases de datosIntroduccion a las bases de datos
Introduccion a las bases de datos
 
Protect your private data with ORC column encryption
Protect your private data with ORC column encryptionProtect your private data with ORC column encryption
Protect your private data with ORC column encryption
 

Destacado

Destacado (20)

4033_Gonzalez_Mayra_tp9
4033_Gonzalez_Mayra_tp94033_Gonzalez_Mayra_tp9
4033_Gonzalez_Mayra_tp9
 
Pour mes amis
Pour mes amisPour mes amis
Pour mes amis
 
interview
interviewinterview
interview
 
7779861 booktrustpages
7779861 booktrustpages7779861 booktrustpages
7779861 booktrustpages
 
tmpIoyC3z.pdf_out
tmpIoyC3z.pdf_outtmpIoyC3z.pdf_out
tmpIoyC3z.pdf_out
 
11 fundaciones
11 fundaciones11 fundaciones
11 fundaciones
 
rottlaender-oktoberfest-preview
rottlaender-oktoberfest-previewrottlaender-oktoberfest-preview
rottlaender-oktoberfest-preview
 
Industrial process design.
Industrial process design.Industrial process design.
Industrial process design.
 
Tasca 6.3.repartiments proporcionals
Tasca 6.3.repartiments proporcionals Tasca 6.3.repartiments proporcionals
Tasca 6.3.repartiments proporcionals
 
Trabajo nº1 - Ejempro de Trabajo
Trabajo nº1 - Ejempro de TrabajoTrabajo nº1 - Ejempro de Trabajo
Trabajo nº1 - Ejempro de Trabajo
 
12th
12th12th
12th
 
ITT Degree copy
ITT Degree copyITT Degree copy
ITT Degree copy
 
Hilton guest appreciation
Hilton guest appreciationHilton guest appreciation
Hilton guest appreciation
 
Ltr of Rec_Mr May Stein.PDF
Ltr of Rec_Mr May Stein.PDFLtr of Rec_Mr May Stein.PDF
Ltr of Rec_Mr May Stein.PDF
 
DEBUT - Personalised Staff Development
DEBUT - Personalised Staff DevelopmentDEBUT - Personalised Staff Development
DEBUT - Personalised Staff Development
 
IMPLEMENTACIÓN DE UNA PROPUESTA DE GIRH CON ÉNFASIS EN REFORESTACIÓN DE MANAN...
IMPLEMENTACIÓN DE UNA PROPUESTA DE GIRH CON ÉNFASIS EN REFORESTACIÓN DE MANAN...IMPLEMENTACIÓN DE UNA PROPUESTA DE GIRH CON ÉNFASIS EN REFORESTACIÓN DE MANAN...
IMPLEMENTACIÓN DE UNA PROPUESTA DE GIRH CON ÉNFASIS EN REFORESTACIÓN DE MANAN...
 
Microstation Certificate
Microstation CertificateMicrostation Certificate
Microstation Certificate
 
Fermit India, salesATprojectsalescorp.com
Fermit India, salesATprojectsalescorp.comFermit India, salesATprojectsalescorp.com
Fermit India, salesATprojectsalescorp.com
 
Proyecto Primitivus
Proyecto PrimitivusProyecto Primitivus
Proyecto Primitivus
 
Tu privacidad online web download para reformar
Tu privacidad online  web download para reformarTu privacidad online  web download para reformar
Tu privacidad online web download para reformar
 

Similar a funcion de archivo secuencial

Similar a funcion de archivo secuencial (20)

Archivossin
ArchivossinArchivossin
Archivossin
 
Archivos secuenciales indexados
Archivos secuenciales indexadosArchivos secuenciales indexados
Archivos secuenciales indexados
 
Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++
 
Archivos secuenciales indexados
Archivos secuenciales indexadosArchivos secuenciales indexados
Archivos secuenciales indexados
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
 
Archivos en c clase unsam
Archivos en c clase unsamArchivos en c clase unsam
Archivos en c clase unsam
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
 
(86)resumen visual basic
(86)resumen visual basic(86)resumen visual basic
(86)resumen visual basic
 
Grupo nro4ficheros
Grupo nro4ficherosGrupo nro4ficheros
Grupo nro4ficheros
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
Archivos de Registros
Archivos de RegistrosArchivos de Registros
Archivos de Registros
 
Archivos en C++
Archivos en C++Archivos en C++
Archivos en C++
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 
Lectura y Grabacion de los campos de un Archivo
Lectura y Grabacion de los campos de un ArchivoLectura y Grabacion de los campos de un Archivo
Lectura y Grabacion de los campos de un Archivo
 
Archivos de datos en C
Archivos de datos en CArchivos de datos en C
Archivos de datos en C
 
Desarrollo android - 5 - almacenamiento de datos
Desarrollo android  -  5 - almacenamiento de datosDesarrollo android  -  5 - almacenamiento de datos
Desarrollo android - 5 - almacenamiento de datos
 
Acceso a datos
Acceso a datosAcceso a datos
Acceso a datos
 
ARCHIVOS
ARCHIVOS ARCHIVOS
ARCHIVOS
 
Lectura y Escritura de archivos a MatLab
Lectura y Escritura de archivos a MatLabLectura y Escritura de archivos a MatLab
Lectura y Escritura de archivos a MatLab
 

Último

actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsxactividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx241532171
 
PRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptx
PRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptxPRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptx
PRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptxRodriguezLucero
 
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdfFernandaHernandez312615
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfisrael garcia
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfOscarBlas6
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenadanielaerazok
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAdanielaerazok
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdfFAUSTODANILOCRUZCAST
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webDecaunlz
 
institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenajuniorcuellargomez
 
MODELO CARACTERIZACION DE PROCESOS SENA.
MODELO CARACTERIZACION DE PROCESOS SENA.MODELO CARACTERIZACION DE PROCESOS SENA.
MODELO CARACTERIZACION DE PROCESOS SENA.imejia2411
 
Historia de la Medicina y bases para desarrollo de ella
Historia de la Medicina y bases para desarrollo de ellaHistoria de la Medicina y bases para desarrollo de ella
Historia de la Medicina y bases para desarrollo de ellajuancamilo3111391
 
locomotas v siclo.ppt de ingenieria de minas
locomotas v siclo.ppt de ingenieria de minaslocomotas v siclo.ppt de ingenieria de minas
locomotas v siclo.ppt de ingenieria de minasMirkaCBauer
 
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptxrodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptxssuser61dda7
 

Último (14)

actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsxactividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
actividad.06_crea_un_recurso_multimedia_M01_S03_M01.ppsx
 
PRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptx
PRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptxPRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptx
PRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptx
 
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf2º SOY LECTOR PART 2- MD  EDUCATIVO (6).pdf
2º SOY LECTOR PART 2- MD EDUCATIVO (6).pdf
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdf
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalena
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdf
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la web
 
institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalena
 
MODELO CARACTERIZACION DE PROCESOS SENA.
MODELO CARACTERIZACION DE PROCESOS SENA.MODELO CARACTERIZACION DE PROCESOS SENA.
MODELO CARACTERIZACION DE PROCESOS SENA.
 
Historia de la Medicina y bases para desarrollo de ella
Historia de la Medicina y bases para desarrollo de ellaHistoria de la Medicina y bases para desarrollo de ella
Historia de la Medicina y bases para desarrollo de ella
 
locomotas v siclo.ppt de ingenieria de minas
locomotas v siclo.ppt de ingenieria de minaslocomotas v siclo.ppt de ingenieria de minas
locomotas v siclo.ppt de ingenieria de minas
 
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptxrodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
rodriguez_DelAngel_MariaGPE_M1S3AL6.pptx
 

funcion de archivo secuencial

  • 2. ¿Alguna vez has buscado el teléfono de una persona en la guía telefónica?
  • 3. Cuando buscas un número telefónico no buscas secuencialmente desde los nombres cuya inicial es “a” hasta la “z” lo cual te llevaría mucho tiempo, si no que abres la guía por la letra inicial del nombre.
  • 4. Por ejemplo: Si desearas buscar “Mario”, abrirías la guía por la letra “m” y buscarías la cabecera de páginas hasta encontrar la página más próxima al nombre, buscando nombre a nombre hasta encontrar “Mario”.
  • 5. Como veras la guía es un ejemplo típico de archivo secuencial indexado con dos niveles de índices: 1) El nivel superior, para las letras iniciales. 2) El nivel menor, para las cabeceras de páginas.
  • 6. Este método contiene dos archivos para almacenar información relacionada. Índice: Contiene un dato que identifica a la información. Archivo de datos: Contiene toda la información guardada. Descripción:
  • 8. 1. Área de índices: Los registros de esta área están formados por dos campos que permiten identificar cada registro de forma única:  El primero contiene una clave del último registro de cada bloque.  El segundo contiene el apuntador al archivo principal. Por ejemplo, si se quieren grabar los estudiantes de cierta escuela en un archivo secuencial indexado, el campo índice que se puede elegir es el nombre del estudiante (también se puede elegir el número de carnet del estudiante).
  • 9. 2. Área Principal: Es la parte del fichero donde se guardan los registros ordenados por el valor del campo “clave”. Contiene un campo que apunta al archivo de desbordamiento el cual sirve para insertar registros. Su acceso se realiza mediante dos operaciones:  Primero, buscando en el bloque del registro.  Luego analiza secuencialmente ese bloque hasta localizar el registro deseado.
  • 10.
  • 11. 3. Área de Desbordamiento u Overflow: Tras completar el área primaria, los registros añadidos posteriormente que no pueden ser realizadas en el área primaria, serán enviados al área de overflow. En este los registros se presentan como una lista encadenada, en que el puntero al próximo registro está compuesto por la pista y el lugar que ocupa el registro dentro de la pista. Esta lista se mantiene ordenada por clave.
  • 14. Ventajas Búsqueda mas rápidas gracias a la utilización de un índice. Se pueden actualizar los registros en el mismo fichero nuevo para el proceso de actualización.
  • 15. Inconvenientes Ocupa más espacio en el disco que los ficheros secuenciales, debido al uso del área de índices. Tiende tendencias a que aumente el tiempo medio de acceso a los registros, cuando se producen muchas altas nuevas con claves que hay que intercalar entre las existencias, ya que aumenta el área de overflow.
  • 16. Proceso de un Archivo Secuencial Indexado Al diseñar un archivo secuencial indexado, lo primero que hay que decidir es cuál va a ser el campo clave. Los registros han de ser grabados en orden secuencial, y simultáneamente a la grabación de los registros, el sistema crea los índices en orden secuencial ascendente del contenido del campo clave.
  • 17. Se desarrollan las operaciones (altas, bajas, consultas…) para un archivo con esta organización. También es necesario considerar el inicio y la salida de la aplicación que procesa un archivo indexado, para cargar y descargar, respectivamente la tabla de índices.
  • 18. Tipos de datos Se declaran dos tipos de estructuras para representar el registro de datos y el índice respectivamente: struct estudiante { int carnet; string nombre; }; struct index{ int carnet; int posicion; };
  • 19.  Esta declaración de la variable para switch contiene la variable para almacenar datos de la estructura estudiante y la variable para almacenar indice y almacenar temporalmente (aux), durante la busqueda. int main(){ int opcion, bus; estudiante alumno, auxi; index indice, aux; Creación
  • 20.  A continuación se abre un do while para repetir el menú cada vez que sea necesario para realizar las distintas operaciones del programa. do{ system("cls");  Declaramos el archivo para almacenar datos del área principal. ofstream dat("datos.txt", ios::binary | ios::app);  Declaramos el archivo para almacenar datos y clave del área de índice. ofstream ind("index.txt", ios::binary | ios::app);  Declaramos el archivo para buscar datos . ifstream indic("index.txt", ios::binary); remove("datos.txt");
  • 21.  Se coloca un cout con la intención de colocar un texto de bienvenida a todo usuario que ejecute el programa. cout<<"*** BIENVENIDOS ***"<<endl<<endl;  Se crea los cout respectivos para mostrar un menú de opciones para el switch que hemos declarado anteriormente asi a la hora de ejecutar el programa, el usuario pueda seleccionar la opción que necesite. cout<<"1. Ingresar datos de estudiante"<<endl; cout<<"2. Buscar datos de estudiante"<<endl; cout<<"3. Borrar registros"<<endl; cout<<"4. Salir del programa"<<endl;  En las siguientes líneas colocamos un cout, con la intención de mostrar en la consola un texto indicando la selección de una opción. Luego se agrega un cin para indicar donde se almacena la opción que se escriba o indique. cout<<endl<<"Seleccione una opcion: "; cin>>opcion; cout<<endl;
  • 22.  Este if es para que entre al switch solo si va a ser usado con la condición que el número de opción este entre 1 (ingresar) y 3 (borrar). if(opcion>0 && opcion<4){  Inicio del switch. switch(opcion){  Inicia con opción uno en caso de ser seleccionado para ingresar datos. case 1:  Esta condición sirve para ver si los archivos a los cuales vamos a escribir se abren correctamente. if(!dat && !ind){ cout<<"Error al abrir archivo"<<endl; }else{
  • 23.  En caso de que se ejecute o se abra el archivo sin ningún problema entraría al siguiente paso.  En estas líneas de código se hace uso del cout que muestra en la consola el texto dando instrucciones sobre el ingreso del carnet y el cin para almacenar la información en la variable alumno. Esto hace que podamos ingresar datos y almacenarlos en la variable alumno. cout<<"Ingrese carnet: "; cin>>alumno.carnet; cout<<endl;  En las siguientes líneas abrimos un while llamando y determinando la cantidad de bites que ocupa cada bloque de información. while(!indic.eof()){ indic.read((char*) &aux, sizeof(struct index));
  • 24.  Creamos un if. if (alumno.carnet==aux.carnet){ cout<<"El archivo ya existe, Posicion: "<<aux.posicion; cout<<endl; bus=10;  cierra if }  cierra while }  cierra archivo indc de busqueda indic.close();
  • 25.  Abrimos un if . if(bus!=10){  A continuación se crean las siguientes líneas de código para poder pedir, ingresar y almacenar la información de cada alumno. cout<<"Ingrese nombre: "; cin>>alumno.nombre; cout<<endl; cout<<"Ingrese edad: "; cin>>alumno.edad; cout<<endl; cout<<"Ingrese carrera: "; cin>>alumno.carrera; cout<<endl;
  • 26.  En la siguiente línea persistimos la estructura en el archivo creado para datos. dat.write((char*) &alumno, sizeof(struct estudiante));  En esta línea se cumple con la función de colocar el curso al final del archivo para ver la ubicación. dat.seekp(0, ios::end);  Se le asigna a la variable indice el valor del campo clave. indice.carnet=alumno.carnet;  Se determina la posición dividiendo entre el tamaño del archivo para asi nos da valores desde 1 indice.posicion=dat.tellp()/sizeof(struct estudiante);  Persistimos la estructura del indice en el archivo. ind.write((char*) &indice, sizeof(struct index));
  • 27.  Está línea nos muestra la posición en la que se guarda la estructura. cout<<"Guardado en posicion: "<<"["<<indice.posicion<<"]"<<endl;  Así mismo se debe de cerrar ambos archivos al ya haber terminado de ingresar datos y haber guardado la estructura y esto se logra haciendolo de la siguiente forma: dat.close(); ind.close(); }  La siguiente línea solo detiene el programa y el break finaliza el caso. system("PAUSE"); break;  Y cerramos if en case 1. }
  • 28.  Empieza el caso 2 el de búsqueda de archivo. case 2:  Se coloca una variable que guarda lo que queramos buscar. En este caso la clave va a ser el carnet. int buscar; cout<<"Escriba carnet de alumno a buscar: "; cin>>buscar;  Abrimos un while que va a repetir mientras no sea el final del archivo. while(!indic.eof()){  La siguiente línea permite que se lea el archivo y guarda en variable aux. indic.read((char*) &aux, sizeof(struct index));
  • 29.  Se abre un if comparando si lo que se busca es igual a lo de la variable aux. if (buscar==aux.carnet){  Si fuere igual se escribiría lo en la consola lo siguiente y si no fuere así sigue hasta encontrarlo . cout<<endl<<"POSICION: "<<aux.posicion; cout<<endl<<endl;  Colocamos una variable de tipo ifstream para leer el archivo , en el cual se encuentra la información que buscamos. ifstream dato("datos.txt", ios::binary); bus=aux.posicion-1; dato.seekg(sizeof(struct estudiante)*bus, ios::beg); dato.read((char*) &auxi, sizeof(struct estudiante));
  • 30.  En las siguientes líneas llamamos a cada variable de alumno para poder mostrar la información del alumno que indique el usuario. cout<<"Carnet: "<<auxi.carnet<<endl; cout<<"Nombre: "<<auxi.nombre<<endl; cout<<"Edad: "<<auxi.edad<<endl; cout<<"Carrera: "<<auxi.carrera<<endl; dato.close();  Luego debemos de detener el programa por un momento y eso lo logramos colocando la siguiente línea. system("PAUSE");
  • 31.  Como siguiente paso cerramos if comparación }  Cerramos while de final del archivo. }  Al finalizar la operación se cierra el archivo para la búsqueda. indic.close();  se cierra el casa dos. break;
  • 32.  Empieza el caso 3 que nos permitirá eliminar datos. case 3: bus=0; if(bus==0){  Se crean variables de tipo ifstream para lectura con la intención de abrir los archivos de datos e indíce y poder realizar el proceso de eliminación de datos. ifstream eliminar("datos.txt", ios::binary); ifstream elim_ind("index.txt", ios::binary); ofstream temporal("temp.txt", ios::binary | ios::out); ofstream temp_ind("tempi.txt", ios::binary | ios::out);
  • 33.  Creamos un if el cual nos mostrara dos opciones indicándonos si hay error al abrir el archivo o de lo contrario pasaría a la búsqueda de la información que va a eliminarse. if(!eliminar || !elim_ind){ cout<<"Error al abrir el archivo"<<endl; }else{ cout<<"Ingrese el numero de carnet del alumno que desea borrar: "; cin>>opcion; while(!eliminar.eof()){ eliminar.read((char*) &auxi, sizeof(struct estudiante));
  • 34.  A continuación creamos un if para mostrar un texto en la consola indicando la eliminación del archivo del Área Principal.. if(auxi.carnet==opcion){ cout<<"El archivo se ha eliminado de datos"<<endl; }else{ temporal.write((char*) &auxi, sizeof(struct estudiante)); } }
  • 35.  A continuación se realiza el proceso para la eliminación de los datos en el Área de Índice. while(!elim_ind.eof()){ elim_ind.read((char*) &aux, sizeof(struct index)); if(aux.carnet==opcion){ cout<<"El archivo se ha eliminado de indice"<<endl; }else{ temp_ind.write((char*) &aux, sizeof(struct index)); } } }
  • 36.  En las siguientes líneas finalizamos el proceso de eliminación de datos. eliminar.close(); temporal.close(); elim_ind.close(); temp_ind.close(); } remove("datos.txt"); remove("index.txt"); rename("temp.txt", "datos.txt"); rename("tempi.txt", "index.txt");  La siguiente línea detiene el programa un momento. system("PAUSE"); break;
  • 37. default: break;  Cerramos switch. }  Cerramos if para entrar a switch } } while(opcion>0 && opcion!=4);  La condición del do while es que se va a repetir el menú mientras la variable opción se mayor a cero(0) y también sea diferente de 4, en caso sea 0 o cuatro se sale del programa system("PAUSE");  Aquí finaliza el programa }