SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
ARCHIVOS DE REGISTROS

Podemos entender archivos binarios, como archivos de registros o archivos de longitud fija, existen
algunas leves diferencias entre estos tres conceptos pero en esencia hay muchas similitudes y
coincidencias, sin embargo nos referiremos a archivos de registros.

Si hablamos de archivos de registros entonces estaremos almacenando en cada linea de archivo,
registros cuya información tenga una estructura igual en cada linea. Observemos la figura

         Posición    Nombre       Apellido       Edad
                0 Antonia       Perez              50       <== 1ra linea/fila o registro
                1 Carlos        Monsalve           44       <== 2da linea/fila o registro
                2 Mariana       Urdaneta           18       <== 3ra linea/fila o registro

Veamos un ejercicio en C++ donde se almacenan varios registros definidos con la sentencia struct para
organizar los datos.

Definimos la estructura de la siguiente manera

typedef struct {
       char Nombre[20];
       char Apellido[20];
       int Edad;
} datos_persona;

Podemos asignar valores solicitándolos al usuario cuando ejecutemos el programa o asignar valores de
prueba directamente en el código para fines prácticos como lo hacemos a continuación ..

datos_persona persona;

persona.Nombre = “Antonia”;
persona.Apellido = “Perez”;
persona.Edad = 50;

o así

datos_persona persona;

persona = {“Antonia”,”Perez”,50};

También podríamos declarar un arreglo de varios elementos y asignar valores de la siguiente forma ..

datos_persona Vpersonas[3]; // colocamos V de Vector como prefijo al identificador del arreglo

Vpersonas = {{“Antonia”,”Perez”,50},{“Carlos”,”Monsalve”,44},{“Mariana”,”Urdaneta”,18}};

Entrando de nuevo en materia de archivos, sabemos que si queremos almacenar datos en un archivo de
registros debemos indicarle tal instrucción en el programa al momento de aperturarlo. Veamos como
hacerlo:

FILE *fichero;

fichero = fopen(“datos_personas.dat”,”wb”); // <= wb significa de escritura (crearlo) y binario
if (fichero == NULL) {
      cout << “Error: No puede abrir el archivo”;
      return -1
}

Una vez que el archivo se encuentra creado y abierto, podemos ahora ingresar o copiar datos dentro del
archivo, podemos hacerlos con la sentencia fwrite(), que me permite copiar uno o varios registros de
una vez, veamos como:

Si deseamos copiar un solo registro, lo haremos de la siguiente manera,

fwrite (persona, sizeof(datos_persona), 1, fichero);

El orden de los parámetros es el siguiente, primero colocamos la variable donde están los datos que
deseamos almacenar, luego el tamaño del registro en bytes (esto lo conseguimos con la función
sizeof(tipodedato)), seguimos con la cantidad de registros a almacenar y por ultimo el identificador del
archivo donde deseamos almacenar la información.

Ahora, si deseamos copiar varios registros (y lo tenemos almacenado en un arreglo), lo haremos de la
siguiente manera.

fwrite (Vpersonas, sizeof(datos_persona), 3, fichero);

Observe que el primer parámetro es una arreglo, el tamaño del registro sigue siendo el mismo, el
número de registros son los almacenados en el arreglo (en este caso 3) y por supuesto el último es el
identificador del archivo.

Ahora solo quedaría cerrar el archivo y con otro ejercicio podemos consultar los datos para verificar su
almacenamiento.

Nuestro código final quería así ..

int main() {

   typedef struct {
       char Nombre[20];
       char Apellido[20];
       int Edad;
   } datos_persona;

   datos_persona Vpersonas[3];
   Vpersonas = {{“Antonia”,”Perez”,50},{“Carlos”,”Monsalve”,44},{“Mariana”,”Urdaneta”,18}};
FILE *fichero;

    fichero = fopen(“datos_personas.dat”,”wb”); // <= wb significa de escritura (creado) y binario
    if (fichero == NULL) {
          cout << “Error: No puede abrir el archivo”;
          return -1
    }

    fwrite (Vpersonas, sizeof(datos_persona), 3, fichero);

    fclose(fichero);
}

