Bloque 9

Anuncio
Ing. Informática
Programación I
Bloque 9
Ficheros de texto
Bloque 9
Ing. Informática
Programación I
Bloque 9
Ficheros
ƒ
ƒ
ƒ
ƒ
Necesitamos un tipo de datos que nos
permita guardar datos de forma permanente
en el disco: ficheros
El SO se encarga de gestionar físicamente el
fichero
A nosotros nos interesa la estructura de
datos y las operaciones básicas (crear, abrir,
escribir, leer y cerrar) para trabajar con los
ficheros
Nos centramos en ficheros de acceso
secuencial, en concreto de texto (contienen
caracteres)
Ing. Informática
Programación I
La estructura FILE
ƒ
ƒ
ƒ
ƒ
La estructura FILE es la que representa
un fichero y está definida en stdio
Gestiona información a nivel del SO
(ubicación en memoria del buffer,
posición del carácter actual en el
buffer,...)
Nunca declararemos variables de tipo
FILE sino punteros a esa estructura
Por ejemplo:
FILE *f;
Bloque 9
Ing. Informática
Programación I
Bloque 9
Abrir un fichero
ƒ
Función fopen (en stdio)
FILE *f;
f = fopen("nombreFitchero.extensión",
"modo de apertura");
ƒ
Ejemplo:
FILE *f;
f = fopen("hola.txt","r");
ƒ
Modos de apertura
Mode
Explicació
“r”
obre el fitxer per lectura. Si el fitxer no existeix retorna un error
“w”
obre el fitxer per escriptura. Si el fitxer existeix l’esborra i si no en crea un de nou
“a”
obre el fitxer per afegir text al final. Si el fitxer existeix ens situa al final del
mateix i si no en crea un de nou
Ing. Informática
Programación I
Cerrar un fichero
Al acabar de utilizar un fichero hay
que cerrarlo (y que el SO lo libere)
ƒ Función fclose (en stdio)
ƒ Ejemplo:
ƒ
fclose(f);
Bloque 9
Ing. Informática
Programación I
Bloque 9
Leer y escribir
ƒ
ƒ
Funciones getc y putc (en stdio)
Ejemplo:
char c;
FILE *f1, *f2;
...
c=getc(f1);
/*lee un carácter del fichero f1 y lo asigna
a la variable c */
...
putc(c,f2);
/*escribe el valor de la variable c en el
fichero f2 */
ƒ
Estas funciones avanzan el cursor o posición
del carácter actual (es un acceso secuencial),
antes de leer el carácter
Ing. Informática
Programación I
Leer y escribir
ƒ
Si el fichero f contiene el texto “hola” (y
está abierto en modo lectura)
c=getc(f);
ƒ
el cursor avanza al primer carácter, lo
lee (‘h’) y lo asigna a la variable c
Si ahora volvemos a ejecutar
c=getc(f);
el cursor pasa ahora al siguiente
carácter, lo lee (‘o’) y lo asigna a la
variable c
Bloque 9
Ing. Informática
Programación I
Fin del fichero
ƒ
El carácter especial EOF indica que
se ha llegado al final del fichero
ƒ
Todos los ficheros acaban con ese
carácter
Bloque 9
Ing. Informática
Programación I
Ejemplo: impresión de un
fichero completo
#include <stdio.h>
void main()
{
FILE *f;
char c;
f=fopen("fitxer.txt","r"); //obre el fitxer en mode lectura
c=getc(f); //llegeix el primer caràcter
while (c!=EOF)
//repeteix fins que arribi al final de fitxer
{
printf("%c",c);
//escriu el caràcter llegit
c=getc(f);
//llegeix el següent caràcter
}
fclose(f); //tanca el fitxer
}
Bloque 9
Ing. Informática
Programación I
Ejemplo: impresión de un
fichero completo (v.2)
#include <stdio.h>
void main()
{
FILE *f;
char c;
f=fopen("fitxer.txt","r"); //obre el fitxer en mode lectura
while ((c=getc(f))!=EOF) //llegeix i compara amb EOF
printf("%c",c); //escriu el caràcter llegit
fclose(f);
}
//tanca el fitxer
Bloque 9
Ing. Informática
Programación I
Ejemplo: copia de un fichero a
otro
#include <stdio.h>
void main()
{
FILE *fa, *fb;
char c;
fa=fopen("A.txt","r"); //obre el fitxer A per lectura
fb=fopen("B.txt","w"); //obre el fitxer B per escriptura
while ((c=getc(fa))!=EOF) //llegeix i compara amb EOF
putc(c,fb); //escriu el caràcter llegit a B
fclose(fa); //tanca el fitxer A
fclose(fb); //tanca el fitxer B
}
Bloque 9
Ing. Informática
Programación I
Función feof
Mira si el carácter actual (cursor)
es el final del fichero (sin avanzar
el cursor)
ƒ Retorna un entero diferente 0 si es
EOF y 0 si no lo es
ƒ
Bloque 9
Ing. Informática
Programación I
Ejemplo: copia de un fichero a
otro (v.2)
#include <stdio.h>
void main()
{
FILE *fa, *fb;
char c;
fa=fopen("A.txt","r"); //obre el fitxer A per lectura
fb=fopen("B.txt","w"); //obre el fitxer B per escriptura
c=getc(fa); //llegeix del fitxer A
while (!feof(fa)) //comprova que no hem arribat al EOF d’A
{
putc(c,fb); //escriu el caràcter llegit a B
c=getc(fa); //llegeix del fitxer A
}
fclose(fa); //tanca el fitxer A
fclose(fb); //tanca el fitxer B
}
Bloque 9
Ing. Informática
Programación I
Bloque 9
Lectura y escritura con formato
Las funciones fscanf y fprintf son
equivalentes a scanf y printf, pero leyendo o
escribiendo en un fichero (el primer
parámetro es el fichero)
ƒ Ejemplos:
fprintf(fitxer,”%d\t%f”, i, f);
fscanf(fitxer,”%d”,&i);
fscanf(fitxer,”%f”,&f);
fscanf(fitxer,”%s”,cadena);
/* donde i es int, f float,
fitxer
puntero a FILE y cadena un string */
ƒ
Ing. Informática
Programación I
Bloque 9
Lectura y escritura por líneas
Las funciones gets y puts también tienen
sus equivalentes para trabajar con ficheros:
fgets y fputs
ƒ Ejemplos:
fgets(cadena, num, fitxer);
fputs(cadena, fitxer);
/* donde num es int, fitxer puntero a
FILE y cadena un string */
ƒ
Ing. Informática
Programación I
Entrada y salida estándar
ƒ
En C hay 3 ficheros especiales definidos
en la librería stdio:
stdin: la entrada estándar (por teclado)
ƒ stdout: la salida estándar (por pantalla)
ƒ stderr: la salida estándar de errores
ƒ
ƒ
Son equivalentes:
ƒ
fprintf(stdout, ”%d”, i);
ƒ printf(“%d”, i);
ƒ
Son equivalentes:
ƒ
fscanf(stdin, ”%d”, &i);
ƒ scanf(“%d”, &i);
Bloque 9
Descargar