2. Archivos de Datos en
Lenguaje C
El almacenamiento en
variables y arreglos es
temporal
Introducción
Existen aplicaciones
que deben guardar
grandes volúmenes de
datos de manera
permanente
Se hace necesario el
uso de dispositivos de
almacenamiento
secundario como archivos
de datos
3. Archivos de Datos en
Lenguaje C
Desarrollar programas en lenguaje
C para el procesamiento de
transacciones de archivos de datos
Objetivo General
4. Archivos de Datos en
Lenguaje C
1. Aprender a crear, leer, escribir y actualizar
archivos de datos en C.
2. Familiarizarse con el procesamiento de
Archivos Secuenciales
3. Familiarizarse con el procesamiento de
Archivos Binarios
4. Construir programas para el procesamiento
de transacciones de archivos secuenciales y
binarios
Objetivos Específicos
5. ¿Qué es un Archivo de Datos?
Es una colección de registros relacionados
entre sí con aspectos en común y organizados
para un propósito específico.
Ejemplo:
El archivo de nómina del
personal docente del IUT-
Cumaná.
6. ¿Qué es un Archivo de Datos?
Estructura diseñada para contener datos.
Dichos datos están organizados de tal modo
que puedan ser recuperados, actualizados o
borrados y almacenados nuevamente con
todos los cambios realizados.
Nota: Lenguaje C esta diseñado para manejar los
archivos de datos como secuencia (flujo) que son
independiente del dispositivo.
7. ¿Qué es un Flujo o Secuencia?
Es una abstracción que se refiere a una
corriente de datos que fluye (viaja) entre un
origen y un destino.
Entre el origen y el destino debe existir una
conexión por la cual circulen los datos
Origen DestinoFlujo de Datos
Conexión
8. ¿Qué es un Flujo o Secuencia?
Ejemplo:
Cuando se realiza una función
scanf(“%d”,¬a), se toma el valor
introducido desde teclado (origen), se pasa al
buffer stdin (conexión) y de hay a la memoria
(destino)
Teclado Memorianota
Buffer stdin
9. Tipos de Secuencias en C
Secuencias
Texto Binarias
Conjunto de caracteres
colocados uno tras otro
organizados en líneas
terminadas por el carácter
salto de línea.
Conjunto bytes uno
tras otro con
correspondencia una a uno
con los del dispositivo.
10. Tipos de Archivos en C
Archivos
Secuenciales
(Texto)
Binarios
(Registro)
Son secuencia de
caracteres.
Son secuencia de ceros
y unos.
Nota: Lenguaje C, realiza el acceso a los archivos a
través de un buffer intermedio.
11. Puntero FILE
Nota: La primera operación a realizar antes de procesar
archivos es establecer un área de buffer, donde la
información se almacena temporalmente mientras se
esta transfiriendo entre la memoria del computador y
el archivo de datos.
El área se establece a través de la siguiente
instrucción:
FILE *puntero_archivo;
12. Puntero FILE
Donde:
FILE, es un tipo especial de estructura que
permite establecer el área de buffer.
puntero_archivo, es una variable
puntero, que indica el inicio de esta área.
FILE *puntero_archivo;
13. Apertura de un Archivo de Datos
Nota: La segunda operación a realizar antes de
procesar archivos es abrir el archivo. La apertura del
archivo supone conectar el archivo físico (externo) con
el programa e indicar como va a ser tratado.
La función fopen(), permite abrir una secuencia para
que pueda ser utilizada y vinculada con un archivo. Esta
función devuelve NULL en caso de algún error.
fopen(nombre_archivo, modo);
14. Donde:
nombre_archivo, es una cadena de caracteres
que representa el nombre con el cual será referenciado el
archivo en el programa.
modo,es una cadena de caracteres que representa
cómo será utilizado el archivo.
fopen(nombre_archivo, modo);
Apertura de un Archivo de
Datos
15. El modo puede ser una de las cadenas mostradas en
la tabla a continuación:
Archivos Secuenciales
fopen(nombre_archivo, modo);
Apertura de un Archivo de
Datos
MODOS DE APERTURA
VALOR DESCRIPCIÓN
r Abre un archivo de texto para lectura.
w Crea un archivo de texto para escritura.
a
Abre un archivo de texto para añadir información al final. Sino existe, funciona
como w.
r+ Abre un archivo de texto para lectura / escritura.
w+ Crea un archivo de texto para lectura / escritura.
a+
Abre o Crea un archivo de texto para añadir información. al final. Sino existe,
funciona como w+
16. El modo puede ser una de las cadenas mostradas en
la tabla a continuación:
Archivos Binarios
fopen(nombre_archivo, modo);
Apertura de un Archivo de
Datos
MODOS DE APERTURA
VALOR DESCRIPCIÓN
rb Abre un archivo binario para lectura.
wb Crea un archivo binario para escritura.
ab
Abre un archivo de binario para añadir información al final. Sino existe, funciona
como w.
r+b Abre un archivo binario para lectura / escritura.
w+b Crea un archivo binario para lectura / escritura.
a+b
Abre o Crea un archivo binario para añadir información. al final. Sino existe,
funciona como w+b
17. Cierre de un Archivo de Datos
Nota: Una vez terminadas las operaciones de escritura y
lectura en un archivo hay que cerrar la secuencia.
La función fclose(), permite cerrar una
secuencia vinculada con un archivo.
fclose(nombre_archivo);
18. Cierre de un Archivo de Datos
También puede emplearse la función
fcloseall(), que permite cerrar todas las
secuencia vinculada con todos los archivo que se
encuentran abiertos.
fcloseall();
Nota: ambas funciones escriben la información que
todavía se encuentra en el buffer y cierra el (los)
archivos (s) a nivel de MS-DOS. La cabecera utilizada
es <stdio.h>
19. Apertura y Cierre de un Archivo de Datos
Ejemplo:
#include <stdio.h>
void main(void){
FILE *punt_fich;
clrscr();
if((punt_fich=fopen("hla.txt","a"))==NULL){
printf("Error en la apertura");
exit(0);
}
.
.
operaciones lectura/escritura
.
.
fclose(punt_fich);
}
20. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fputc/putc:
Escribe un carácter en el archivo abierto por el
puntero que se pone como parámetro.
Si todo se produce correctamente la función devuelve
el propio carácter, si hay algún error devuelve EOF.
La cabecera que utiliza es <stdio.h>
21. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fputc/putc:
La sintaxis para estas funciones es la siguiente:
fputc(variable_char,puntero_archivo);
fputc(‘carácter’,puntero_archivo);
putc(variable_char,puntero_archivo);
putc(‘carácter’,puntero_archivo);
22. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fputs
Escribe el contenido de la cadena puesta como primer
parámetro de la función. El carácter nulo no se escribe
en el fichero.
Si se produce algún error devuelve EOF y si todo va
bien devuelve un valor no negativo.
La cabecera que utiliza es <stdio.h>
23. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fputs:
La sintaxis para estas función es la siguiente:
fputs(variable_cadena,puntero_archivo);
fputs(“texto”,puntero_archivo);
24. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fprintf
Escribe en el fichero cualquier tipo de valor, cadenas,
números y caracteres. Esta función tiene el mismo
formato que printf.
Hay que indicarle el puntero, el identificador de
formato y nombre de la variables o variables a escribir.
La cabecera que utiliza es <stdio.h>
25. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fprintf:
La sintaxis para estas función es la siguiente:
fprintf(puntero_archivo,“texto”);
fprintf(puntero_archivo“identificador”,var);
fprintf(puntero_arc,“ident(es)_formato”,variable(s)) ;
26. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
#include <stdio.h>
#include <string.h>
void letra(void);
void frase(void);
FILE *punt_fich;
void main(void){
int opt;
if((punt_fich=fopen("hla.txt",“a"))==NULL){
printf("Error en la apertura");
exit(0);
}
printf("1.INTRODUCIR LETRA A LETRAn");
printf("2.INTRODUCIR CADENA A CADENAnn");
printf("Elegir opcion: ");
scanf("%d",&opt);
fflush(stdin);
clrscr();
switch(opt){
case 1:
letra();
break;
case 2:
frase();
break;
}
fclose(punt_fich);
}
27. Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
void letra(void){
char t;
do{
printf(":");
t=getchar();
fputc(t,punt_fich);
fflush(stdin);
}while(strcmp(t,"$"));
}
void frase(void){
char *frase;
do{
printf(":");
gets(frase);
fprintf(punt_fich,"%sn",frase);
// fputs(frase,punt_fich);
fflush(stdin);
}while(strcmp(frase,"$"));
}
28. Funciones para la LECTURA de caracteres y cadenas en archivos
SECUENCIALES
Función fgetc/fget
Devuelve el carácter leído del fichero e incrementa el
indicador de posición del archivo. Todos los valores que
lee los transforma a carácter.
Si se llega al final del fichero la función devuelve
EOF.
La cabecera que utiliza es <stdio.h>
29. Funciones para la LECTURA de caracteres y cadenas en archivos
SECUENCIALES
Función fgetc/fget
La sintaxis para estas función es la siguiente:
var_char = fgetc(puntero_archivo);
var_char = getc(puntero_archivo);
30. Funciones para la LECTURA de caracteres y cadenas en archivos
SECUENCIALES
Función fgets:
Lee un determinado número de caracteres de un
archivo y los pasa a una variable de tipo cadena.
Lee caracteres hasta que encuentra un salto de línea,
un EOF o la longitud especificada en la función.
Si se produce un error devuelve un puntero NULL.
La cabecera que utiliza es <stdio.h>
31. Funciones para la LECTURA de caracteres y cadenas en archivos
SECUENCIALES
Función fgets
La sintaxis para estas función es la siguiente:
fgets(variable_cadena,tamaño,puntero_archivo);
32. Funciones para la LECTURA de caracteres y cadenas en archivos
SECUENCIALES
#include <stdio.h>
void letra(void);
void frase(void);
FILE *punt_fich;
void main(void){
int opt;
clrscr();
if((punt_fich=fopen("hla.txt","r"))==NULL){
printf("Error en la apertura");
exit(0);
}
printf("1.LEER LETRA A LETRAn");
printf("2.LEER CADENASnn");
printf("Elegir opcion: ");
scanf("%d",&opt);
fflush(stdin);
switch(opt){
case 1:
letra();
break;
case 2:
frase();
break;
}
getch();
fclose(punt_fich);
}
33. Funciones para la LECTURA de caracteres y cadenas en archivos
SECUENCIALES
void letra(void){
char t=0;
do{
t=getc(punt_fich);
printf("%c",t);
}while(t!=EOF);
}
void frase(void){
char frase[31];
fgets(frase,30,punt_fich);
printf("%s",frase);
}
34. Funciones para la ESCRITURA de caracteres y cadenas en
archivos BINARIOS
Función fwrite:
Escribe los datos de una estructura a un fichero
binario e incrementa la posición del archivo en el
número de caracteres escritos.
La cabecera que utiliza es <stdio.h>
La sintaxis para estas función es la siguiente:
fwrite(&eti_estru,tamaño_estru,nº_reg,punter_arc);
35. Funciones para la ESCRITURA de caracteres y cadenas en
archivos BINARIOS
Función fread:
Lee registros de un fichero binario, cada uno del
tamaño especificado en la función y los sitúa en la
estructura indicada en primer termino de la función.
Además de leer los registros incrementa la posición
del fichero.
La cabecera que utiliza es <stdio.h>
36. Funciones para la ESCRITURA de caracteres y cadenas en
archivos BINARIOS
Función fread:
La sintaxis para estas función es la siguiente:
fread(&eti_estru,tamaño_estru,nº_reg,punter_arc);
37. Funciones para la LECTURA/ESCRITURA de caracteres y
cadenas en archivos BINARIOS
#include<stdio.h>
#include<ctype.h>
void altas(void);
void muestra(void);
FILE *fich;
struct ficha{
int código;
char nombre[25];
char direcion[40];
int edad;
}cliente;
38. Funciones para la LECTURA/ESCRITURA de caracteres y
cadenas en archivos BINARIOS
void main(void){
char opcion;
if((fich=fopen("gestion.dat","a+b"))==NULL){
printf("Error al crear fichero");
exit(0);
}
do{
clrscr();
printf("Altasn");
printf("Consultan");
printf("Salirnn");
printf("Elegir opcion: ");
scanf("%c",&opcion);
fflush(stdin);
switch(toupper(opcion)){
case 'A':
altas();
break;
case 'C':
muestra();
break;
}
}while(toupper(opcion)!='S');
fclose(fich);
}
39. Funciones para la LECTURA/ESCRITURA de caracteres y
cadenas en archivos BINARIOS
void altas(void){
clrscr();
printf("Código: ");
scanf("%d",&cliente.codigo);
fflush(stdin);
printf("Nombre: ");
gets(cliente.nombre);
fflush(stdin);
printf("Direccion: ");
gets(cliente.direcion);
fflush(stdin);
printf("Edad: ");
scanf("%d",&cliente.edad);
fflush(stdin);
fwrite(&cliente,sizeof(cliente),1,fich);
}
40. Funciones para la LECTURA/ESCRITURA de caracteres y
cadenas en archivos BINARIOS
void muestra(void){
int cod_temp;
clrscr();
rewind(fich);
printf("Código a mostrar:");
scanf("%d",&cod_temp);
while(!feof(fich)){
fread(&cliente,sizeof(cliente),1,fich);
if(cod_temp==cliente.codigo){
printf("Código: %dn",cliente.codigo);
printf("Nombre: %sn",cliente.nombre);
printf("Direc: %sn",cliente.direcion);
printf("Edad: %dn",cliente.edad);
getch();
break;
}
}
}