SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
Capı́tulo 1
Manipulación de archivos
estructurados
1.1. Introducción
Definición Un archivo es un medio de almacenamiento no volátil, es decir
permanece luego de terminar la aplicación que la utiliza o luego de apagar el
computador. Un archivo se almacena en memoria secundaria como el disco duro,
cd, dvd, etc.
Los archivos llevan asociado un nombre y una extensión, ésta última permite
identificar el tipo del archivo, por ejemplo doc, jpg, bmp, cpp, etc.
Los archivos estructurados se caracterizan por que almacenan los datos re-
spetando un patrón especı́fico que ocupa un determinado espacio. Una de las
aplicaciones más comunes en la que se utiliza archivos estructurados es el de
las bases de datos. Supongamos que deseamos almacenar datos de libros en un
archivo, entonces los datos se estructurarán de acuerdo a lo que interesa alma-
cenar de cada libro, en este caso podemos necesitar representar el tı́tulo, autor,
año de edición, ISBN y editorial. Entonces un conjunto de datos de varios libros
se verán como en la figura 1.1.
Cada uno de los libros en el archivo se representa por un registro. Todos
los registros del archivo se almacenan siguiendo una estructura (struct en C o
C++), discutiremos en la siguiente sección cómo crear una estructura para los
registros, seguiremos usando el ejemplo del libro.
1.2. Estructuras (struct)
Supongamos que tenemos la siguiente estructura para cada registro de libro:
--------------------------------------------------
ISBN | TITULO | AUTOR |ANIO EDICION | EDITORIAL
--------------------------------------------------
Lo primero es determinar el tipo de dato de cada elemento de la estructura,
cada elemento se denomina campo, en el ejemplo hay 5 campos.
1
2 CAPÍTULO 1. MANIPULACIÓN DE ARCHIVOS ESTRUCTURADOS
Figura 1.1: Vista lógica de un archivo de registros de libros.
ISBN: un entero
TITULO: cadena de 20
AUTOR: cadena de 20
ANIO EDICION: entero
EDITORIAL: cadena de 20
La implementación en C o C++ es como sigue:
typedef struct Libro
{
int ISBN;
char titulo[20];
char autor[20];
int anio;
char editorial[20];
}TLibro;
donde TLibro se utiliza como un nuevo tipo de dato que representa un tipo
para cada libro, entonces un libro en particular se puede definir como:
LIBRO miLibro;
y para acceder a cada uno de sus campos utilizaremos el operador punto (.),
por ejemplo:
miLibro.ISBN=2344;
miLibro.titulo="C y C++";
miLibro.autor="D. Ritchie";
miLibro.anio=1999;
miLibro.editorial="Alfa";
Ahora, utilizaremos un archivo para guardar cada registro, esto lo veremos
en la siguiente sección.
1.3. OPERACIONES CON ARCHIVOS 3
1.3. Operaciones con archivos
Para manipular un archivo utilizaremos el tipo FILE (en realidad crearemos
un puntero de tipo FILE) y usaremos las siguientes funciones de stdlib.h.
fopen: Para abrir un archivo y asociarlo con un puntero de tipo FILE. La
sintaxis es como sigue:
FILE *fopen(char *nombre, char *modo)
donde nombre es el nombre del archivo, en el que se puede incluir la ruta
y modo indica la forma en que puede usarse el archivo:
“w ” Para crear un archivo.
“r ” Para leer un archivo.
“a ” Para aadir datos al archivo.
Ejemplo:
FILE *f = fopen("libros.txt","r");
fread: Lee datos del archivo y los pasa a la memoria principal.
fread(void *puntero, size_t tamanyo, size_t nmemb, FILE *f)
donde puntero indica el espacio de memoria en dónde se almacenarán los
datos, tamanyo es la cantidad de bytes a leer, nmemb es la cantidad de
veces que se leerá (asumiremos igual a 1), y f representa el archivo.
fwrite: Lee datos de la memoria principal y los pasa al archivo.
fwrite(void *puntero, size_t tamanyo, size_t nmemb, FILE *f)
donde puntero indica el espacio de memoria desde dónde se leeran los
datos, tamanyo es la cantidad de bytes a escribir, nmemb es la cantidad
de veces que se escribirán (asumiremos igual a 1), y f representa el archivo.
fseek: Permite ubicarnos en cualquier posición del archivo para actualizar
datos.
int fseek(FILE *f, long int desplazamiento, int origen);
La función fseek activa el indicador de posicin de ficheros de f y los de-
splaza seún el parámetro desplazamiento donde la posición inicial es ori-
gen. Se puede utilizar las constantes SEEK SET para indicar como ori-
gen el inicio, SEEK CUR en caso de que origen sea la posición actual
y SEEK END si es el final. Frecuentemente desplazamiento es un valor
obtenido mediante una llamada a la función ftell. Por ejemplo, si se tiene
la posición de un registro X, entonces en cualquier momento podemos
regresar a ubicarnos en ese registro y actualizar sus dato.
ftell: La función ftell obtiene el valor actual del indicador de posición de
fichero para un determinado archivo.
long int ftell(FILE *f);
4 CAPÍTULO 1. MANIPULACIÓN DE ARCHIVOS ESTRUCTURADOS
1.4. Implementacion de las operaciones
Siguiendo con nuestra polı́tica de implementar un programa modularmente,
crearemos dos módulos, uno para guardar un registro y otro para reportar todos
los registro del archivo.
GUARDAR
void guardarLibro(TLibro L, FILE *f)
{
fwrite(&L,sizeof(TLibro),1,f);
}
REPORTAR
void reportarLibro(char *file)
{
FILE *f=fopen(file,"r");
TLibro L;
if (f!=NULL)
{
fread(&L,sizeof(TLibro),1,f);
while(!feof(f))
{
imprimir(L);
fread(&L,sizeof(TLibro),1,f);
}
}
else
{
printf( "Error al abrir el archivo n" );
exit(1);
}
fclose(f);
}
En el módulo anterior usamos la función feof() para determinar si ya se ha leı́do
el final del archivo. Además usamos el módulo imprimir para mostrar los datos:
void imprimir(TLibro L)
{
printf("ISBN : %s n", L.ISBN);
printf("Titulo: %s n", L.titulo);
printf("Anio : %s n", L.autor);
printf("Anio : %d n", L.anio);
printf("Anio : %s n", L.editorial);
}
1.5. Implementación completa
Se adjunta la implementación completa para guardar y reportar datos de un
archivo.
1.6. EJERCICIOS 5
1.6. Ejercicios
Utilizando el código base de la sección anterior, agregue lo necesario para
que el programa soporte búsqueda de un libro por ISBN, es decir se da
el ISBN y el programa debe devolver los datos completos del libro si lo
encuentra o un mensaje de error si no se encuntra un libro con tal ISBN.
Complete el código anterior de modo que su programa soporte modifi-
cación de datos. Por ejemplo supongamos que se desee modificar los datos
del autor de un libro con ISBN determinado.

