Вы находитесь на странице: 1из 8

Ficheros

conceptos Manejo de ficheros en C


Contienen los datos que se almacenan en dispositivos de almacenamiento Los tipos de datos y funciones necesarias para el manejo de ficheros se
masivo: disquetes, discos duros, DROM, etc. encuentran en la librera de entrada/salida estndar stdio (standard
Conjunto de datos relacionados entre s. input/output).
#include <stdio.h>
Organizacin de los datos:
Sin una estructura regular: texto, cdigo C.
En registros. Los ficheros se manejan utilizando variables de tipo FILE *
Ejemplos:
El asterisco debe aparecer delante
Apellido1 Apellido2 Nombre Edad Telf. FILE *fichero;
del nombre de la variable.
FILE *nominas, *ventas;
Estas variables pueden tener un valor nulo que se representa por la constante NULL.
Registros Gmez Gmez Juan 35 60433423
Prez Mrquez Luca 20 95545434
Los pasos generales para manejar ficheros son los siguientes:
Abrir el fichero.
Realizar las operaciones de entrada/salida (lectura y/o escritura de datos en el
fichero).
Cerrar el fichero.
Campos

Apertura del fichero Apertura del fichero


Funcin fopen Funcin fopen: nombre del fichero
Mediante la apertura asociamos el fichero con una variable de tipo FILE*
Una vez realizada la apertura, la variable se utiliza para acceder al fichero.
Se utiliza la siguiente funcin:
Para especificar el nombre del
FILE *fopen( char nombre[], char modo[] ); fichero con la ruta de acceso, se
utiliza la siguiente sintaxis:
Parmetros:
nombre: Es una cadena de caracteres que contiene el nombre del fichero.
Puede contener la ruta.
modo: Es una cadena de caracteres que indica el modo de apertura del fichero.
Puede contener los siguientes valores:
rt El fichero se abre para leer.
wt El fichero se abre para escribir. Se borra y se escribe al principio.
at El fichero se abre para aadir. Se aaden los datos al final.
E:\\clases\\FI\\ejemplo.txt
Valor devuelto:
Si el fichero no ha podido abrirse, devuelve NULL.
Si el fichero se ha abierto correctamente, devuelve un valor de tipo FILE* que Cada elemento de la ruta (unidad, carpeta y
fichero) se separan con la doble barra invertida \\
se puede utilizar para acceder al fichero.

Fundamentos de Informtica. Dpto. de ATC - Pgina 1 de 8


Especialidades: Electrnica y Mecnica. Turno de Maana.
Apertura del fichero Apertura del fichero
Funcin fopen: modo de apertura Funcin fopen: ejemplo 1a
Abrimos el fichero prueba1.txt para escritura.
Existen tres modos de apertura: #include <stdio.h> Si el fichero existe, se borra su contenido.
Lectura (rt) void main() {
Este modo se utiliza para leer datos del fichero. FILE *fa, *fb;
Si el fichero no existe, no se puede abrir y fopen devuelve NULL. fa = fopen( c:\\dir1\\prueba1.txt, wt );
if (fa == NULL) {
Escritura (wt) printf( Error\n ); Comprobamos si el fichero se ha
Este modo se utiliza para escribir datos en el fichero desde el principio. return; podido abrir.
Si el fichero existe, se borra su contenido. }
Si el fichero no existe, se crea un fichero nuevo vaco con el nombre indicado.
Deben existir todas las carpetas de la ruta especificada; si alguna no existe, El valor devuelto por fopen se guarda en fa. Ahora podemos
fopen no podr abrir el fichero. utilizar fa para acceder al fichero prueba1.txt.
Aadir (at)
fb = fopen( c:\\dir1\\prueba2.txt, wt );
Este modo se utiliza para escribir datos al final del fichero.
if (fb == NULL) {
Si el fichero existe, se mantiene su contenido. printf( Error\n );
Si el fichero no existe, se crea un fichero nuevo vaco con el nombre indicado. return; Podemos abrir ms de un fichero
Deben existir todas las carpetas de la ruta especificada; si alguna no existe, }
fopen no podr abrir el fichero. ... Resto de sentencias del programa
}

Apertura del fichero Escritura de datos en el fichero