Ahora vamos a ver como hacer para leer nuestro archivo de registros.

Al tener un archivo de registros y no de lineas de texto, tenemos la ventaja que todas las filas o lineas
del archivo tienen la misma longitud, es por ello que también lo llamamos archivos de longitud fija o
registro fijo. Esto nos permitirá ir directamente a leer cualquier registro del archivo sin tener que leer y
pasar previamente por las lineas anteriores (algo parecido a los arreglos), para ello haremos uso de las
funciones: fseek() y ftell()

fseek() nos permitirá situar el cursor del archivo en cualquier línea (o fila) del mismo, así podremos
acceder la información del registro almacenada en la posición indicada, para ubicar el cursor en una
linea determinada debemos conocer el tamaño del registro y multiplicarlo por la cantidad de líneas (o
filas) que deseamos desplazar. Este desplazamiento lo podemos realizar desde el inicio del archivo, el
fin de archivo o la posición actual del curso, el mismo será indicado por parámetro a la función.

Si deseamos ubicar el cursor del archivo en la 3da linea (la que se encuentra en la posición 2)
podriamos ejecutar la siguiente instrucción:


          Posición     Nombre       Apellido        Edad
                  0 Antonia       Perez               50       <== 1ra linea/fila o registro
                  1 Carlos        Monsalve            44       <== 2da linea/fila o registro
      Cursor => 2 Mariana         Urdaneta            18       <== 3ra linea/fila o registro
                  3 Luisa         Perales             14       <== 4ta linea/fila o registro


// Realiza el desplazamiento desde el inicio del archivo
fseek (fichero, 2*sizeof(datos_persona), SEEK_SET);

La función ftell() nos permitirá conocer la posición en bytes donde se encuentra el cursos del archivo,
el cual al ser dividido por el tamaño del registro nos indica el número de la linea donde se encuentra el
cursor dentro del archivo.

La función de lectura de un archivo de registros a utilizar será fread, la cual nos permite leer uno o
varios registros desde la posición donde este ubicado el cursor del archivo y al igual que fwrite,
requiere que sea enviado por parámetro el tamaño del registro y número de registros a leer, que serán
almacenados en la variable indicada como primer parámetro. Veamos como:

fread (&persona, sizeof(datos_persona), 1, fichero);

Veamos un código donde leemos y mostramos por pantalla todas la filas de un archivo de registros.

int main() {

    typedef struct {
        char Nombre[20];
        char Apellido[20];
        int Edad;
    } datos_persona;

    datos_persona personas;
    FILE *fichero;

    fichero = fopen(“datos_personas.dat”,”rb”);
    if (fichero == NULL) {
          cout << “Error: No puede abrir el archivo”;
          return -a;
    }

    int pos = 0;
    int reg_leidos;
    while (!feof(fichero))
    {
        fseek (fichero, pos * sizeof(datos_persona) , SEEK_SET);

        reg_leidos = fread (&persona, sizeof(datos_persona), 1, fichero);
        if (reg_leidos == 0)
            break;

        cout << “Nombre y Apellido : ” << persona.Nombre << “, ” << persona.Apellido << endl;
        cout << “Edad : ” << persona.Edad;
        pos = pos +1;
    }

    fclose(fichero);
}

Ejercicios:

1) Hacer un programa que escriba los registros del archivo al revés desde el último hasta el primero.
2) Hacer una función que me diga cuantos registros tiene una archivo binario de registro fijo.
3) Hacer un programa que dado el archivo del ejemplo de la guía me permita buscar la edad de una
persona dado su nombre y apellido (no cargar el archivo en un vector)
4) Hacer un programa que permita realizar el ejercicio 3) con búsqueda binaria.

Weitere ähnliche Inhalte

Was ist angesagt?

Comandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntuComandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntu
Monchitocm Cuemtz
 
Guia basica de comandos ubuntu
Guia basica de comandos ubuntuGuia basica de comandos ubuntu
Guia basica de comandos ubuntu
ssxdan
 
Practica1 complemento comandos
Practica1  complemento comandosPractica1  complemento comandos
Practica1 complemento comandos
Lorenzo Arce Gomez
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE C
leonard1994
 
