Beruflich Dokumente
Kultur Dokumente
Hasta hoy solo hemos realizados programas que almacenan datos de manera temporal mientras el programa
esta en ejecucin. Ahora abordaremos funciones que nos permitirn almacenar datos desde teclado a un
fichero que guardaremos en cualquier unidad de almacenamiento (Disco Duro, Disquete, emory !lash,etc."
Estructura de un programa que utiliza ficheros:
#include$stdio.h%
main("
&
!'() *pf+ ,*D)-(A.A-'/0 D) 10A 2A.'A3() 4105)./ A 10A )65.1-51.A D) 5'4/ !'()*,
if( (pf 7 fopen(80/3.)9!'-H)./8,8/D/9A4).51.A8""7701((" ,*A3.'. !'-H)./ : 2A('DA.*,
&
perror(8)l fichero no se puede abrir8"+
e;it(<"+
=
,*/4).A-'/0)6 )0 )( !'-H)./*,
fclose(pf"+ ,*-)..A. !'-H)./*,
=
4ara entender esto podemos desarrollar los programas y luego e;plicar las funciones que contienen.
,*4rograma <> fputc.c )ste programa introduce una cadena de caracteres carcter a carcter a un fichero. 0o
produce ninguna impresin a pantalla*,
#include$stdio.h%
#include$string.h%
main("
&
!'() *pf+
char buffer?@<A+
int i7B+
if( (pf 7 fopen(8te;to.t;t8,8C8""7701(("
&
perror(8)l fichero no se puede abrir8"+
e;it(<"+
=
strcpy(buffer,8)ste es un te;to para fputcDEn8"+
Chile(Dferror(pf" FF buffer?iA"
fputc(buffer?iGGA,pf"+
if(ferror(pf""
perror(8)rror durante la escritura8"+
fclose(pf"+
=
Eplicaci!n del programa anterior:
"include#string.h$ > 'ncluimos el fichero que contiene la funcin (strcp%" para manipular cadenas de
caracteres.
FI&E 'pf( > declaramos una Hariable puntero pf de tipo FI&E
if) )pf * fopen)+teto.tt+,+-+..**N/&&.
0
perror)+El fichero no se puede a1rir+.(
eit)2.(
3
)n las lIneas anteriores aperturamos,creamos el fichero teto.tt con la funcin fopen en modo escritura (->
Crite" y comprobamos que si la apertura no se da entonces imprimimos un rotulo de error con la funcin
perror.
strcp%)1uffer,+Este es un teto para fputc45n+.( > en esta lInea copiamos la cadena> Este es un teto para
fputc4 a la Hariable tipo char buffer.
-hile)4ferror)pf. 66 1uffer7i8.
fputc)1uffer7i998,pf.(
)n las dos lIneas anteriores utilizamos un ciclo -hile para introducir carcter a carcter la cadena que tiene
buffer al fichero apuntado por pf a traHJs de la funcin fputc, mientras no se encuentre error en el fichero 4
ferror)pf. y mientras haya datos en el buffer 1uffer7i8.
if)ferror)pf..
perror)+Error durante la escritura+.(
)n las dos lIneas anteriores preguntamos que si hay error ferror)pf. en el archiHo referenciado por pf
entonces imprimimos un rotulo de error asistidos por la funcin de error perror.
fclose)pf.( > cerramos el fichero luego de trabajar en el.
0ota> cuando ejecute el programa no aparecer nada en pantalla. Debe Herificar si el archiHo te;to.t;t esta
creado y si contiene la cadena de caracteres Este es un teto para fputc4. 6i es asI entonces tuHo J;ito.
Funciones utilizadas
!open> abre un fichero
4error> escribe un mensaje de error
);it> sale del programa
6trcpy> copia una cadena de un origen a un destino
!error> comprueba error en el fichero
!putc> imprime en un fichero
!close> cierra un fichero
De esta manera la cadena de caracteres permanecer aun cuando terminemos de ejecutar el programa y
apaguemos el 4-. 4ero si deseamos imprimir esta cadena de caracteres en un futuro en la pantalla
necesitamos otra funcin contraria a fputc. 2eamos el siguiente programa.
,*4rograma K> fgetc.c )ste programa e;trae una cadena de caracteres carcter a carcter contenida en el
fichero teto.tt creado en el programa anterior para luego imprimirla en pantalla.*,
#include$stdio.h%
#include$string.h%
main("
&
!'() *pf+
char buffer?@<A+
int i7B+
if( (pf 7 fopen(8te;to.t;t8,8r8""7701(("
&
perror(8)l fichero no se puede abrir8"+
e;it(<"+
=
Chile(Dferror(pf" FF Dfeof(pf""
buffer?iGGA7fgetc(pf"+
buffer?LLiA7MEBM+
if(ferror(pf""
perror(8)rror durante la lectura8"+
fclose(pf"+
printf(8(a cadena leida es> Ns8,buffer"+
=
Eplicaci!n del programa anterior
-hile)4ferror)pf. 66 4feof)pf..
1uffer7i998*fgetc)pf.(
1uffer7::i8*;5<;(
(as lIneas de cdigos anteriores le dice al 4- que mientras no hayan errores en el fichero y no se llegue al
final del fichero, entonces pase la cadena de te;to carcter a carcter contenida en te;to.t;t a la Hariable
buffer de tipo char y despuJs ponga un fin de lInea> 5<.
Funciones utilizadas
!open> abre un fichero
4error> escribe un mensaje de error
);it> sale del programa
6trcpy> copia una cadena de un origen a un destino
!error> comprueba error en el fichero
!eof> -omprueba si se llego al final del fichero.
!getc> e;trae un carcter desde un fichero
!close> cierra un fichero
,*4rograma O> fputs.c )ste programa imprime una cadena de caracteres capturada desde teclado a un fichero.
)l nombre del fichero se lo da el usuario. : posteriormente e;trae la cadena desde el fichero para imprimirlo
en pantalla.*,
#include$stdio.h%
#define 0 @<
main("
&
!'() *pf+
char buffer?0A,fichero?<OA+
system(8cls8"+
printf(80ombre del !ichero> 8"+
gets(fichero"+
fichero?<KA7MEBM+
if((pf7fopen(fichero,8CGb8""7701(("
&
printf(8)l fichero Ns no se puede abrir8,fichero"+
e;it(B"+
=
printf(8En!ichero Ns abiertoEn8,fichero"+
printf(8Digite un te;to, !inalice cada linea con )nterEn8"+
printf(8!inalice el te;to con !PEn8"+
Chile(gets(buffer"D701(("
&
fputs(buffer,pf"+
if(ferror(pf""
&
perror(8)scribio demasiado te;to8"+
e;it(<"+
=
fputc(MEnM,pf"+
=
reCind(pf"+
system(8cls8"+
printf(8(a cadena escrita es>EnEn8"+
Chile(fgets(buffer,0,pf"D701(("
printf(8Ns8,buffer"+
if(ferror(pf""
perror(8)rror durante la escritura8"+
fclose(pf"+
=
Funciones utilizadas
!puts> imprime una cadena de caracteres a un fichero
.eCind> HuelHe el apuntador al inicio del fichero
!gets> e;trae una cadena de caracteres desde un fichero.
,*4rograma Q> put-.c )ste programa imprime digito a digito una cadena de nRmeros capturada desde teclado
a un fichero 2alores.t;t. : posteriormente e;trae la cadena desde el fichero para imprimirlo en pantalla digito
a digito.*,
#include$stdio.h%
#define 0 S
!'() *pf+
main("
&
int lista?0A+
int i+
pf7fopen(8Halores.t;t8,8CG8"+
for(i7B+i$0+iGG"
&
printf(8EnDato?NdA7 8,iG<"+
scanf(8Nd8,Flista?iA"+
putC(lista?iA,pf"+
if(ferror(pf""
&
perror(8)rror durante la escritura8"+
e;it(<"+
=
=
reCind(pf"+
printf(8EnEn(os Halores e;traidos del fichero E82alores.t;tE8 son>En8"+
Chile(<"
&
i7getC(pf"+
if(feof(pf" TT ferror(pf""
breaU+
printf(8Nd 8,i"+
=
if(ferror(pf""
perror(8)rror durante la escritura8"+
fclose(pf"+
=
Funciones utilizadas
putC> imprime una cadena de nRmeros a un fichero digito a digito.
getC> e;trae una cadena de nRmeros desde un fichero digito a digito.
,*4rograma S> fprintf.c )ste programa imprime registro a registro datos capturados desde teclado a un
fichero registro.t;t. : posteriormente e;trae cada registro desde el fichero para imprimirlo en pantalla.*,
#include$stdio.h%
main("
&
!'() *pf+
char nombre?SA?<BA+
int ep<,epK,epO,asist,nf?SA+
int i+
pf7fopen(8.egistro.t;t8,8CG8"+
if(Dpf"
&
perror(8)n el fichero no puede escribirse8"+
e;it(B"+
=
else
&
for(i7B+i$K+iGG"
&
fflush(stdin"+
printf(8En)studiante Nd> 8,iG<"+gets(nombre?iA"+
fflush(stdin"+
printf(8En);amen 4arcial <> 8"+scanf(8Nd8,Fep<"+
printf(8En);amen 4arcial K> 8"+scanf(8Nd8,FepK"+
printf(8En);amen 4arcial O> 8"+scanf(8Nd8,FepO"+
printf(8EnAsistencia> 8"+scanf(8Nd8,Fasist"+
nf?iA7ep<GepKGepOGasist+
fprintf(pf,8Ns NdEn8,nombre?iA,nf?iA"+
=
reCind(pf"+
printf(8En(os datos son>En8"+
for(i7B+i$K+iGG"
&
fscanf(pf,8Ns Nd8,nombre?iA,Fnf?iA"+
printf(8)studiante> NsEtEt0ota !inal> NdEn8,nombre?iA,nf?iA"+
=
=
fclose(pf"+
=
Funciones utilizadas
fprintf> imprime un registro de datos a un fichero.
fscanf> e;trae un registro desde un fichero.
,*4rograma P> f-rite.c )ste programa imprime registro a registro datos capturados desde teclado a un fichero
registro.t;t. : posteriormente e;trae cada registro desde el fichero para imprimirlo en pantalla.*,
#include$stdio.h%
#include$stdlib.h%
typedef struct r registro+
struct r
&
char referencia?OBA+
long precio+
=+
main("
&
registro reg+
int bytesreg7sizeof(reg"+
!'() *pf+
char sprecio?<BA,respuesta+
pf7fopen(8Datos.dat8,8Cb8"+
system(8cls8"+
printf(8plse !P para finalizarEnEn8"+
printf(8.eferencia> 8"+
Chile(gets(reg.referencia"D701(("
&
printf(84recio> 8"+
gets(sprecio"+reg.precio7atol(sprecio"+
fCrite(Freg,bytesreg,<,pf"+
printf(8En.eferencia> 8"+
=
fclose(pf"+
clearerr(stdin"+
do
&
printf(8VDesea Hisualizar el ficheroW(s,n" 8"+
respuesta7toloCer(getchar(""+
fflush(stdin"+
=Chile((respuestaD7MsM" FF (respuestaD7MnM""+
if(respuesta77MsM"
&
system(8cls8"+
pf7fopen(8Datos.dat8,8rb8"+
fread(Freg,bytesreg,<,pf"+
Chile(Dfeof(pf""
&
printf(8.eferencia> NsEn8,reg.referencia"+
printf(84recio> NldEn8,reg.precio"+
fread(Freg,bytesreg,<,pf"+
=
=
fclose(pf"+
=
Funciones utilizadas>
!Crite> imprime un registro de
datos a un fichero
!read> e;trae un registro desde
un fichero