Funcin fopen: ejemplo 1b Funcin fprintf
La funcin fprintf se utiliza igual que printf.
El programa anterior se puede escribir de la siguiente manera:
Diferencias entre fprintf y printf:
La funcin fprintf tiene un primer parmetro de tipo FILE*
#include <stdio.h> La funcin fprintf escribe en el fichero indicado por su primer parmetro (en vez
void main() { de hacerlo por pantalla).
FILE *fa, *fb;
fa = fopen( c:\\dir1\\prueba1.txt, wt ); int fprintf( FILE *f, char texto_de_formato[], ... );
if (fa == NULL) {
printf( Error\n );
}else {
fb = fopen( c:\\dir1\\prueba2.txt, wt ); Contiene informacin Contiene el texto que se va a Valores que se van
if (fb == NULL) { sobre el fichero en el que escribir (junto con los cdigos de a imprimir dentro
printf( Error\n ); se va a escribir. formato: %d, %f, etc). del texto.
}else {
... Resto de sentencias del programa
} La funcin fprintf devuelve el n de bytes o caracteres escritos en el fichero.
} En caso de error, devuelve un valor negativo.
}

Fundamentos de Informtica. Dpto. de ATC - Pgina 2 de 8


Especialidades: Electrnica y Mecnica. Turno de Maana.
Escritura de datos en el fichero Escritura de datos en el fichero
Funcin fprintf: ejemplo 1a Funcin fprintf: ejemplo 1b

#include <stdio.h> prueba1.txt


