SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
Archivos de datos en C
Ficheros
2013
Departamento de Computación
Archivos de Datos en C
2
ARCHIVOS DE DATOS EN C
⇒ INTRODUCCIÓN:
En la actualidad es común procesar volúmenes de información tan grandes que es
prácticamente imposible almacenar los datos en la memoria interna rápida - memoria
principal- de la computadora. Estos datos se guardan generalmente en dispositivos de
almacenamiento secundario como cintas y discos, en forma de archivos de datos, los cuales nos
permiten almacenar la información de manera permanente y acceder a ella o modificarla cada
vez que sea necesario. Los datos que hemos tratado hasta el momento han residido en la
memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente
en un dispositivo de memoria secundaria. Estas colecciones de datos se conocen como archivos
(antiguamente ficheros).
Un archivo es un conjunto de datos estructurados en una colección de entidades
elementales o básicas denominadas registros que son de igual tipo y constan a su vez
de diferentes entidades de nivel más bajos denominadas campos.
Hay dos tipos de archivos, archivos de texto y archivos binarios.
Un archivo de texto es una secuencia de caracteres organizadas en líneas terminadas por un
carácter de nueva línea. En estos archivos se pueden almacenar canciones, fuentes de
programas, base de datos simples, etc. Los archivos de texto se caracterizan por ser planos, es
decir, todas las letras tienen el mismo formato y no hay palabras subrayadas, en negrita, o
letras de distinto tamaño o ancho.
Un archivo binario es una secuencia de bytes que tienen una correspondencia uno a uno con
un dispositivo externo. Así que no tendrá lugar ninguna traducción de caracteres. Además, el
número de bytes escritos (leídos) será el mismo que los encontrados en el dispositivo externo.
Ejemplos de estos archivos son Fotografías, imágenes, texto con formatos, archivos ejecutables
(aplicaciones), etc.
El lenguaje C ofrece un amplio conjunto de funciones de librerías para crear y utilizar archivos
de datos. Lo primero que debemos hacer con los archivos de datos orientados a flujo es crear un
área de buffer o de almacenamiento. Un área de buffer es un lugar de memoria que se usa para
transferir datos desde la memoria a los dispositivos de almacenamiento secundario y viceversa.
Se puede conseguir la entrada y la salida de datos a un archivo a través del uso de la biblioteca
de funciones; C no tiene palabras claves que realicen las operaciones de E/S. La siguiente tabla
da un breve resumen de las funciones que se pueden utilizar. Se debe incluir la librería
STDIO.H. Observe que la mayoría de las funciones comienzan con la letra “F”, esto es un
vestigio del estándar C de Unix.
Archivos de Datos en C
3
⇒ EL PUNTERO A UN ARCHIVO:
El puntero a un archivo es el hilo común que unifica el sistema de E/S con buffer. Un puntero a
un archivo es un puntero a una información que define varias cosas sobre él, incluyendo el
nombre, el estado y la posición actual del archivo. En esencia identifica un archivo específico y
utiliza la secuencia asociada para dirigir el funcionamiento de las funciones de E/S con buffer.
Un puntero a un archivo es una variable de tipo puntero al tipo FILE que se define en
STDIO.H. Un programa necesita utilizar punteros a archivos para leer o escribir en los
mismos. Para obtener una variable de este tipo se utiliza una secuencia como esta: FILE *F;
⇒ APERTURA DE UN ARCHIVO:
La función fopen() abre una secuencia para que pueda ser utilizada y la asocia a un archivo.
Su prototipo es: FILE *fopen(const char nombre_archivo, cost char modo);
Donde:
nombre_archivo es un puntero a una cadena de caracteres que representan un nombre valido
del archivo y puede incluir una especificación del directorio.
La cadena a la que apunta modo determina como se abre el archivo. La siguiente tabla
muestra los valores permitidos para modo.
Archivos de Datos en C
4
La función fopen() devuelve un puntero a archivo. Un programa nunca debe alterar el valor de
ese puntero.
Si se produce un error cuando se está intentando abrir un archivo, fopen() devuelve un
puntero nulo. Se puede abrir un archivo bien en modo texto o binario. En la mayoría de las
implementaciones, en modo texto, la secuencias de retorno de carro / salto de línea se
convierten a caracteres de salto de línea en lectura. En la escritura, ocurre lo contrario: los
caracteres de salto de línea se convierten en salto de línea. Estas conversiones no ocurren en
archivos binarios.
En lenguaje C un archivo básicamente se abre y cierra de la siguiente manera:
#include<stdio.h>
void main()
{
FILE *puntero_fichero;
puntero_fichero = fopen(“nombre_archivo”, “modo_apertura”);
if(puntero_fichero != NULL)
{
//Proceso
fclose(puntero_fichero);
}
else
printf(“No se puede abrir el fichero”);
}
Si se usa fopen() para abrir un archivo para escritura, entonces cualquier archivo existente con
el mismo nombre se borrará y se crea uno nuevo. Si no existe un archivo con el mismo nombre,
entonces se creará. Si se quiere añadir al final del archivo entonces debe usar el modo a. Si se
usa a y no existe el archivo, se devolverá un error. La apertura de un archivo para las
operaciones de lectura requiere que exista el archivo. Si no existe, fopen() devolverá un error.
Finalmente, sus se abre un archivo para las operaciones de leer / escribir, la computadora no lo
borrará si existe; sin embargo, si no existe, la computadora lo creará.
⇒ CIERRE DE UN ARCHIVO:
La función fclose() cierra una secuencia que fue abierta mediante una llamada a fopen().
Escribe toda la información que todavía se encuentre en el buffer en el disco y realiza un cierre
formal del archivo a nivel del sistema operativo. Un error en el cierre de una secuencia puede
generar todo tipo de problemas, incluyendo la pérdida de datos, destrucción de archivos y
posibles errores intermitentes en el programa.
El prototipo de esta función es: int fclose(FILE *F);
Donde F es el puntero al archivo devuelto por la llamada a fopen(). Si se devuelve un valor cero
significa que la operación de cierre ha tenido éxito. Generalmente, esta función solo falla
cuando un disco se ha retirado antes de tiempo o cuando no queda espacio libre en el mismo.
Archivos de Datos en C
5
Ejemplo #1: Programa que permite leer desde el archivo hasta que se encuentre el
carácter de EOF. Usa la funcion getc para leer un carácter desde el archivo que está
abierto. La funcion getc(buff) lee desde el archivo de texto y retorna el carácter a
leerse. La función putchar se usa para mostrar el carácter leído.
#include<stdio.h>
void main()
{
FILE *buff;
char ch;
/* Abrir el archivo para lectura*/
buff= fopen("origen.txt","r");
if(buff==NULL)
printf("Error al abrir archivo n");
else
{
/*leer un carácter a la vez hasta alcanzar EOF */
ch= getc (buff);
while(ch != EOF)
{
putchar(ch);
ch= getc(buff);
}
/*cerrar archivo*/
fclose(buff);
}
}
⇒ FUNCIONES PARA INTRODUCIR U OBTENER DATOS DE UN ARCHIVO:
Para almacenar datos en un fichero es necesario realizar una operación de escritura, de igual
forma que para obtener datos hay que efectuar una operación de lectura. En C existen muchas
y variadas operaciones para leer y escribir en un fichero; entre ellas tenemos: fread -fwrite,
fgetc -fputc, fgets -fputs, fscanf -fprintf.
Es aconsejable utilizarlas por parejas; es decir, si se escribe con fwrite se debe leer con fread.
⇒ Lectura y escritura de caracteres ( fgetc – fputc ):
fgetc: Lee un carácter del fichero. Cuando se llega al final del fichero devuelve EOF.
carácter_leido = fgetc (fichero);
El prototipo correspondiente de fgetc es: char fgetc(FILE *archivo);
Archivos de Datos en C
6
Ejemplo #2: Programa que escribe carácter a carácter el contenido de un fichero.
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *archivo;
char caracter;
archivo = fopen("origen.txt","r");
if (archivo == NULL)
printf("nError de apertura del archivo. nn");
else
{
printf("nEl contenido del archivo origen es: nn");
while (feof(archivo) == 0)
{
caracter = fgetc(archivo);
printf("%c",caracter);
}
}
fclose(archivo);
return 0;
}
⇒ Escritura de caracteres: fputc (car, fichero)
Esta función escribe un carácter a la vez del archivo que está siendo señalado con el puntero
*archivo. El valor de retorno es el carácter escrito, si la operación fue completada con éxito, en
caso contrario será EOF.
El prototipo correspondiente de fputc es: int fputc(int carácter, FILE *archivo);
Ejemplo #3: Programa que escribe una cadena carácter a carácter en el fichero.
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char caracter;
fp = fopen ("fichero.txt", "r+" );
printf("nIntroduce un texto al fichero: ");
while((caracter = getchar()) != 'n')
{
printf("%c", fputc(caracter, fp));
}
fclose ( fp );
return 0;
}
Archivos de Datos en C
7
⇒ Leer cadenas a o desde los ficheros: fgets()
Esta función está diseñada para leer cadenas de caracteres. Leerá hasta n-1 caracteres o hasta
que lea un retorno de línea. En este último caso, el carácter de retorno de línea también es
leído.
El prototipo correspondiente de fgets es:
char *fgets(char *buffer, int tamaño, FILE *archivo);
El primer parámetro buffer lo hemos llamado así porque es un puntero a un espacio de
memoria del tipo char (podríamos usar un arreglo de char). El segundo parámetro es tamaño
que es el límite en cantidad de caracteres a leer para la funcion fgets. Y por último el puntero
del archivo por supuesto que es la forma en que fgets sabrá a qué archivo debe leer.
Ejemplo #4: Programa muestra la forma como se manejan las cadenas de caracteres
en un archivo.
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *archivo;
char caracteres[100];
archivo = fopen("prueba.txt","r");
if (archivo == NULL)
exit(1);
printf("nEl contenido del archivo de prueba es nn");
while (feof(archivo) == 0)
{
fgets(caracteres,100,archivo);
printf("%s",caracteres);
}
system("PAUSE");
fclose(archivo);
}
La función fgets se comporta de la siguiente manera, leerá del archivo apuntado por archivo
los caracteres que encuentre y a ponerlos en buffer hasta que lea un carácter menos que la
cantidad de caracteres especificada en tamaño o hasta que encuentre el final de una línea (n)
o hasta que encuentre el final del archivo (EOF). El beneficio de esta función es que se puede
obtener una línea completa a la vez.
⇒ Escribir cadenas a o desde los ficheros: fputs()
La función fputs escribe una cadena en un fichero. No se añade el carácter de retorno de línea
ni el carácter nulo final. El valor de retorno es un número no negativo o EOF en caso de error.
Los parámetros de entrada son la cadena a escribir y un puntero a la estructura FILE del
fichero donde se realizará la escritura.
Archivos de Datos en C
8
El prototipo correspondiente de fputs es: int fputs(const char *buffer, FILE *archivo);
Para ver su funcionamiento mostramos el siguiente ejemplo:
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char cadena[] = "Mostrando el uso de fputs en un fichero.n";
fp = fopen ( "fichero.txt", "r+" );
fputs( cadena, fp );
fclose ( fp );
}
Ejemplo #6: Programa maneja las cadenas de caracteres en un archivo. Se
introducen las instrucciones fgets y fputs para la lectura y escritura de cadenas de
caracteres, respectivamente.
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *archivo;
int res;
char caracteres[50];
archivo = fopen("prueba.txt","w");
if (archivo != NULL)
{
printf("Desea ingresar una cadena de caracteres? Si:1 No:0:");
scanf("%d",&res);
while(res)
{
fflush(stdin);
puts("Cadena:");
gets(caracteres);
fputs(caracteres,archivo);
printf("Desea ingresar otra cadena de caracteres? Si:1 No:0:");
scanf("%d",&res);
if(res)
fputs("n",archivo);
/*Se indica un salto de linea, excepto en la última cadena. Si no se hiciera esta indicación, la
función puts pegaría las cadenas y tendríamos dificultades en el momento de leerlas. Por otra
parte si realizáramos este salto de línea al final de la última cadena en la escritura se repetiría
la última cadena.*/
}
fclose(archivo);
}
else
printf("No se puede abrir el ficheron");
}
Archivos de Datos en C
9
⇒ Lectura y escritura formateada de texto fprintf() y fscanf()
Estas funciones se comportan exactamente como prinft() y scanf() discutidas anteriormente,
excepto que operan sobre archivo. La única diferencia con las anteriores es la necesidad de dar
como primer argumento el fichero en el que leemos o escribimos.
⇒ fscanf
La función fscanf funciona igual que scanf en cuanto a parámetros, pero la entrada se toma de
un fichero en lugar del teclado. El prototipo correspondiente de fscanf es:
int fscanf(FILE *fichero, const char *formato, argumento, ...);
Ejemplo #7: Programa que abre un archivo "fichero.txt" en modo lectura y lee dentro
de él.
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char buffer[100];
fp = fopen ( "fichero.txt", "r" );
fscanf(fp,"%s",buffer);
printf("%s",buffer);
fclose ( fp );
return 0;
}
⇒ fprintf
La función fprintf funciona igual que printf en cuanto a parámetros, pero la salida se dirige a
un archivo en lugar de a la pantalla. El prototipo correspondiente de fprintf es:
int fprintf(FILE *archivo, const char *formato, argumento, ...);
Ejemplo #8: Programa que abre el "fichero.txt" en modo lectura/escritura y escribe
dentro de él.
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char buffer[100] = "Esto es un texto dentro del fichero.";
fp = fopen ( "fichero.txt", "r+" );
fprintf(fp, buffer);
fprintf(fp, "%s", "nEsto es otro texto dentro del fichero.");
fclose ( fp );
return 0;
}
Archivos de Datos en C
10
Ejemplo #9: Programa en C que lee de un archivo el número de alumnos, número de
carnet y las cinco calificaciones de cada uno de ellos e imprime en pantalla el
número de carnet y el promedio de cada alumno.
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *pf;
int i,j,n;
float calif,prom=0,sum=0.0;
char carnet[11];
if((pf = fopen("matricula.txt","r")) != NULL)
{
fscanf(pf,"%d",&n);
for(i=0;i<n;i++)
{
fscanf(pf,"%s",carnet);
printf("%st",carnet);
sum=0.0;
for(j=0;j<3;j++)
{
fscanf(pf,"%f",&calif);
sum+=calif;
}
prom=sum/3;
printf("t%.2f ",prom);
printf("n");
}
fclose(pf);
}
else
printf("No se puede abrir el ficheron");
}
⇒ Lectura y escritura de bloques ( fread – fwrite ):
fread: Esta función lee un bloque de una "stream" de datos. Efectúa la lectura de un arreglo de
elementos "count", cada uno de los cuales tiene un tamaño definido por "size". Luego los guarda
en el bloque de memoria especificado por "ptr". El indicador de posición de la cadena de
caracteres avanza hasta leer la totalidad de bytes. Si esto es exitoso la cantidad de bytes leídos
es (size*count).
El prototipo correspondiente de fread es:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
PARAMETROS:
ptr : Puntero a un bloque de memoria con un tamaño mínimo de (size*count) bytes.
size : Tamaño en bytes de cada elemento (de los que voy a leer).
count : Número de elementos, los cuales tienen un tamaño "size".
Archivos de Datos en C
11
stream: Puntero a objetos FILE, que especifica la cadena de entrada.
fwrite: Esta función está pensada para trabajar con registros de longitud constante y forma
pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de la misma
longitud almacenados a partir de una dirección de memoria determinada. El valor de retorno
es el número de registros escritos, no el número de bytes. Los parámetros son: un puntero a la
zona de memoria de donde se obtendrán los datos a escribir, el tamaño de cada registro, el
número de registros a escribir y un puntero a la estructura FILE del fichero al que se hará la
escritura.
El prototipo correspondiente de fwrite es:
size_t fwrite(void *puntero, size_t tamano, size_t cantidad, FILE *archivo);
Un ejemplo concreto del uso de fwrite con su contraparte fread y usando funciones es:
#include <stdio.h>
void menu();
void CrearFichero(FILE *Fichero);
void InsertarDatos(FILE *Fichero);
void VerDatos(FILE *Fichero);
struct sRegistro
{
char Nombre[25];
int Edad;
float Sueldo;
} registro;
int main()
{
int opcion;
int exit = 0;
FILE *fichero;
while (!exit)
{
menu();
printf("nOpcion: ");
scanf("%d", &opcion);
switch(opcion)
{
case 1:
CrearFichero(fichero);
break;
case 2:
InsertarDatos(fichero);
break;
case 3:
VerDatos(fichero);
break;
Archivos de Datos en C
12
case 4:
exit = 1;
break;
default:
printf("nopcion no valida");
}
}
return 0;
}
void menu()
{
printf("nMenu:");
printf("nt1. Crear fichero");
printf("nt2. Insertar datos");
printf("nt3. Ver datos");
printf("nt4. Salir");
}
void CrearFichero(FILE *Fichero)
{
Fichero = fopen("fichero", "r");
if(!Fichero)
{
Fichero = fopen("bloques.txt", "w");
printf("nArchivo creado!");
}
else
{
printf("nEl fichero ya existe!");
}
fclose (Fichero);
return;
}
void InsertarDatos(FILE *Fichero)
{
Fichero = fopen("fichero", "a+");
if(Fichero == NULL)
{
printf("nFichero no existe! nPor favor creelo");
return;
}
printf("nDigita el nombre: ");
scanf("%s", &registro.Nombre);
printf("nDigita la edad: ");
scanf("%d", &registro.Edad);
printf("nDigita el sueldo: ");
scanf("%f", &registro.Sueldo);
Archivos de Datos en C
13
fwrite(&registro, sizeof(struct sRegistro), 1, Fichero);
fclose(Fichero);
return;
}
void VerDatos(FILE *Fichero)
{
int numero = 1;
Fichero = fopen("fichero", "r");
if(Fichero == NULL)
{
printf("nFichero no existe! nPor favor creelo");
return;
}
fread(&registro, sizeof(struct sRegistro), 1, Fichero);
printf("nNumero tNombre tEdad tSueldo");
while(!feof(Fichero))
{
printf("n%d t%s t%d t%.2f", numero, registro.Nombre,
registro.Edad, registro.Sueldo);
fread(&registro, sizeof(struct sRegistro), 1, Fichero);
numero++;
}
fclose(Fichero);
return;
}
⇒ EJERCICIOS PROPUESTOS:
1. Mostrar el contenido de un fichero en mayúsculas usando fgetc.
2. Leer el contenido de un fichero y sustituír las ocurrencias de la letra ‘a’ por la letra ‘x’.
3. Copiar un fichero en otro utilizando fgets y fputs().
4. Crear un programa en C que guarde en un fichero los meses del año guardados en un array
meses y luego leer el fichero y mostrarlos.
5. Crear un programa que guarde en un fichero “estudiantes.dat” los datos siguientes de
estudiantes:
struct estudiante
{
int edad;
char nombre[20];
float notas[3];
};
Este programa contendrá un menú con lo siguiente:
a) Ingresar estudiante
b) Mostrar un estudiante
c) Mostrar estudiantes
Archivos de Datos en C
14
⇒ BIBLIOGRAFÍA BÁSICA:
• Ceballos, Francisco Javier: C/C++ Curso de Programación, 2da Edición. Editorial
RA-MA, 2002.
• Joyanes Aguilar, Luis; Zahonero Martínez Ignacio: Programación en C. McGraw Hill,
2001.
• Gottfried, Byron S: Programación en C. McGraw Hill, 1991.