Taller Linea de Comandos - Linuxec 29o
Taller Linea de Comandos - Linuxec 29oTaller Linea de Comandos - Linuxec 29o
Taller Linea de Comandos - Linuxec 29o
Tomás Vírseda
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++
EdsonRc
 

Was ist angesagt? (20)

Tarea 6
Tarea 6Tarea 6
Tarea 6
 
Unix
UnixUnix
Unix
 
Capitulo 9, 11 11
Capitulo 9, 11 11Capitulo 9, 11 11
Capitulo 9, 11 11
 
Administarcion de ficheros
Administarcion de ficherosAdministarcion de ficheros
Administarcion de ficheros
 
Comandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntuComandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntu
 
Guia cap 9 dorazio 11 11
Guia cap 9 dorazio 11 11Guia cap 9 dorazio 11 11
Guia cap 9 dorazio 11 11
 
Guia basica de comandos ubuntu
Guia basica de comandos ubuntuGuia basica de comandos ubuntu
Guia basica de comandos ubuntu
 
Comandos de ubuntu
Comandos de ubuntuComandos de ubuntu
Comandos de ubuntu
 
PERMISOS EN UBUNTU
PERMISOS EN UBUNTUPERMISOS EN UBUNTU
PERMISOS EN UBUNTU
 
Practica1 complemento comandos
Practica1  complemento comandosPractica1  complemento comandos
Practica1 complemento comandos
 
Manual learn the command line
Manual learn the command lineManual learn the command line
Manual learn the command line
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE C
 
Cap 9
Cap 9Cap 9
Cap 9
 
Taller Linea de Comandos - Linuxec 29o
Taller Linea de Comandos - Linuxec 29oTaller Linea de Comandos - Linuxec 29o
Taller Linea de Comandos - Linuxec 29o
 
Haberle pastrian capitulo 9
Haberle pastrian capitulo 9Haberle pastrian capitulo 9
Haberle pastrian capitulo 9
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Archivos secuenciales indexados UMG grupo 3
Archivos secuenciales indexados UMG grupo 3Archivos secuenciales indexados UMG grupo 3
Archivos secuenciales indexados UMG grupo 3
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++
 
Introducción a MS-DOS.
Introducción a MS-DOS.Introducción a MS-DOS.
Introducción a MS-DOS.
 
Comandos
ComandosComandos
Comandos
 

Andere mochten auch (12)

Localizacion
LocalizacionLocalizacion
Localizacion
 
Arquitectura del sistema y niveles de ejecución
Arquitectura del sistema y niveles de ejecuciónArquitectura del sistema y niveles de ejecución
Arquitectura del sistema y niveles de ejecución
 
Sistemade ficheros
Sistemade ficherosSistemade ficheros
Sistemade ficheros
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
 
Manejo de archivos en el lenguaje C
Manejo de archivos en el lenguaje CManejo de archivos en el lenguaje C
Manejo de archivos en el lenguaje C
 
Archivonomía documento registro y archivo
Archivonomía   documento registro y archivoArchivonomía   documento registro y archivo
Archivonomía documento registro y archivo
 
Metodo de busqueda secuencial
Metodo de busqueda secuencialMetodo de busqueda secuencial
Metodo de busqueda secuencial
 
Archivo Secuencial
Archivo SecuencialArchivo Secuencial
Archivo Secuencial
 
ARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE CARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE C
 
Arboles binarios
Arboles binariosArboles binarios
Arboles binarios
 
Estructuras en C
Estructuras en CEstructuras en C
Estructuras en C
 
Administracion archivos sena
Administracion archivos senaAdministracion archivos sena
Administracion archivos sena
 

Ähnlich wie Archivos de Registros

Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++
mauro0210
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
Darwin Durand
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficheros
Bryan Gordillo
 
Framework .NET 3.5 14 Gestión de archivos y serialización
Framework .NET 3.5 14  Gestión de archivos y serializaciónFramework .NET 3.5 14  Gestión de archivos y serialización
Framework .NET 3.5 14 Gestión de archivos y serialización
Antonio Palomares Sender
 

Ähnlich wie Archivos de Registros (20)