void main() { Se crea o se prueba1.txt Este es el fichero fa
FILE *fa, *fb; borra el fichero linea 1
int i; linea 2
linea 3
fa = fopen( c:\\dir1\\prueba1.txt, wt ); fprintf( fa, Este es el fichero fa\n );
if (fa == NULL) { fprintf( fb, Este es el fichero fb\n );
printf( Error\n ); for (i=1; i<4; i++) {
return; prueba2.txt
fprintf( fa, linea %d\n, i );
Este es el fichero fb
} fprintf( fb, A+%d = %c; , i, A+i ); A+1 = B; A+2 = C; A+3 = D;
fb = fopen( c:\\dir1\\prueba2.txt, wt ); }
if (fb == NULL) { prueba2.txt
printf( Error\n ); ...
return; Se crea o se
} borra el fichero

Contina...

Cierre del fichero Cierre del fichero


Funcin fclose Funcin fclose: ejemplo
Cuando un programa termina de utilizar un fichero, debe cerrarlo.
#include <stdio.h>
La variable de tipo FILE* asociada al fichero queda libre y puede ser utilizada void main() {
para acceder a otro fichero. FILE *fa, *fb;
Se utiliza la siguiente funcin: int i;
fa = fopen( c:\\dir1\\prueba1.txt, wt );
int fclose( FILE *fich );
if (fa == NULL) {
printf( Error\n );
Parmetros: return;
fich: Valor de tipo FILE* asociado al fichero que queremos cerrar. } Apertura de
fb = fopen( c:\\dir1\\prueba2.txt, wt ); ficheros
Valor devuelto:
if (fb == NULL) {
Cero si se ha cerrado sin problemas.
printf( Error\n );
El valor EOF si el fichero no se ha podido cerrar (EOF es una constante definida return;
en la librera stdio). }
fprintf( fa, Este es el fichero fa\n );
fprintf( fb, Este es el fichero fb\n );
for (i=1; i<4; i++) { Operaciones de
fprintf( fa, linea %d\n, i ); entrada/salida
fprintf( fb, A+%d = %c; , i, A+i );
}
Contina...
Fundamentos de Informtica. Dpto. de ATC - Pgina 3 de 8
Especialidades: Electrnica y Mecnica. Turno de Maana.
Cierre del fichero Funciones de escritura de ficheros
Funcin fclose: ejemplo Funcin fputs

fclose(fa); Cierre de los ficheros: el programa no va a seguir int fputs( char cad[], FILE *fich );
fclose(fb); escribiendo en los ficheros.
Escribe el contenido de la cadena de caracteres cad en el fichero asociado a fich.
Devuelve un valor >= 0 si la escritura se ha realizado sin problemas. En caso de error,
fb = fopen( c:\\tmp\\prueba3.txt, rt ); devuelve el valor EOF.
... Ejemplo:
} Las variables fa y fb ya no estn FILE *f = fopen( c:\\tmp\\prueba.txt, wt );
asociadas a ningn fichero. char texto[] = una prueba;
fputs( Esto es , f ); prueba.txt
Esto es una prueba
fputs( texto, f );
Podemos volver a utilizar fb para abrir un nuevo
fichero y realizar operaciones de entrada/salida
sobre l.

Funciones de escritura de ficheros Lectura de datos del fichero


Funcin fputc Posicin de lectura
int fputc( int caracter, FILE *fich ); Posicin de lectura: llamaremos posicin de lectura al punto, dentro del fichero,
donde se comenzar a leer los datos.
Escribe en el fichero asociado a fich el carcter contenido en el parmetro caracter. Cuando se abre un fichero para leer (modo rt), la posicin de lectura se sita
Devuelve el carcter escrito si la escritura se ha realizado sin problemas. En caso de al principio del fichero.
error, devuelve el valor EOF.
Cada vez que se leen datos del fichero, la posicin de lectura avanza para que
Ejemplo: la siguiente lectura comience en el lugar donde termin la anterior.
FILE *f = fopen( c:\\tmp\\prueba.txt, wt );
Ejemplo:
fputc( A, f ); prueba.txt
fputc( 66, f ); AB
Inicialmente, Esto es una prueba
la posicin de
66 es el cdigo lectura est al
ASCII del carcter B principio.

Si leemos 4 Si leemos 6 caracteres, la


caracteres, la posicin de lectura vuelve a
posicin de avanzar.
lectura avanza.

Fundamentos de Informtica. Dpto. de ATC - Pgina 4 de 8


Especialidades: Electrnica y Mecnica. Turno de Maana.
Lectura de datos del fichero Lectura de datos del fichero
Funcin fscanf Funcin fscanf: cdigos de formato
La funcin fscanf se utiliza igual que scanf. Se considera un separador a los siguientes caracteres:
Diferencias entre fscanf y scanf: Carcter espacio:
La funcin fscanf tiene un primer parmetro de tipo FILE* Salto de lnea: \n
La funcin fscanf lee los datos del fichero indicado por su primer parmetro (en vez Tabulador: \t
de leerlos del teclado).
Lectura de valores numricos: %d, %u, %f, %lf, etc
int fscanf( FILE *f, char formato[], ... ); Se salta todos los separadores hasta encontrar el principio de un nmero:
un dgito, +, - o .(para los tipos float y double)
Si antes de encontrar un nmero, encuentra un carcter distinto de los
Contiene informacin Contiene los cdigos de formato de Variables en las que anteriores, la lectura termina y no se lee ningn valor numrico del fichero.
sobre el fichero en el que los valores que se van a leer (%d, se van a guardar los
se va a leer. %f, etc). datos ledos. Lectura de cadena de caracteres: %s
Se salta todos los separadores hasta encontrar un carcter distinto
Lee una cadena de caracteres delimitada por separadores
La funcin fscanf devuelve el n de valores que han sido ledos del fichero y Lectura de caracteres: %c
almacenados en las variables. Si no ha podido leer ms valores porque ha fscanf no se salta ningn carcter, lee el primer carcter que encuentre.
llegado al final del fichero, devuelve EOF.

Lectura de datos del fichero Funciones de lectura de ficheros


Funcin fscanf: ejemplo Funcin fgets
Posicin de lectura
char *fgets( char cadena[], int max, FILE *fich );
#include <stdio.h>
void main() { Lee una secuencia de caracteres del fichero asociado al parmetro fich y los almacena
3.45
float v1; en el parmetro cadena.
int v2; 5.2
La lectura termina cuando se hayan ledo max-1 caracteres, se encuentre un salto de
Procesado Apertura

char c1, c2, c3; lnea o se acabe el fichero.


FILE *f = fopen( c:\\dir1\\ejemplo.txt, rt );
if (f != NULL) { 3.45 Si se encuentra un salto de lnea, este se incluir en la cadena.
fscanf( f, %f, &v1 ); 5.2 Ejemplo:
fscanf( f, %d, &v2 ); FILE *f = fopen( c:\\tmp\\prueba.txt, rt );
fscanf( f, %d, &v2 ); char cad[80];
fscanf( f, %c%c, &c1, &c2 ); En la posicin de lectura hay un . fgets( cad, 80, f ); prueba.txt

} No se puede leer un nmero entero. fgets( cad, 6, f ); Esto es


2 La variable v2 conserva su valor (5). una prueba
Cierre

fclose(f); .

3.45
5.2
}

NOTA: el smbolo () representa un salto de lnea


Fundamentos de Informtica. Dpto. de ATC - Pgina 5 de 8
Especialidades: Electrnica y Mecnica. Turno de Maana.
Funciones de lectura de ficheros Deteccin del fin del fichero
Funcin fgetc Funcin feof

int fgetc( FILE *fich ); Cuando la posicin de lectura del fichero se encuentra al final del fichero, no se
puede seguir leyendo.
Lee un carcter del fichero asociado al parmetro fich. Durante la lectura de datos de un fichero, el programa debe comprobar si se ha
Devuelve el carcter ledo. Si no se puede leer ningn carcter, devuelve el valor EOF. llegado al final del fichero.
Ejemplo: La siguiente funcin nos permite detectar si se ha llegado al final del fichero:
FILE *f = fopen( c:\\tmp\\prueba.txt, rt );
char c1, c2; int feof( FILE *fich );
c1 = fgetc( f ); prueba.txt

c2 = fgetc( f ); Esto es Valor devuelto:


una prueba VERDADERO (distinto de cero): Si en la ltima operacin de lectura se ha
intentado leer fuera del fichero; es decir, si se ha intentado leer despus de
llegar al final del fichero.
FALSO (cero): En caso contrario

Ficheros Ficheros
Tratamiento secuencial Tratamiento secuencial: ejemplo 1a

La secuencia de pasos que seguiremos para el tratamiento secuencial de Realizar un programa que lea los registros de un fichero de temperaturas que contiene un
ficheros es la siguiente: entero por cada lnea (cada lnea corresponde a un registro). El programa debe imprimir por
pantalla los valores ledos.
#include <stdio.h>
Abrir fichero void main() {
Leer un registro int valor;
FILE *f = fopen( c:\\ejemplo.txt, rt );
MIENTRAS no sea fin de fichero HACER if (f == NULL) {
Procesar el registro ledo printf( ERROR\n ); Abrimos el fichero
return;
Leer un registro }
FIN MIENTRAS fscanf( f, %d, &valor ); Leemos un registro
while (!feof(f)) {
Cerrar fichero printf( %d\n, valor ); Procesamos el registro
fscanf( f, %d, &valor );
}
fclose(f);
}

Fundamentos de Informtica. Dpto. de ATC - Pgina 6 de 8


Especialidades: Electrnica y Mecnica. Turno de Maana.
Ficheros Ficheros
Tratamiento secuencial: ejemplo 1b Tratamiento secuencial: ejemplo 2a

Si el ltimo registro no termina con un salto de lnea, el valor de dicho registro no aparece en Tenemos un fichero temp.txt con las temperaturas en C de tres sensores (llamados A, B y
pantalla (no es procesado). C). El siguiente programa copia las temperaturas del sensor A en un fichero llamado
temp_a.txt.
#include <stdio.h>
void main() { Cada lnea del fichero corresponde a un registro que contiene el nombre del sensor (un
int valor; carcter) y la temperatura (un entero) separados por un espacio.
FILE *f = fopen( c:\\ejemplo.txt, rt );
Por ejemplo, para el siguiente fichero temp.txt, debe generarse el fichero temp_a.txt que se
if (f == NULL) {
Supongamos que la posicin de lectura se muestra:
printf( ERROR\n );
encuentra en la marca ( ) y que se va a
return;
ejecutar la siguiente lnea
} temp.txt Temp_a.txt
fscanf( f, %d, &valor ); A
45
45
while (!feof(f)) { 45
B
60
55
printf( %d\n, valor ); 5
A
55
fscanf( f, %d, &valor ); 10
} C
32
fclose(f);
} Se saltan los separadores Se lee el Se intenta leer
hasta encontrar el carcter fuera del fichero.
carcter 1. 0.

Ficheros Ficheros
Tratamiento secuencial: ejemplo 2b Tratamiento secuencial: ejemplo 2c

#include <stdio.h> fscanf( ftemp, %c, &sensor );


Leemos un registro del fichero
void main() { fscanf( ftemp, %d, &temp ); temp.txt
FILE *ftemp, *fsal; fscanf( ftemp, %c, &aux );
char sensor, aux; while (!feof(ftemp)) {
int temp; if (sensor == a) { Procesamos el registro leido y
Abrimos el fichero escribimos un registro en el fichero
ftemp = fopen( c:\\dir\\temp.txt, rt ); fprintf( fsal, %d\n, temp );
en modo lectura temp_a.txt
if (ftemp == NULL) { }
printf( ERROR\n ); fscanf( ftemp, %c, &sensor );
return; fscanf( ftemp, %d, &temp ); Leemos un registro del fichero
} fscanf( ftemp, %c, &aux ); temp.txt
Abrimos el fichero
fsal = fopen( c:\\dir\\temp_a.txt, wt ); }
en modo escritura
if (fsal == NULL) {
fclose( ftemp );
printf( ERROR\n ); Cerramos todos los ficheros
Antes de terminar, debemos fclose( fsal );
fclose( ftemp );
return; cerrar el fichero temp.txt }
}

Contina...
Fundamentos de Informtica. Dpto. de ATC - Pgina 7 de 8
Especialidades: Electrnica y Mecnica. Turno de Maana.
Ficheros
Tratamiento secuencial: ejemplo 2d

Lectura de un registro del fichero temp.txt:


fscanf( ftemp, %c, &sensor );
fscanf( ftemp, %d, &temp );
fscanf( ftemp, %c, &aux );

La variable aux se utiliza para leer A


45
el salto de lnea del registro y B
60
conseguir que la posicin de lectura
se site al principio del siguiente A
55
registro C
32

Fundamentos de Informtica. Dpto. de ATC - Pgina 8 de 8


Especialidades: Electrnica y Mecnica. Turno de Maana.

Вам также может понравиться

  • 1361
    1361
    Документ0 страниц
    1361
    decoret
    Оценок пока нет
  • 20102TTT103IC02T106
    20102TTT103IC02T106
    Документ170 страниц
    20102TTT103IC02T106
    Paul Sánchez
    Оценок пока нет
  • Fiche Ross S
    Fiche Ross S
    Документ8 страниц
    Fiche Ross S
    Jose Rum
    Оценок пока нет
  • Cpi p1 PDF
    Cpi p1 PDF
    Документ9 страниц
    Cpi p1 PDF
    carlos96v
    Оценок пока нет
  • Capitulo 2-Matrices y Deter Min Antes
    Capitulo 2-Matrices y Deter Min Antes
    Документ38 страниц
    Capitulo 2-Matrices y Deter Min Antes
    Jordan Durand Espinoza
    Оценок пока нет
  • SEL Descomp Crout
    SEL Descomp Crout
    Документ76 страниц
    SEL Descomp Crout
    Gonzalo Vega Vergara
    Оценок пока нет
  • Practica de Programación Básica
    Practica de Programación Básica
    Документ9 страниц
    Practica de Programación Básica
    Juan Pablo Gonzalez
    Оценок пока нет
  • Curvas Soluciones
    Curvas Soluciones
    Документ5 страниц
    Curvas Soluciones
    iespaa
    Оценок пока нет
  • Teorema de Rolle
    Teorema de Rolle
    Документ8 страниц
    Teorema de Rolle
    Adrian Begue Gracia
    Оценок пока нет
  • p6 Binario
    p6 Binario
    Документ12 страниц
    p6 Binario
    Jose Rum
    Оценок пока нет
  • Apunte UChile - Ecuaciones Diferenciales Ordinarias (Osses)
    Apunte UChile - Ecuaciones Diferenciales Ordinarias (Osses)
    Документ173 страницы
    Apunte UChile - Ecuaciones Diferenciales Ordinarias (Osses)
    Macarena Catalán González
    Оценок пока нет
  • Análisis I - Cálculo Diferencial en Una Variable
    Análisis I - Cálculo Diferencial en Una Variable
    Документ126 страниц
    Análisis I - Cálculo Diferencial en Una Variable
    Carlos D'Alvano
    Оценок пока нет
  • Es Datos
    Es Datos
    Документ44 страницы
    Es Datos
    rodri2507
    Оценок пока нет
  • Vectores en PHP: Damian Carlos Nieto Casanelli
    Vectores en PHP: Damian Carlos Nieto Casanelli
    Документ26 страниц
    Vectores en PHP: Damian Carlos Nieto Casanelli
    arjoguvi85
    Оценок пока нет
  • Hashing
    Hashing
    Документ21 страница
    Hashing
    Jose Rum
    Оценок пока нет
  • Clase 3
    Clase 3
    Документ41 страница
    Clase 3
    Jose Rum
    Оценок пока нет
  • Pilas Colas
    Pilas Colas
    Документ15 страниц
    Pilas Colas
    Jose Rum
    Оценок пока нет
  • El Rutenio
    El Rutenio
    Документ6 страниц
    El Rutenio
    Jose Rum
    Оценок пока нет
  • Programacion o o
    Programacion o o
    Документ50 страниц
    Programacion o o
    Edeli Ortega
    Оценок пока нет
  • Implementacion
    Implementacion
    Документ7 страниц
    Implementacion
    seedark
    Оценок пока нет
  • POO Ejercicios v3
    POO Ejercicios v3
    Документ89 страниц
    POO Ejercicios v3
    JiiMmy Cahuich
    Оценок пока нет