Contenu connexe

Tendances (18)

Archivos C++
Archivos C++Archivos C++
Archivos C++
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
 
ARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE CARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE C
 
Arreglos Turbo C
Arreglos Turbo CArreglos Turbo C
Arreglos Turbo C
 
Tema 10 www.fresymetal.com
Tema 10 www.fresymetal.comTema 10 www.fresymetal.com
Tema 10 www.fresymetal.com
 
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
 
Utp pti_s11_archivos
 Utp pti_s11_archivos Utp pti_s11_archivos
Utp pti_s11_archivos
 
ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C
 
Fichc
FichcFichc
Fichc
 
Utilizacion de archivos en Dev C++
Utilizacion de archivos en Dev C++Utilizacion de archivos en Dev C++
Utilizacion de archivos en Dev C++
 
ARCHIVOS EN C+
ARCHIVOS EN  C+ARCHIVOS EN  C+
ARCHIVOS EN C+
 
Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++
 
Ficheros cyc++
Ficheros cyc++Ficheros cyc++
Ficheros cyc++
 
Grupo nro4ficheros
Grupo nro4ficherosGrupo nro4ficheros
Grupo nro4ficheros
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE C
 
Lectura y-escritura-desde-archivos
Lectura y-escritura-desde-archivosLectura y-escritura-desde-archivos
Lectura y-escritura-desde-archivos
 