Archivossin
ArchivossinArchivossin
Archivossin
 
funcion de archivo secuencial
funcion de archivo secuencial funcion de archivo secuencial
funcion de archivo secuencial
 
Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++
 
Archivos C++
Archivos C++Archivos C++
Archivos C++
 
Archivos secuenciales indexados
Archivos secuenciales indexadosArchivos secuenciales indexados
Archivos secuenciales indexados
 
Prog_II_archivo_guia_5
Prog_II_archivo_guia_5Prog_II_archivo_guia_5
Prog_II_archivo_guia_5
 
Tema1oficial
Tema1oficialTema1oficial
Tema1oficial
 
Acceso a datos
Acceso a datosAcceso a datos
Acceso a datos
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 
Archivos en c clase unsam
Archivos en c clase unsamArchivos en c clase unsam
Archivos en c clase unsam
 
Ficheros en Java marisabc
Ficheros en Java marisabcFicheros en Java marisabc
Ficheros en Java marisabc
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficheros
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficheros
 
Qbasic2
Qbasic2Qbasic2
Qbasic2
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
 
7 manejo de archivos
7 manejo de archivos7 manejo de archivos
7 manejo de archivos
 
Framework .NET 3.5 14 Gestión de archivos y serialización
Framework .NET 3.5 14  Gestión de archivos y serializaciónFramework .NET 3.5 14  Gestión de archivos y serialización
Framework .NET 3.5 14 Gestión de archivos y serialización
 
Utilización de la clase math
Utilización de la clase mathUtilización de la clase math
Utilización de la clase math
 
(86)resumen visual basic
(86)resumen visual basic(86)resumen visual basic
(86)resumen visual basic
 

Mehr von Javier Rivera

4to Examen PII UNEFA
4to Examen PII  UNEFA4to Examen PII  UNEFA
4to Examen PII UNEFA
Javier Rivera
 
Lenguaje de Programación II
Lenguaje de Programación IILenguaje de Programación II
Lenguaje de Programación II
Javier Rivera
 

Mehr von Javier Rivera (19)

Tipo de Bloques: Scratch
Tipo de Bloques: ScratchTipo de Bloques: Scratch
Tipo de Bloques: Scratch
 
Arquitectura moderna
Arquitectura modernaArquitectura moderna
Arquitectura moderna
 
Capacidad Electrica
Capacidad ElectricaCapacidad Electrica
Capacidad Electrica
 
Tecnologías de Redes 2 (WAN)
Tecnologías de Redes 2 (WAN)Tecnologías de Redes 2 (WAN)
Tecnologías de Redes 2 (WAN)
 
Tecnologías de Redes 1 (LAN)
Tecnologías de Redes 1 (LAN)Tecnologías de Redes 1 (LAN)
Tecnologías de Redes 1 (LAN)
 
Programa detallado de Redes UNEFA
Programa detallado de Redes UNEFAPrograma detallado de Redes UNEFA
Programa detallado de Redes UNEFA
 
Diseño arquitectonico 1
Diseño arquitectonico 1Diseño arquitectonico 1
Diseño arquitectonico 1
 
Proyecto de Comunidad Virtual de Aprendizaje para el uso y desarrollo de soft...
Proyecto de Comunidad Virtual de Aprendizaje para el uso y desarrollo de soft...Proyecto de Comunidad Virtual de Aprendizaje para el uso y desarrollo de soft...
Proyecto de Comunidad Virtual de Aprendizaje para el uso y desarrollo de soft...
 
Propuesta Capacitación de Herramientas Didácticas TIC
Propuesta Capacitación de Herramientas Didácticas TICPropuesta Capacitación de Herramientas Didácticas TIC
Propuesta Capacitación de Herramientas Didácticas TIC
 
Grupo2MacroDisenoLibreOffice
Grupo2MacroDisenoLibreOfficeGrupo2MacroDisenoLibreOffice
Grupo2MacroDisenoLibreOffice
 
Modelo trabajo de investigacion Grupo2
Modelo trabajo de investigacion Grupo2Modelo trabajo de investigacion Grupo2
Modelo trabajo de investigacion Grupo2
 