Más contenido relacionado

La actualidad más candente

ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE C
leonard1994
 
ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C
wILFAab
 
Manejo de archivosss
Manejo de archivosssManejo de archivosss
Manejo de archivosss
taniarodri
 

La actualidad más candente (18)

Sistemas de archivos tarea
Sistemas de archivos tareaSistemas de archivos tarea
Sistemas de archivos tarea
 
Grupo nro4ficheros
Grupo nro4ficherosGrupo nro4ficheros
Grupo nro4ficheros
 
Archivos en C
Archivos en CArchivos en C
Archivos en C
 
Manejo archivos
Manejo archivosManejo archivos
Manejo archivos
 
Comandos de manejo de archivos y directorio
Comandos de manejo de archivos y directorio Comandos de manejo de archivos y directorio
Comandos de manejo de archivos y directorio
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE C
 
Ficheros C++
Ficheros C++Ficheros C++
Ficheros C++
 
ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C
 
Cap 9
Cap 9Cap 9
Cap 9
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
 
CapITULO 9
CapITULO 9CapITULO 9
CapITULO 9
 
ARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE CARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE C
 
Capitulo 9
Capitulo 9Capitulo 9
Capitulo 9
 
Archivos C++
Archivos C++Archivos C++
Archivos C++
 
Slideshare
SlideshareSlideshare
Slideshare
 
Utilizacion de archivos en Dev C++
Utilizacion de archivos en Dev C++Utilizacion de archivos en Dev C++
Utilizacion de archivos en Dev C++
 
Manejo de archivosss
Manejo de archivosssManejo de archivosss
Manejo de archivosss
 
Grupo 1 Archivos Secuenciales Indexados en C++
Grupo 1 Archivos Secuenciales Indexados en C++Grupo 1 Archivos Secuenciales Indexados en C++
Grupo 1 Archivos Secuenciales Indexados en C++
 

Similar a Archivos estructurados

Arreglos Turbo C
Arreglos Turbo CArreglos Turbo C
Arreglos Turbo C
tacubomx
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
programadorjavablog
 