Archivos
ArchivosArchivos
Archivos
 
16 Archivos
16 Archivos16 Archivos
16 Archivos
 

Similaire à Archivos de datos en C

Similaire à Archivos de datos en C (17)

Manejo dearchivosc
Manejo dearchivoscManejo dearchivosc
Manejo dearchivosc
 
Archivos c
Archivos cArchivos c
Archivos c
 
Archivos c
Archivos cArchivos c
Archivos c
 
Tarea pagweb
Tarea pagwebTarea pagweb
Tarea pagweb
 
Manejo_archivos.ppt
Manejo_archivos.pptManejo_archivos.ppt
Manejo_archivos.ppt
 
Archivo de datos
Archivo de datosArchivo de datos
Archivo de datos
 
ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C ARCHIVO EN LENGUAJE C
ARCHIVO EN LENGUAJE C
 
2-Archivos.ppt
2-Archivos.ppt2-Archivos.ppt
2-Archivos.ppt
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
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
 
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
 
Unidad 3 ficheros
Unidad 3 ficherosUnidad 3 ficheros
Unidad 3 ficheros
 
Archivos en c
Archivos en cArchivos en c
Archivos en c
 
Ficheros Php
Ficheros PhpFicheros Php
Ficheros Php
 
Archivos en C++
Archivos en C++Archivos en C++
Archivos en C++
 
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientes
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficheros
 