Elearning reto docente
Elearning reto docenteElearning reto docente
Elearning reto docente
 
4to Examen PII UNEFA
4to Examen PII  UNEFA4to Examen PII  UNEFA
4to Examen PII UNEFA
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Examen 3 unefa
Examen 3 unefa Examen 3 unefa
Examen 3 unefa
 
Examen1 LP2
Examen1 LP2Examen1 LP2
Examen1 LP2
 
Ordenamiento básico
Ordenamiento básicoOrdenamiento básico
Ordenamiento básico
 
Lenguaje de Programación II
Lenguaje de Programación IILenguaje de Programación II
Lenguaje de Programación II
 
Modelado del análisis
Modelado del análisisModelado del análisis
Modelado del análisis
 

Kürzlich hochgeladen

Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Fernando Solis
 

Kürzlich hochgeladen (20)

Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnn
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 

Archivos de Registros

  • 1. ARCHIVOS DE REGISTROS Podemos entender archivos binarios, como archivos de registros o archivos de longitud fija, existen algunas leves diferencias entre estos tres conceptos pero en esencia hay muchas similitudes y coincidencias, sin embargo nos referiremos a archivos de registros. Si hablamos de archivos de registros entonces estaremos almacenando en cada linea de archivo, registros cuya información tenga una estructura igual en cada linea. Observemos la figura Posición Nombre Apellido Edad 0 Antonia Perez 50 <== 1ra linea/fila o registro 1 Carlos Monsalve 44 <== 2da linea/fila o registro 2 Mariana Urdaneta 18 <== 3ra linea/fila o registro Veamos un ejercicio en C++ donde se almacenan varios registros definidos con la sentencia struct para organizar los datos. Definimos la estructura de la siguiente manera typedef struct { char Nombre[20]; char Apellido[20]; int Edad; } datos_persona; Podemos asignar valores solicitándolos al usuario cuando ejecutemos el programa o asignar valores de prueba directamente en el código para fines prácticos como lo hacemos a continuación .. datos_persona persona; persona.Nombre = “Antonia”; persona.Apellido = “Perez”; persona.Edad = 50; o así datos_persona persona; persona = {“Antonia”,”Perez”,50}; También podríamos declarar un arreglo de varios elementos y asignar valores de la siguiente forma .. datos_persona Vpersonas[3]; // colocamos V de Vector como prefijo al identificador del arreglo Vpersonas = {{“Antonia”,”Perez”,50},{“Carlos”,”Monsalve”,44},{“Mariana”,”Urdaneta”,18}}; Entrando de nuevo en materia de archivos, sabemos que si queremos almacenar datos en un archivo de
  • 2. registros debemos indicarle tal instrucción en el programa al momento de aperturarlo. Veamos como hacerlo: FILE *fichero; fichero = fopen(“datos_personas.dat”,”wb”); // <= wb significa de escritura (crearlo) y binario if (fichero == NULL) { cout << “Error: No puede abrir el archivo”; return -1 } Una vez que el archivo se encuentra creado y abierto, podemos ahora ingresar o copiar datos dentro del archivo, podemos hacerlos con la sentencia fwrite(), que me permite copiar uno o varios registros de una vez, veamos como: Si deseamos copiar un solo registro, lo haremos de la siguiente manera, fwrite (persona, sizeof(datos_persona), 1, fichero); El orden de los parámetros es el siguiente, primero colocamos la variable donde están los datos que deseamos almacenar, luego el tamaño del registro en bytes (esto lo conseguimos con la función sizeof(tipodedato)), seguimos con la cantidad de registros a almacenar y por ultimo el identificador del archivo donde deseamos almacenar la información. Ahora, si deseamos copiar varios registros (y lo tenemos almacenado en un arreglo), lo haremos de la siguiente manera. fwrite (Vpersonas, sizeof(datos_persona), 3, fichero); Observe que el primer parámetro es una arreglo, el tamaño del registro sigue siendo el mismo, el número de registros son los almacenados en el arreglo (en este caso 3) y por supuesto el último es el identificador del archivo. Ahora solo quedaría cerrar el archivo y con otro ejercicio podemos consultar los datos para verificar su almacenamiento. Nuestro código final quería así .. int main() { typedef struct { char Nombre[20]; char Apellido[20]; int Edad; } datos_persona; datos_persona Vpersonas[3]; Vpersonas = {{“Antonia”,”Perez”,50},{“Carlos”,”Monsalve”,44},{“Mariana”,”Urdaneta”,18}};
  • 3. FILE *fichero; fichero = fopen(“datos_personas.dat”,”wb”); // <= wb significa de escritura (creado) y binario if (fichero == NULL) { cout << “Error: No puede abrir el archivo”; return -1 } fwrite (Vpersonas, sizeof(datos_persona), 3, fichero); fclose(fichero); } Ahora vamos a ver como hacer para leer nuestro archivo de registros. Al tener un archivo de registros y no de lineas de texto, tenemos la ventaja que todas las filas o lineas del archivo tienen la misma longitud, es por ello que también lo llamamos archivos de longitud fija o registro fijo. Esto nos permitirá ir directamente a leer cualquier registro del archivo sin tener que leer y pasar previamente por las lineas anteriores (algo parecido a los arreglos), para ello haremos uso de las funciones: fseek() y ftell() fseek() nos permitirá situar el cursor del archivo en cualquier línea (o fila) del mismo, así podremos acceder la información del registro almacenada en la posición indicada, para ubicar el cursor en una linea determinada debemos conocer el tamaño del registro y multiplicarlo por la cantidad de líneas (o filas) que deseamos desplazar. Este desplazamiento lo podemos realizar desde el inicio del archivo, el fin de archivo o la posición actual del curso, el mismo será indicado por parámetro a la función. Si deseamos ubicar el cursor del archivo en la 3da linea (la que se encuentra en la posición 2) podriamos ejecutar la siguiente instrucción: Posición Nombre Apellido Edad 0 Antonia Perez 50 <== 1ra linea/fila o registro 1 Carlos Monsalve 44 <== 2da linea/fila o registro Cursor => 2 Mariana Urdaneta 18 <== 3ra linea/fila o registro 3 Luisa Perales 14 <== 4ta linea/fila o registro // Realiza el desplazamiento desde el inicio del archivo fseek (fichero, 2*sizeof(datos_persona), SEEK_SET); La función ftell() nos permitirá conocer la posición en bytes donde se encuentra el cursos del archivo, el cual al ser dividido por el tamaño del registro nos indica el número de la linea donde se encuentra el cursor dentro del archivo. La función de lectura de un archivo de registros a utilizar será fread, la cual nos permite leer uno o varios registros desde la posición donde este ubicado el cursor del archivo y al igual que fwrite,
  • 4. requiere que sea enviado por parámetro el tamaño del registro y número de registros a leer, que serán almacenados en la variable indicada como primer parámetro. Veamos como: fread (&persona, sizeof(datos_persona), 1, fichero); Veamos un código donde leemos y mostramos por pantalla todas la filas de un archivo de registros. int main() { typedef struct { char Nombre[20]; char Apellido[20]; int Edad; } datos_persona; datos_persona personas; FILE *fichero; fichero = fopen(“datos_personas.dat”,”rb”); if (fichero == NULL) { cout << “Error: No puede abrir el archivo”; return -a; } int pos = 0; int reg_leidos; while (!feof(fichero)) { fseek (fichero, pos * sizeof(datos_persona) , SEEK_SET); reg_leidos = fread (&persona, sizeof(datos_persona), 1, fichero); if (reg_leidos == 0) break; cout << “Nombre y Apellido : ” << persona.Nombre << “, ” << persona.Apellido << endl; cout << “Edad : ” << persona.Edad; pos = pos +1; } fclose(fichero); } Ejercicios: 1) Hacer un programa que escriba los registros del archivo al revés desde el último hasta el primero. 2) Hacer una función que me diga cuantos registros tiene una archivo binario de registro fijo. 3) Hacer un programa que dado el archivo del ejemplo de la guía me permita buscar la edad de una persona dado su nombre y apellido (no cargar el archivo en un vector) 4) Hacer un programa que permita realizar el ejercicio 3) con búsqueda binaria.