16 Archivos
16 Archivos16 Archivos
16 Archivos
lichic
 
Utp pti_s11_archivos
 Utp pti_s11_archivos Utp pti_s11_archivos
Utp pti_s11_archivos
c09271
 

Similar a Archivos estructurados (20)

Archivos de datos en C
Archivos de datos en CArchivos de datos en C
Archivos de datos en C
 
Manejo dearchivosc
Manejo dearchivoscManejo dearchivosc
Manejo dearchivosc
 
Archivos c
Archivos cArchivos c
Archivos c
 
Archivos c
Archivos cArchivos c
Archivos c
 
Archivos en c clase unsam
Archivos en c clase unsamArchivos en c clase unsam
Archivos en c clase unsam
 
Arreglos Turbo C
Arreglos Turbo CArreglos Turbo C
Arreglos Turbo C
 
Fichc
FichcFichc
Fichc
 
03. Archivos Completo Obliogatorio Para Imprimir.pdf
03. Archivos Completo Obliogatorio Para Imprimir.pdf03. Archivos Completo Obliogatorio Para Imprimir.pdf
03. Archivos Completo Obliogatorio Para Imprimir.pdf
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
16 Archivos
16 Archivos16 Archivos
16 Archivos
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
 
Lopez scotte
Lopez scotteLopez scotte
Lopez scotte
 
Galnares colonna
Galnares colonnaGalnares colonna
Galnares colonna
 
Metodo File Pascal
Metodo File PascalMetodo File Pascal
Metodo File Pascal
 
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientes
 
Guia cap 9 dorazio 11 11
Guia cap 9 dorazio 11 11Guia cap 9 dorazio 11 11
Guia cap 9 dorazio 11 11
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivos
 
Tarea pagweb
Tarea pagwebTarea pagweb
Tarea pagweb
 
Utp pti_s11_archivos
 Utp pti_s11_archivos Utp pti_s11_archivos
Utp pti_s11_archivos
 

Más de José Ricardo Tillero Giménez

Más de José Ricardo Tillero Giménez (20)

PLAN DE EVALUACIÓN REDES AVANZADAS II-2021
PLAN DE EVALUACIÓN REDES AVANZADAS II-2021PLAN DE EVALUACIÓN REDES AVANZADAS II-2021
PLAN DE EVALUACIÓN REDES AVANZADAS II-2021
 
Guía Ejercicios SQL
Guía Ejercicios SQLGuía Ejercicios SQL
Guía Ejercicios SQL
 
Guía 3 Ejercicios de Normalización de Base de Datos
Guía 3 Ejercicios de Normalización de Base de DatosGuía 3 Ejercicios de Normalización de Base de Datos
Guía 3 Ejercicios de Normalización de Base de Datos
 
Guía 1 Ejercicios MR
Guía 1 Ejercicios MRGuía 1 Ejercicios MR
Guía 1 Ejercicios MR
 
Guía 2 Ejercicios de Normalización de Base de Datos
Guía 2 Ejercicios de Normalización de Base de DatosGuía 2 Ejercicios de Normalización de Base de Datos
Guía 2 Ejercicios de Normalización de Base de Datos
 
Guía 3 Ejercicios MER Extendido
Guía 3 Ejercicios MER ExtendidoGuía 3 Ejercicios MER Extendido
Guía 3 Ejercicios MER Extendido
 
Guía 2 Ejercicios MER
Guía 2 Ejercicios MERGuía 2 Ejercicios MER
Guía 2 Ejercicios MER
 
Guía 1 Ejercicios MER
Guía 1 Ejercicios MERGuía 1 Ejercicios MER
Guía 1 Ejercicios MER
 
Plan de evaluación BD2021
Plan de evaluación BD2021Plan de evaluación BD2021
Plan de evaluación BD2021
 
Perfil Docente y Asesoría
Perfil Docente y AsesoríaPerfil Docente y Asesoría
Perfil Docente y Asesoría
 
Planificación BD2021
Planificación BD2021Planificación BD2021
Planificación BD2021
 
UNIDAD 1. El mundo de las Bases de Datos y los SMBD
UNIDAD 1. El mundo de las Bases de Datos y los SMBDUNIDAD 1. El mundo de las Bases de Datos y los SMBD
UNIDAD 1. El mundo de las Bases de Datos y los SMBD
 
NOTAS FINALES DE REDES AVANZADAS IIN4301
NOTAS FINALES DE REDES AVANZADAS IIN4301NOTAS FINALES DE REDES AVANZADAS IIN4301
NOTAS FINALES DE REDES AVANZADAS IIN4301
 