Plus de José Ricardo Tillero Giménez

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 EIGRPJosé Ricardo Tillero Giménez
 

Plus 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
 

Dernier

Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoJosDanielEstradaHern
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxnandoapperscabanilla
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVGiustinoAdesso1
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfPaolaRopero2
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIIsauraImbrondone
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 

Dernier (20)

Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° grado
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCV
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 

Archivos de datos en C

  • 1. Archivos de datos en C Ficheros 2013 Departamento de Computación
  • 2. Archivos de Datos en C 2 ARCHIVOS DE DATOS EN C ⇒ INTRODUCCIÓN: En la actualidad es común procesar volúmenes de información tan grandes que es prácticamente imposible almacenar los datos en la memoria interna rápida - memoria principal- de la computadora. Estos datos se guardan generalmente en dispositivos de almacenamiento secundario como cintas y discos, en forma de archivos de datos, los cuales nos permiten almacenar la información de manera permanente y acceder a ella o modificarla cada vez que sea necesario. Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente en un dispositivo de memoria secundaria. Estas colecciones de datos se conocen como archivos (antiguamente ficheros). Un archivo es un conjunto de datos estructurados en una colección de entidades elementales o básicas denominadas registros que son de igual tipo y constan a su vez de diferentes entidades de nivel más bajos denominadas campos. Hay dos tipos de archivos, archivos de texto y archivos binarios. Un archivo de texto es una secuencia de caracteres organizadas en líneas terminadas por un carácter de nueva línea. En estos archivos se pueden almacenar canciones, fuentes de programas, base de datos simples, etc. Los archivos de texto se caracterizan por ser planos, es decir, todas las letras tienen el mismo formato y no hay palabras subrayadas, en negrita, o letras de distinto tamaño o ancho. Un archivo binario es una secuencia de bytes que tienen una correspondencia uno a uno con un dispositivo externo. Así que no tendrá lugar ninguna traducción de caracteres. Además, el número de bytes escritos (leídos) será el mismo que los encontrados en el dispositivo externo. Ejemplos de estos archivos son Fotografías, imágenes, texto con formatos, archivos ejecutables (aplicaciones), etc. El lenguaje C ofrece un amplio conjunto de funciones de librerías para crear y utilizar archivos de datos. Lo primero que debemos hacer con los archivos de datos orientados a flujo es crear un área de buffer o de almacenamiento. Un área de buffer es un lugar de memoria que se usa para transferir datos desde la memoria a los dispositivos de almacenamiento secundario y viceversa. Se puede conseguir la entrada y la salida de datos a un archivo a través del uso de la biblioteca de funciones; C no tiene palabras claves que realicen las operaciones de E/S. La siguiente tabla da un breve resumen de las funciones que se pueden utilizar. Se debe incluir la librería STDIO.H. Observe que la mayoría de las funciones comienzan con la letra “F”, esto es un vestigio del estándar C de Unix.
  • 3. Archivos de Datos en C 3 ⇒ EL PUNTERO A UN ARCHIVO: El puntero a un archivo es el hilo común que unifica el sistema de E/S con buffer. Un puntero a un archivo es un puntero a una información que define varias cosas sobre él, incluyendo el nombre, el estado y la posición actual del archivo. En esencia identifica un archivo específico y utiliza la secuencia asociada para dirigir el funcionamiento de las funciones de E/S con buffer. Un puntero a un archivo es una variable de tipo puntero al tipo FILE que se define en STDIO.H. Un programa necesita utilizar punteros a archivos para leer o escribir en los mismos. Para obtener una variable de este tipo se utiliza una secuencia como esta: FILE *F; ⇒ APERTURA DE UN ARCHIVO: La función fopen() abre una secuencia para que pueda ser utilizada y la asocia a un archivo. Su prototipo es: FILE *fopen(const char nombre_archivo, cost char modo); Donde: nombre_archivo es un puntero a una cadena de caracteres que representan un nombre valido del archivo y puede incluir una especificación del directorio. La cadena a la que apunta modo determina como se abre el archivo. La siguiente tabla muestra los valores permitidos para modo.
  • 4. Archivos de Datos en C 4 La función fopen() devuelve un puntero a archivo. Un programa nunca debe alterar el valor de ese puntero. Si se produce un error cuando se está intentando abrir un archivo, fopen() devuelve un puntero nulo. Se puede abrir un archivo bien en modo texto o binario. En la mayoría de las implementaciones, en modo texto, la secuencias de retorno de carro / salto de línea se convierten a caracteres de salto de línea en lectura. En la escritura, ocurre lo contrario: los caracteres de salto de línea se convierten en salto de línea. Estas conversiones no ocurren en archivos binarios. En lenguaje C un archivo básicamente se abre y cierra de la siguiente manera: #include<stdio.h> void main() { FILE *puntero_fichero; puntero_fichero = fopen(“nombre_archivo”, “modo_apertura”); if(puntero_fichero != NULL) { //Proceso fclose(puntero_fichero); } else printf(“No se puede abrir el fichero”); } Si se usa fopen() para abrir un archivo para escritura, entonces cualquier archivo existente con el mismo nombre se borrará y se crea uno nuevo. Si no existe un archivo con el mismo nombre, entonces se creará. Si se quiere añadir al final del archivo entonces debe usar el modo a. Si se usa a y no existe el archivo, se devolverá un error. La apertura de un archivo para las operaciones de lectura requiere que exista el archivo. Si no existe, fopen() devolverá un error. Finalmente, sus se abre un archivo para las operaciones de leer / escribir, la computadora no lo borrará si existe; sin embargo, si no existe, la computadora lo creará. ⇒ CIERRE DE UN ARCHIVO: La función fclose() cierra una secuencia que fue abierta mediante una llamada a fopen(). Escribe toda la información que todavía se encuentre en el buffer en el disco y realiza un cierre formal del archivo a nivel del sistema operativo. Un error en el cierre de una secuencia puede generar todo tipo de problemas, incluyendo la pérdida de datos, destrucción de archivos y posibles errores intermitentes en el programa. El prototipo de esta función es: int fclose(FILE *F); Donde F es el puntero al archivo devuelto por la llamada a fopen(). Si se devuelve un valor cero significa que la operación de cierre ha tenido éxito. Generalmente, esta función solo falla cuando un disco se ha retirado antes de tiempo o cuando no queda espacio libre en el mismo.
  • 5. Archivos de Datos en C 5 Ejemplo #1: Programa que permite leer desde el archivo hasta que se encuentre el carácter de EOF. Usa la funcion getc para leer un carácter desde el archivo que está abierto. La funcion getc(buff) lee desde el archivo de texto y retorna el carácter a leerse. La función putchar se usa para mostrar el carácter leído. #include<stdio.h> void main() { FILE *buff; char ch; /* Abrir el archivo para lectura*/ buff= fopen("origen.txt","r"); if(buff==NULL) printf("Error al abrir archivo n"); else { /*leer un carácter a la vez hasta alcanzar EOF */ ch= getc (buff); while(ch != EOF) { putchar(ch); ch= getc(buff); } /*cerrar archivo*/ fclose(buff); } } ⇒ FUNCIONES PARA INTRODUCIR U OBTENER DATOS DE UN ARCHIVO: Para almacenar datos en un fichero es necesario realizar una operación de escritura, de igual forma que para obtener datos hay que efectuar una operación de lectura. En C existen muchas y variadas operaciones para leer y escribir en un fichero; entre ellas tenemos: fread -fwrite, fgetc -fputc, fgets -fputs, fscanf -fprintf. Es aconsejable utilizarlas por parejas; es decir, si se escribe con fwrite se debe leer con fread. ⇒ Lectura y escritura de caracteres ( fgetc – fputc ): fgetc: Lee un carácter del fichero. Cuando se llega al final del fichero devuelve EOF. carácter_leido = fgetc (fichero); El prototipo correspondiente de fgetc es: char fgetc(FILE *archivo);
  • 6. Archivos de Datos en C 6 Ejemplo #2: Programa que escribe carácter a carácter el contenido de un fichero. #include <stdio.h> #include <stdlib.h> int main() { FILE *archivo; char caracter; archivo = fopen("origen.txt","r"); if (archivo == NULL) printf("nError de apertura del archivo. nn"); else { printf("nEl contenido del archivo origen es: nn"); while (feof(archivo) == 0) { caracter = fgetc(archivo); printf("%c",caracter); } } fclose(archivo); return 0; } ⇒ Escritura de caracteres: fputc (car, fichero) Esta función escribe un carácter a la vez del archivo que está siendo señalado con el puntero *archivo. El valor de retorno es el carácter escrito, si la operación fue completada con éxito, en caso contrario será EOF. El prototipo correspondiente de fputc es: int fputc(int carácter, FILE *archivo); Ejemplo #3: Programa que escribe una cadena carácter a carácter en el fichero. #include <stdio.h> int main ( int argc, char **argv ) { FILE *fp; char caracter; fp = fopen ("fichero.txt", "r+" ); printf("nIntroduce un texto al fichero: "); while((caracter = getchar()) != 'n') { printf("%c", fputc(caracter, fp)); } fclose ( fp ); return 0; }
  • 7. Archivos de Datos en C 7 ⇒ Leer cadenas a o desde los ficheros: fgets() Esta función está diseñada para leer cadenas de caracteres. Leerá hasta n-1 caracteres o hasta que lea un retorno de línea. En este último caso, el carácter de retorno de línea también es leído. El prototipo correspondiente de fgets es: char *fgets(char *buffer, int tamaño, FILE *archivo); El primer parámetro buffer lo hemos llamado así porque es un puntero a un espacio de memoria del tipo char (podríamos usar un arreglo de char). El segundo parámetro es tamaño que es el límite en cantidad de caracteres a leer para la funcion fgets. Y por último el puntero del archivo por supuesto que es la forma en que fgets sabrá a qué archivo debe leer. Ejemplo #4: Programa muestra la forma como se manejan las cadenas de caracteres en un archivo. #include <stdio.h> #include <stdlib.h> void main() { FILE *archivo; char caracteres[100]; archivo = fopen("prueba.txt","r"); if (archivo == NULL) exit(1); printf("nEl contenido del archivo de prueba es nn"); while (feof(archivo) == 0) { fgets(caracteres,100,archivo); printf("%s",caracteres); } system("PAUSE"); fclose(archivo); } La función fgets se comporta de la siguiente manera, leerá del archivo apuntado por archivo los caracteres que encuentre y a ponerlos en buffer hasta que lea un carácter menos que la cantidad de caracteres especificada en tamaño o hasta que encuentre el final de una línea (n) o hasta que encuentre el final del archivo (EOF). El beneficio de esta función es que se puede obtener una línea completa a la vez. ⇒ Escribir cadenas a o desde los ficheros: fputs() La función fputs escribe una cadena en un fichero. No se añade el carácter de retorno de línea ni el carácter nulo final. El valor de retorno es un número no negativo o EOF en caso de error. Los parámetros de entrada son la cadena a escribir y un puntero a la estructura FILE del fichero donde se realizará la escritura.
  • 8. Archivos de Datos en C 8 El prototipo correspondiente de fputs es: int fputs(const char *buffer, FILE *archivo); Para ver su funcionamiento mostramos el siguiente ejemplo: #include <stdio.h> int main ( int argc, char **argv ) { FILE *fp; char cadena[] = "Mostrando el uso de fputs en un fichero.n"; fp = fopen ( "fichero.txt", "r+" ); fputs( cadena, fp ); fclose ( fp ); } Ejemplo #6: Programa maneja las cadenas de caracteres en un archivo. Se introducen las instrucciones fgets y fputs para la lectura y escritura de cadenas de caracteres, respectivamente. #include <stdio.h> #include <stdlib.h> void main() { FILE *archivo; int res; char caracteres[50]; archivo = fopen("prueba.txt","w"); if (archivo != NULL) { printf("Desea ingresar una cadena de caracteres? Si:1 No:0:"); scanf("%d",&res); while(res) { fflush(stdin); puts("Cadena:"); gets(caracteres); fputs(caracteres,archivo); printf("Desea ingresar otra cadena de caracteres? Si:1 No:0:"); scanf("%d",&res); if(res) fputs("n",archivo); /*Se indica un salto de linea, excepto en la última cadena. Si no se hiciera esta indicación, la función puts pegaría las cadenas y tendríamos dificultades en el momento de leerlas. Por otra parte si realizáramos este salto de línea al final de la última cadena en la escritura se repetiría la última cadena.*/ } fclose(archivo); } else printf("No se puede abrir el ficheron"); }
  • 9. Archivos de Datos en C 9 ⇒ Lectura y escritura formateada de texto fprintf() y fscanf() Estas funciones se comportan exactamente como prinft() y scanf() discutidas anteriormente, excepto que operan sobre archivo. La única diferencia con las anteriores es la necesidad de dar como primer argumento el fichero en el que leemos o escribimos. ⇒ fscanf La función fscanf funciona igual que scanf en cuanto a parámetros, pero la entrada se toma de un fichero en lugar del teclado. El prototipo correspondiente de fscanf es: int fscanf(FILE *fichero, const char *formato, argumento, ...); Ejemplo #7: Programa que abre un archivo "fichero.txt" en modo lectura y lee dentro de él. #include <stdio.h> int main ( int argc, char **argv ) { FILE *fp; char buffer[100]; fp = fopen ( "fichero.txt", "r" ); fscanf(fp,"%s",buffer); printf("%s",buffer); fclose ( fp ); return 0; } ⇒ fprintf La función fprintf funciona igual que printf en cuanto a parámetros, pero la salida se dirige a un archivo en lugar de a la pantalla. El prototipo correspondiente de fprintf es: int fprintf(FILE *archivo, const char *formato, argumento, ...); Ejemplo #8: Programa que abre el "fichero.txt" en modo lectura/escritura y escribe dentro de él. #include <stdio.h> int main ( int argc, char **argv ) { FILE *fp; char buffer[100] = "Esto es un texto dentro del fichero."; fp = fopen ( "fichero.txt", "r+" ); fprintf(fp, buffer); fprintf(fp, "%s", "nEsto es otro texto dentro del fichero."); fclose ( fp ); return 0; }
  • 10. Archivos de Datos en C 10 Ejemplo #9: Programa en C que lee de un archivo el número de alumnos, número de carnet y las cinco calificaciones de cada uno de ellos e imprime en pantalla el número de carnet y el promedio de cada alumno. #include <stdio.h> #include <stdlib.h> void main() { FILE *pf; int i,j,n; float calif,prom=0,sum=0.0; char carnet[11]; if((pf = fopen("matricula.txt","r")) != NULL) { fscanf(pf,"%d",&n); for(i=0;i<n;i++) { fscanf(pf,"%s",carnet); printf("%st",carnet); sum=0.0; for(j=0;j<3;j++) { fscanf(pf,"%f",&calif); sum+=calif; } prom=sum/3; printf("t%.2f ",prom); printf("n"); } fclose(pf); } else printf("No se puede abrir el ficheron"); } ⇒ Lectura y escritura de bloques ( fread – fwrite ): fread: Esta función lee un bloque de una "stream" de datos. Efectúa la lectura de un arreglo de elementos "count", cada uno de los cuales tiene un tamaño definido por "size". Luego los guarda en el bloque de memoria especificado por "ptr". El indicador de posición de la cadena de caracteres avanza hasta leer la totalidad de bytes. Si esto es exitoso la cantidad de bytes leídos es (size*count). El prototipo correspondiente de fread es: size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); PARAMETROS: ptr : Puntero a un bloque de memoria con un tamaño mínimo de (size*count) bytes. size : Tamaño en bytes de cada elemento (de los que voy a leer). count : Número de elementos, los cuales tienen un tamaño "size".
  • 11. Archivos de Datos en C 11 stream: Puntero a objetos FILE, que especifica la cadena de entrada. fwrite: Esta función está pensada para trabajar con registros de longitud constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de la misma longitud almacenados a partir de una dirección de memoria determinada. El valor de retorno es el número de registros escritos, no el número de bytes. Los parámetros son: un puntero a la zona de memoria de donde se obtendrán los datos a escribir, el tamaño de cada registro, el número de registros a escribir y un puntero a la estructura FILE del fichero al que se hará la escritura. El prototipo correspondiente de fwrite es: size_t fwrite(void *puntero, size_t tamano, size_t cantidad, FILE *archivo); Un ejemplo concreto del uso de fwrite con su contraparte fread y usando funciones es: #include <stdio.h> void menu(); void CrearFichero(FILE *Fichero); void InsertarDatos(FILE *Fichero); void VerDatos(FILE *Fichero); struct sRegistro { char Nombre[25]; int Edad; float Sueldo; } registro; int main() { int opcion; int exit = 0; FILE *fichero; while (!exit) { menu(); printf("nOpcion: "); scanf("%d", &opcion); switch(opcion) { case 1: CrearFichero(fichero); break; case 2: InsertarDatos(fichero); break; case 3: VerDatos(fichero); break;
  • 12. Archivos de Datos en C 12 case 4: exit = 1; break; default: printf("nopcion no valida"); } } return 0; } void menu() { printf("nMenu:"); printf("nt1. Crear fichero"); printf("nt2. Insertar datos"); printf("nt3. Ver datos"); printf("nt4. Salir"); } void CrearFichero(FILE *Fichero) { Fichero = fopen("fichero", "r"); if(!Fichero) { Fichero = fopen("bloques.txt", "w"); printf("nArchivo creado!"); } else { printf("nEl fichero ya existe!"); } fclose (Fichero); return; } void InsertarDatos(FILE *Fichero) { Fichero = fopen("fichero", "a+"); if(Fichero == NULL) { printf("nFichero no existe! nPor favor creelo"); return; } printf("nDigita el nombre: "); scanf("%s", &registro.Nombre); printf("nDigita la edad: "); scanf("%d", &registro.Edad); printf("nDigita el sueldo: "); scanf("%f", &registro.Sueldo);
  • 13. Archivos de Datos en C 13 fwrite(&registro, sizeof(struct sRegistro), 1, Fichero); fclose(Fichero); return; } void VerDatos(FILE *Fichero) { int numero = 1; Fichero = fopen("fichero", "r"); if(Fichero == NULL) { printf("nFichero no existe! nPor favor creelo"); return; } fread(&registro, sizeof(struct sRegistro), 1, Fichero); printf("nNumero tNombre tEdad tSueldo"); while(!feof(Fichero)) { printf("n%d t%s t%d t%.2f", numero, registro.Nombre, registro.Edad, registro.Sueldo); fread(&registro, sizeof(struct sRegistro), 1, Fichero); numero++; } fclose(Fichero); return; } ⇒ EJERCICIOS PROPUESTOS: 1. Mostrar el contenido de un fichero en mayúsculas usando fgetc. 2. Leer el contenido de un fichero y sustituír las ocurrencias de la letra ‘a’ por la letra ‘x’. 3. Copiar un fichero en otro utilizando fgets y fputs(). 4. Crear un programa en C que guarde en un fichero los meses del año guardados en un array meses y luego leer el fichero y mostrarlos. 5. Crear un programa que guarde en un fichero “estudiantes.dat” los datos siguientes de estudiantes: struct estudiante { int edad; char nombre[20]; float notas[3]; }; Este programa contendrá un menú con lo siguiente: a) Ingresar estudiante b) Mostrar un estudiante c) Mostrar estudiantes
  • 14. Archivos de Datos en C 14 ⇒ BIBLIOGRAFÍA BÁSICA: • Ceballos, Francisco Javier: C/C++ Curso de Programación, 2da Edición. Editorial RA-MA, 2002. • Joyanes Aguilar, Luis; Zahonero Martínez Ignacio: Programación en C. McGraw Hill, 2001. • Gottfried, Byron S: Programación en C. McGraw Hill, 1991.