NOTAS FINALES ELECTIVA II IN2102
NOTAS FINALES ELECTIVA II IN2102NOTAS FINALES ELECTIVA II IN2102
NOTAS FINALES ELECTIVA II IN2102
 
NOTAS FINALES ELECTIVA II IN2101
NOTAS FINALES ELECTIVA II IN2101NOTAS FINALES ELECTIVA II IN2101
NOTAS FINALES ELECTIVA II IN2101
 
Notas definitivas per base de datos
Notas definitivas per base de datosNotas definitivas per base de datos
Notas definitivas per base de datos
 
Clase 6 VLAN
Clase 6 VLANClase 6 VLAN
Clase 6 VLAN
 
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRPGuía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
 
Guía CISCO de redistribución de protocolos de ruteo
Guía CISCO de redistribución de protocolos de ruteoGuía CISCO de redistribución de protocolos de ruteo
Guía CISCO de redistribución de protocolos de ruteo
 
Manual Basico de jQuery
Manual Basico de jQueryManual Basico de jQuery
Manual Basico de jQuery
 

Último

6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
Wilian24
 

Último (20)

Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
Educacion Basada en Evidencias SM5 Ccesa007.pdf
Educacion Basada en Evidencias  SM5  Ccesa007.pdfEducacion Basada en Evidencias  SM5  Ccesa007.pdf
Educacion Basada en Evidencias SM5 Ccesa007.pdf
 
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptxPLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
 
La Evaluacion Formativa SM6 Ccesa007.pdf
La Evaluacion Formativa SM6  Ccesa007.pdfLa Evaluacion Formativa SM6  Ccesa007.pdf
La Evaluacion Formativa SM6 Ccesa007.pdf
 
Los dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la VerdadLos dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la Verdad
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdf
 
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
 
AEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptxAEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptx
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
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...
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
Usos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicasUsos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicas
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
LA JUNGLA DE COLORES.pptx Cuento de animales
LA JUNGLA DE COLORES.pptx  Cuento de animalesLA JUNGLA DE COLORES.pptx  Cuento de animales
LA JUNGLA DE COLORES.pptx Cuento de animales
 
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
 
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 estructurados

  • 1. Capı́tulo 1 Manipulación de archivos estructurados 1.1. Introducción Definición Un archivo es un medio de almacenamiento no volátil, es decir permanece luego de terminar la aplicación que la utiliza o luego de apagar el computador. Un archivo se almacena en memoria secundaria como el disco duro, cd, dvd, etc. Los archivos llevan asociado un nombre y una extensión, ésta última permite identificar el tipo del archivo, por ejemplo doc, jpg, bmp, cpp, etc. Los archivos estructurados se caracterizan por que almacenan los datos re- spetando un patrón especı́fico que ocupa un determinado espacio. Una de las aplicaciones más comunes en la que se utiliza archivos estructurados es el de las bases de datos. Supongamos que deseamos almacenar datos de libros en un archivo, entonces los datos se estructurarán de acuerdo a lo que interesa alma- cenar de cada libro, en este caso podemos necesitar representar el tı́tulo, autor, año de edición, ISBN y editorial. Entonces un conjunto de datos de varios libros se verán como en la figura 1.1. Cada uno de los libros en el archivo se representa por un registro. Todos los registros del archivo se almacenan siguiendo una estructura (struct en C o C++), discutiremos en la siguiente sección cómo crear una estructura para los registros, seguiremos usando el ejemplo del libro. 1.2. Estructuras (struct) Supongamos que tenemos la siguiente estructura para cada registro de libro: -------------------------------------------------- ISBN | TITULO | AUTOR |ANIO EDICION | EDITORIAL -------------------------------------------------- Lo primero es determinar el tipo de dato de cada elemento de la estructura, cada elemento se denomina campo, en el ejemplo hay 5 campos. 1
  • 2. 2 CAPÍTULO 1. MANIPULACIÓN DE ARCHIVOS ESTRUCTURADOS Figura 1.1: Vista lógica de un archivo de registros de libros. ISBN: un entero TITULO: cadena de 20 AUTOR: cadena de 20 ANIO EDICION: entero EDITORIAL: cadena de 20 La implementación en C o C++ es como sigue: typedef struct Libro { int ISBN; char titulo[20]; char autor[20]; int anio; char editorial[20]; }TLibro; donde TLibro se utiliza como un nuevo tipo de dato que representa un tipo para cada libro, entonces un libro en particular se puede definir como: LIBRO miLibro; y para acceder a cada uno de sus campos utilizaremos el operador punto (.), por ejemplo: miLibro.ISBN=2344; miLibro.titulo="C y C++"; miLibro.autor="D. Ritchie"; miLibro.anio=1999; miLibro.editorial="Alfa"; Ahora, utilizaremos un archivo para guardar cada registro, esto lo veremos en la siguiente sección.
  • 3. 1.3. OPERACIONES CON ARCHIVOS 3 1.3. Operaciones con archivos Para manipular un archivo utilizaremos el tipo FILE (en realidad crearemos un puntero de tipo FILE) y usaremos las siguientes funciones de stdlib.h. fopen: Para abrir un archivo y asociarlo con un puntero de tipo FILE. La sintaxis es como sigue: FILE *fopen(char *nombre, char *modo) donde nombre es el nombre del archivo, en el que se puede incluir la ruta y modo indica la forma en que puede usarse el archivo: “w ” Para crear un archivo. “r ” Para leer un archivo. “a ” Para aadir datos al archivo. Ejemplo: FILE *f = fopen("libros.txt","r"); fread: Lee datos del archivo y los pasa a la memoria principal. fread(void *puntero, size_t tamanyo, size_t nmemb, FILE *f) donde puntero indica el espacio de memoria en dónde se almacenarán los datos, tamanyo es la cantidad de bytes a leer, nmemb es la cantidad de veces que se leerá (asumiremos igual a 1), y f representa el archivo. fwrite: Lee datos de la memoria principal y los pasa al archivo. fwrite(void *puntero, size_t tamanyo, size_t nmemb, FILE *f) donde puntero indica el espacio de memoria desde dónde se leeran los datos, tamanyo es la cantidad de bytes a escribir, nmemb es la cantidad de veces que se escribirán (asumiremos igual a 1), y f representa el archivo. fseek: Permite ubicarnos en cualquier posición del archivo para actualizar datos. int fseek(FILE *f, long int desplazamiento, int origen); La función fseek activa el indicador de posicin de ficheros de f y los de- splaza seún el parámetro desplazamiento donde la posición inicial es ori- gen. Se puede utilizar las constantes SEEK SET para indicar como ori- gen el inicio, SEEK CUR en caso de que origen sea la posición actual y SEEK END si es el final. Frecuentemente desplazamiento es un valor obtenido mediante una llamada a la función ftell. Por ejemplo, si se tiene la posición de un registro X, entonces en cualquier momento podemos regresar a ubicarnos en ese registro y actualizar sus dato. ftell: La función ftell obtiene el valor actual del indicador de posición de fichero para un determinado archivo. long int ftell(FILE *f);
  • 4. 4 CAPÍTULO 1. MANIPULACIÓN DE ARCHIVOS ESTRUCTURADOS 1.4. Implementacion de las operaciones Siguiendo con nuestra polı́tica de implementar un programa modularmente, crearemos dos módulos, uno para guardar un registro y otro para reportar todos los registro del archivo. GUARDAR void guardarLibro(TLibro L, FILE *f) { fwrite(&L,sizeof(TLibro),1,f); } REPORTAR void reportarLibro(char *file) { FILE *f=fopen(file,"r"); TLibro L; if (f!=NULL) { fread(&L,sizeof(TLibro),1,f); while(!feof(f)) { imprimir(L); fread(&L,sizeof(TLibro),1,f); } } else { printf( "Error al abrir el archivo n" ); exit(1); } fclose(f); } En el módulo anterior usamos la función feof() para determinar si ya se ha leı́do el final del archivo. Además usamos el módulo imprimir para mostrar los datos: void imprimir(TLibro L) { printf("ISBN : %s n", L.ISBN); printf("Titulo: %s n", L.titulo); printf("Anio : %s n", L.autor); printf("Anio : %d n", L.anio); printf("Anio : %s n", L.editorial); } 1.5. Implementación completa Se adjunta la implementación completa para guardar y reportar datos de un archivo.
  • 5. 1.6. EJERCICIOS 5 1.6. Ejercicios Utilizando el código base de la sección anterior, agregue lo necesario para que el programa soporte búsqueda de un libro por ISBN, es decir se da el ISBN y el programa debe devolver los datos completos del libro si lo encuentra o un mensaje de error si no se encuntra un libro con tal ISBN. Complete el código anterior de modo que su programa soporte modifi- cación de datos. Por ejemplo supongamos que se desee modificar los datos del autor de un libro con ISBN determinado.