Tema 10 Archivos de datos. Fundamentos de Informática

Tema 10 Archivos de datos Fundamentos de Informática Índice • Introducción • Operaciones básicas con archivos • Tipos de Archivos • Archivos de texto • Archivos binarios Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 2 1 • Introducción Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 3 Archivos Un archivo es un conjunto de información que se almacena en un ordenador y puede ser identificado por su ruta completa, cuyo fin ultimo es guardar o proporcionar información. Utilizaremos archivos secuenciales. La memoria RAM se borra en cuanto se corta la corriente. Es necesario un sistema de almacenamiento secundario. Los archivos se almacenan en dispositivos de almacenamiento como el disco duro, diskette, CD ROM, … El manejo de los sistemas de almacenamiento de los archivos es gestionado por el sistema operativo. Carpetas Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Archivos Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 4 Archivos • Hasta ahora los programas han tomado y devuelto datos de:  • teclado ‐ pantalla. • Una operación de lectura de un fichero es parecida a una operación  de lectura de datos desde el teclado • Una operación de escritura de un fichero es parecida a una  operación de escritura en pantalla. • Utilizaremos archivos secuenciales. • Operaciones con archivos: – Apertura de archivos: fopen() – Cierre de archivos: fclose() – Lectura de archivos: fprintf() – Escritura en archivos: fscanf() Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 5 2 Operaciones básicas con archivos Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 6 Operaciones básicas con archivos • Diferencias con el manejo de pantalla y teclado: – Es necesario establecer un área de buffer. • Este área almacena la información mientras se está transfiriendo  hacia o desde el fichero. – Para apuntar a esa área de buffer se utiliza la siguiente declaración: FILE *punt_fichero; – Donde: • FILE es un tipo especial de estructura que establece el área del  buffer. Contiene toda la información que necesitan el resto de  funciones que trabajan con archivos, como el modo del archivo, los  buffers del archivo, errores ... – Incluida en stdio.h • punt_fichero es una variable de tipo puntero que apunta al  comienzo del área del buffer. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 7 Operaciones básicas con archivos • Apertura de un archivo: fopen() – Siempre antes de realizar cualquier operación con un fichero. • Una vez abierto el fichero, y hasta que éste se cierre, se pueden  realizar tantas operaciones como se deseen sin necesidad de  volver a abrirlo. – El objetivo de abrir un fichero es: • Asociar el nombre del archivo “físico” con el área del buffer. • Especificar el uso que se le va a dar al fichero (lectura, escritura,  lectura‐escritura, en modo texto, binario ...). Memoria Externa Memoria Interna Canal físico Programa Buffer Canal lógico Departamento de Sistemas Informáticos Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 8 Registro buffer:  espacio de memoria interna que reserva el sistema para el intercambio de registros entre el archivo y el programa. Escuela Técnica Superior de Ingeniería ICAI Operaciones básicas con archivos • Apertura de un archivo: fopen() – Prototipo de la función: FILE *fopen (char * nombre_completo_archivo, char *modo); • nombre_completo_archivo (cadena de caracteres): es el nombre  del archivo físico sobre el que queremos trabajar. – Incluyendo el camino completo y la unidad en caso de que  fuera necesario. • modo (cadena de caracteres): indica el uso que vamos a hacer del fichero o archivo (ver la siguiente transparencia) • El valor de retorno de fopen(): – Éxito: El puntero al comienzo del área del buffer. – Fracaso: devuelve NULL si no se pudiera abrir el fichero. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 9 Operaciones básicas con archivos • Apertura de un archivo: Modo – “r” » Abre un archivo existente solo para lectura. – “w” » Abre un nuevo archivo solo para escritura. En caso de existir un archivo con ese nombre, lo borra y crea un nuevo archivo vacío. – “a” » Abre un archivo para añadir. Si el archivo no existe crea uno nuevo, pero si existe no borra su contenido. Se posiciona al final del archivo de forma que sucesivas escrituras se añaden al final del archivo original. – “r+” » Abre un archivo existente para actualizarlo (tanto para lectura como para escritura). – “w+” » Abre un archivo nuevo para lectura y escritura. Si existiera un archivo con ese nombre, lo borra y crea un nuevo archivo vacío. – “a+” » Abre un archivo existente para leer y añadir. Si no existiera el archivo se creará uno nuevo. – ‘b’ » Hay que añadirle a cualquiera de los modos anteriores cuando se esté trabajando con datos binarios. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 10 Operaciones básicas con archivos Ejemplo Función fopen(). Apertura para leer y escribir. #include ... int main(void){ FILE *pfich; ... pfich=fopen(“c:\\temp\\pepe.txt”,“r+”);/*Apertura*/ if(pfich==NULL){ /*Comprobamos apertura*/ printf(“Error: No se puede abrir el archivo.\n”); }else{ ... } return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 11 Operaciones básicas con archivos • Cierre de un archivo: fclose() – Su objetivo es liberar el espacio del área del buffer. – Se escriben a disco todos los datos que aún queden en el buffer, se  “desconecta” el archivo del programa y se libera el puntero al archivo. – Es obligatorio cerrar un fichero cuando se haya terminado con su uso  dentro del programa. – Siempre que queramos cambiar la forma de acceso al fichero, también  será necesario cerrarlo y volverlo a abrir especificando el nuevo tipo  de acceso para el man

0 downloads 111 Views 441KB Size

Recommend Stories


TEMA 10 DATOS ESTRUCTURADOS
TEMA 10 DATOS ESTRUCTURADOS 10.1. Matrices 10.2. Strings 10.3. Estructuras 10.4. Enumerados 10.5. Punteros 10.1. Matrices Una matriz es una col

FUNDAMENTOS DE BASE DE DATOS
Informática Aplicada II – Fundamentos de Base de Datos FUNDAMENTOS DE BASE DE DATOS DEFINICIÓN DE BASE DE DATOS Dato: Conjunto de caracteres con algú

Story Transcript

Tema 10 Archivos de datos

Fundamentos de Informática

Índice •

Introducción



Operaciones básicas con archivos



Tipos de Archivos



Archivos de texto



Archivos binarios

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

2

1 • Introducción

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

3

Archivos Un archivo es un conjunto de información que se almacena en un ordenador y puede ser identificado por su ruta completa, cuyo fin ultimo es guardar o proporcionar información. Utilizaremos archivos secuenciales. La memoria RAM se borra en cuanto se corta la corriente. Es necesario un sistema de almacenamiento secundario. Los archivos se almacenan en dispositivos de almacenamiento como el disco duro, diskette, CD ROM, … El manejo de los sistemas de almacenamiento de los archivos es gestionado por el sistema operativo.

Carpetas Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Archivos Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

4

Archivos • Hasta ahora los programas han tomado y devuelto datos de:  • teclado ‐ pantalla. • Una operación de lectura de un fichero es parecida a una operación  de lectura de datos desde el teclado • Una operación de escritura de un fichero es parecida a una  operación de escritura en pantalla. • Utilizaremos archivos secuenciales. • Operaciones con archivos: – Apertura de archivos: fopen() – Cierre de archivos: fclose() – Lectura de archivos: fprintf() – Escritura en archivos: fscanf()

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

5

2 Operaciones básicas con archivos

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

6

Operaciones básicas con archivos • Diferencias con el manejo de pantalla y teclado: – Es necesario establecer un área de buffer. • Este área almacena la información mientras se está transfiriendo  hacia o desde el fichero. – Para apuntar a esa área de buffer se utiliza la siguiente declaración: FILE *punt_fichero; – Donde: • FILE es un tipo especial de estructura que establece el área del  buffer. Contiene toda la información que necesitan el resto de  funciones que trabajan con archivos, como el modo del archivo, los  buffers del archivo, errores ... – Incluida en stdio.h • punt_fichero es una variable de tipo puntero que apunta al  comienzo del área del buffer.

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

7

Operaciones básicas con archivos • Apertura de un archivo: fopen() – Siempre antes de realizar cualquier operación con un fichero. • Una vez abierto el fichero, y hasta que éste se cierre, se pueden  realizar tantas operaciones como se deseen sin necesidad de  volver a abrirlo. – El objetivo de abrir un fichero es: • Asociar el nombre del archivo “físico” con el área del buffer. • Especificar el uso que se le va a dar al fichero (lectura, escritura,  lectura‐escritura, en modo texto, binario ...). Memoria Externa Memoria Interna

Canal físico Programa Buffer

Canal lógico Departamento de Sistemas Informáticos Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos 8 Registro buffer:  espacio de memoria interna que reserva el sistema para el intercambio de registros entre el archivo y el programa. Escuela Técnica Superior de Ingeniería ICAI

Operaciones básicas con archivos • Apertura de un archivo: fopen() – Prototipo de la función: FILE *fopen (char * nombre_completo_archivo, char *modo); • nombre_completo_archivo (cadena de caracteres): es el nombre  del archivo físico sobre el que queremos trabajar. – Incluyendo el camino completo y la unidad en caso de que  fuera necesario. • modo (cadena de caracteres): indica el uso que vamos a hacer del fichero o archivo (ver la siguiente transparencia) • El valor de retorno de fopen(): – Éxito: El puntero al comienzo del área del buffer. – Fracaso: devuelve NULL si no se pudiera abrir el fichero.

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

9

Operaciones básicas con archivos •

Apertura de un archivo: Modo – “r” » Abre un archivo existente solo para lectura. – “w” » Abre un nuevo archivo solo para escritura. En caso de existir un archivo con ese nombre, lo borra y crea un nuevo archivo vacío. – “a” » Abre un archivo para añadir. Si el archivo no existe crea uno nuevo, pero si existe no borra su contenido. Se posiciona al final del archivo de forma que sucesivas escrituras se añaden al final del archivo original. – “r+” » Abre un archivo existente para actualizarlo (tanto para lectura como para escritura). – “w+” » Abre un archivo nuevo para lectura y escritura. Si existiera un archivo con ese nombre, lo borra y crea un nuevo archivo vacío. – “a+” » Abre un archivo existente para leer y añadir. Si no existiera el archivo se creará uno nuevo. – ‘b’ » Hay que añadirle a cualquiera de los modos anteriores cuando se esté trabajando con datos binarios.

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

10

Operaciones básicas con archivos Ejemplo

Función fopen(). Apertura para leer y escribir.

#include ... int main(void){ FILE *pfich; ... pfich=fopen(“c:\\temp\\pepe.txt”,“r+”);/*Apertura*/ if(pfich==NULL){ /*Comprobamos apertura*/ printf(“Error: No se puede abrir el archivo.\n”); }else{ ... } return 0; }

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

11

Operaciones básicas con archivos • Cierre de un archivo: fclose() – Su objetivo es liberar el espacio del área del buffer. – Se escriben a disco todos los datos que aún queden en el buffer, se  “desconecta” el archivo del programa y se libera el puntero al archivo. – Es obligatorio cerrar un fichero cuando se haya terminado con su uso  dentro del programa. – Siempre que queramos cambiar la forma de acceso al fichero, también  será necesario cerrarlo y volverlo a abrir especificando el nuevo tipo  de acceso para el manejo del fichero. • Un fichero no puede abrirse mas de una vez sin antes haberlo  cerrado.

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

12

Operaciones básicas con archivos • Cierre de un archivo: fclose() – Prototipo de la función: int fclose(FILE *puntero_al_archivo); • puntero_al_archivo: es el puntero a archivo devuelto por la función  fopen() al abrir el archivo que se desea cerrar. • El valor devuelto por la función es: 0: si el archivo se cerró con éxito,  ‐1: si ocurrió algún tipo de error al cerrarlo  Independientemente del valor de retorno, el archivo se cierra. Un error típico es que el disco se ha llenado y no se ha podido vaciar  el buffer con la consiguiente pérdida de datos Ejemplo

Función fclose(). Cierre fichero “pepe.txt” ejemplo anterior.

if(fclose(pfich)!=0){ printf(“Error al cerrar el archivo\n”); printf(“Posible pérdida de datos”); } Departamento de Sistemas Informáticos Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos Escuela Técnica Superior de Ingeniería ICAI

13

Operaciones básicas con archivos #include int main(void) { FILE *pfich;

Declaración de un puntero a archivo

pfich = fopen(“datos.txt”,”w”);

Apertura en modo escritura (w) del archivo “datos.txt”

Comprobación de que la if (pfich == NULL) { apertura ha sido correcta printf(“\n Error al abrir el fichero”); }else{ ... /* Se utiliza el archivo para escritura */ /* Al acabar de usar el archivo */ Cierre del archivo y comprobación de si se ha realizado correctamente if (fclose(pfich) != 0) { printf(”\n Error al cerrar el archivo “); } } } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

14

3 Tipos de archivos

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

15

Tipos de archivos • Tipos de archivo: – Texto. • Archivos ASCII planos, obtenidos y manejados desde programa utilizando  cadenas de caracteres. • Se pueden ver con un editor de texto. – Binario. • Archivos con los datos guardados como copia exacta de la memoria del  ordenador (binario). • Sólo comprensible desde un programa que “sepa” qué tipos de datos  contiene el archivo y de qué forma están guardados. • Si se visualizan con un editor de texto no son comprensibles. • Los archivos binarios y los programa que utilizan archivos binarios no son  fácilmente portables a otros ordenadores y otros compiladores (el  tamaño de las variables puede variar). • Los archivos de texto son legibles y fáciles de portar, pero ocupan más espacio  para almacenar la información. • Los archivos binarios no son legibles con un editor de texto y no son portables de  un ordenador a otro, pero ocupan menos espacio • Ejemplo: variable entera de valor 2563 (texto: 4 bytes; binario: 2 bytes). Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

16

Tipos de archivos •

Creación de un archivo: – Un archivo secuencial debe ser creado antes de ser  procesado. – Formas de crear un archivo: Directamente: Mediante el uso de un editor de texto  (archivos de texto). • Indirectamente: Mediante un programa que reciba  información, la procese y la guarde en un archivo (texto o  binario). •



La lectura y escritura de archivos varía según el tipo de  archivos: – Texto: fprintf, fscanf, getc, putc, fgets, fputs – Binarios: fwrite, fread, fseek

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

17

4 Archivos de texto

Archivos de Texto • •

Son los archivos que contienen caracteres ASCII. Apertura y cierre de fichero. –



Según lo visto en las transparencias anteriores.

Los archivos guardan cadenas de caracteres: Es posible utilizar las funciones de biblioteca utilizadas para  escribir o leer cadenas vistas a lo largo del curso. – La diferencia está en que ahora cuando se utilicen estas  funciones hay que incluir el puntero al buffer del fichero • putc(caracter,puntero) • getc(puntero) • fputs(cadena,puntero) • fgets(cadena,numero de caracteres,puntero) • fprintf(puntero,cadena de control,variables) • fscanf(puntero, cadena de control,variables) –

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

19

Archivos de Texto •

Las funciones fprintf() y fscanf(): –



Las propias funciones se encargan de realizar las conversiones de formato que son  necesarias para poder transformar los valores binarios usados internamente en el  ordenador a cadenas de caracteres usadas en los archivos de texto.

fprintf(): – –

El funcionamiento es idéntico al de printf() salvo que ahora es necesario indicar en  qué archivo ha de escribir. Valor de retorno:  • Éxito: devuelve el número de bytes que ha escrito • Fracaso: devuelve EOF

fprintf (FILE *puntero_al_archivo, const char *cadena_de_formato,...);

Ejemplo ...

Función fprintf(). Escritura en el fichero “pepe.txt”. /*Apertura realizada*/

fprintf(pfich,”El valor de %d en hexadecimal es %x\n”,15,15);

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

20

Archivos de Texto •

fscanf(): – –

El funcionamiento es idéntico al de scanf() salvo que ahora es  necesario indicar en qué archivo ha de leer. Valor de retorno (cuando sólo se lee un valor):  • • •



Éxito: devuelve el valor 1 si ha leído correctamente Fracaso: devuelve 0 si ha ocurrido un error en la lectura por una mala  especificación de formato. EOF: si no se ha leído nada porque se ha llegado al final del archivo.

Valor de retorno (cuando sólo se lee más de un valor):  •

• •

El valor devuelto es igual al número de datos leídos si se ha leído  correctamente.(devuelve el número de argumentos que han sido  leídos y a los que se le ha asignado un valor.) Si se ha producido algún error antes de leer todos los datos el valor  devuelto es igual al número de datos leídos correctamente. EOF: si no se ha leído nada porque se ha llegado al final del archivo.

int fscanf (FILE *puntero_al_archivo, const char *cadena_de_formato,...);

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

21

Archivos de Texto /* Programa: Lee el archivo "pepe" que contiene números en punto flotante y calcula su suma. */ #include int main(void) { int n; /* Valor devuelto por fscanf */ FILE *pfich; /* Puntero al archivo */ double dato; /* dato leído del fichero */ double sum_tot; /* Suma de los datos */ pfich = fopen("pepe.txt", "r+"); if (pfich == NULL){ printf("Error: No se puede abrir el fichero \"pepe\"\n"); }else{

•Si el archivo pepe.txt contiene: 1.3 3.4 4.5 123.4 • El resultado sería: El valor de la suma es: 132.600000

sum_tot = 0; /* Inicialización de la suma antes de entrar en el bucle*/ n = fscanf(pfich, “ %lf ", &dato); while (n != EOF && n != 0) { /* termina en cuanto ocurra un error de lectura*/ sum_tot+=dato; n = fscanf(pfich, “ %lf ", &dato); } printf("El valor de la suma es: %lf\n", sum_tot); if( fclose(pfich) != 0){ printf("Error al cerrar el fichero\n"); } } return 0;

}

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

22

8.- Archivos de texto Ejemplo

Manejo de archivos.

Diseñar un programa que escriba en el fichero “c:\temp\pepe.txt” los números 1.3, 3.4, 4.5 y 123.4 en líneas separadas y cierre el fichero. A continuación es programa abrirá el fichero para lectura, leerá todos los datos introducidos anteriormente, los sumará e imprimirá la suma. #include #include int main(void) {int n; FILE *fichero; double dato; double sum_tot;

/*Valor devuelto por fscanf*/ /*Puntero al archivo*/ /*Dato leído del fichero*/ /*Suma de los datos*/

/*Abrimos el fichero para introducir datos*/ fichero=fopen("c:\\temp\\pepe.txt", "w"); if(fichero==NULL) printf("Error de apertura"); else {fprintf(fichero,"1.3\n3.4\n4.5\n123.4"); 1

2

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

23

8.- Archivos de texto 1

2

/*Cerramos el fichero*/ if(fclose(fichero)!=0) {printf("Error al cerrar le fichero\n"); } } /*Abrimos el fichero para leer datos*/ fichero=fopen("c:\\temp\\pepe.txt", "r"); if(fichero==NULL) printf("Error de apertura"); else {sum_tot=0.0; n=fscanf(fichero,"%lf",&dato); while(n!=1) {sum_tot=sum_tot+dato; n=fscanf(fichero,"%lf",&dato); } 1

3

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

24

8.- Archivos de texto 1

3

/*Imprimimos la suma*/ printf(" El valor de la suma es : %lf\n",sum_tot); /*Cerramos el fichero*/ if(fclose(fichero)!=0) {printf("Error al cerrar el fichero\n"); } } }

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

25

Archivos de Texto •

Las funciónes fgets(), fputs(), getc() ó fgetc(), putc() ó fputc() – –



Son funciones que escriben o leen un carácter (fgetc(), getc(), fputc(), putc()) o  cadenas de caracteres (fgets(), fputs()) No realizan conversión de formatos (todo se hace con caracteres)

Lectura de un carácter:  int fgetc(FILE *puntero_a_archivo) ó int getc(FILE *puntero_a_archivo) – –

Leen el siguiente carácter del archivo. Valor de retorno: • •



Éxito: el carácter leído Fracaso: Si llega al final de fichero u ocurre un error, el valor de retorno es EOF.

Escritura de un carácter:  int fputc(int car, FILE * puntero_a_archivo) ó int putc(int car, FILE * puntero_a_archivo)  – –

Escriben el carácter car en el archivo al que apunta puntero_a_archivo.  Valor de retorno: • •

Éxito: el propio carácter escrito Error: EOF 

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

26

Archivos de Texto #include #include #include int main(void) { FILE *punt; char c; punt=fopen("datos.txt","w"); if (punt==NULL) { printf("\n Error – NO SE PUEDE ABRIR EL FICHERO"); } else { do { c = toupper(getchar()); putc(c, punt); }while (c != '\n'); if (fclose(punt) != 0) { printf("Error al cerrar el fichero"); } } return 0; } Departamento de Sistemas Informáticos Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos Escuela Técnica Superior de Ingeniería ICAI

27

Cadena de caracteres: fgets(), fputs() •

Lectura de una cadena de caracteres: char * fgets(char *cadena, int tam_cad, FILE *punt_a_arch)

La cadena leída se almacena en esta variable –

Valor de retorno: • •



Al final de la cadena siempre se añade el ‘\0’

La lectura termina cuando: - Encuentra el \n (que sí se copia) - Encuentra el fin de fich (no se escribe \n) - Se han leído (tam_cad-1) caracteres

Éxito: es un puntero a la cadena leída. Fracaso: NULL, si se llega al final de fichero u ocurre un error

Escritura de una cadena de caracteres: int fputs(const char *cadena, FILE *punt_a_arch)  –

Valor de retorno: • •

Escribe la cadena en el archivo al que apunta punt_a_arch SIN EL ‘\0’ DEL FINAL

Éxito: número positivo si se ha escrito la cadena correctamente Error: EOF 

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

28

Archivos de Texto •

Lectura de una cadena de caracteres:  char * fgets(char *cadena, int tam_cad, FILE *puntero_a_archivo). – –



Lee una cadena de caracteres del archivo apuntado por puntero_a_archivo y  la almacena en cadena. La lectura se acaba cuando se encuentra el carácter ‘\n’ (que SÍ se escribe en  la cadena), cuando se encuentra el fin de fichero (en este caso no se escribe  ‘\n’ en la cadena) o cuando se han leído  tam_cad‐1 caracteres. En todos estos casos, se escribe un carácter ‘\0’ en la  cadena a continuación del último carácter leído. Valor de retorno: • •



Éxito: es un puntero a la cadena leída. Fracaso: NULL, si se llega al final de fichero u ocurre un error

Escritura de una cadena de caracteres:  int fputs(const char *cadena, FILE *puntero_a_archivo)  – –

Escribe la cadena en el archivo al que apunta puntero_a_archivo SIN EL ‘\0’ DEL FINAL. Valor de retorno: • •

Éxito: número positivo si se ha escrito la cadena correctamente Error: EOF 

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

29

Archivos de Texto Ejemplo 1: OPCION A, lectura de una cadena del teclado, escritura en un archivo y lectura de esa cadena del archivo

#include #include int main(void) { FILE *punt; char cadena[80]; char cadena2[80];

punt=fopen("a:\\datos.txt","r"); if (punt==NULL){ printf("\nerror - NO SE PUEDE ABRIR EL FICH "); }else{ fgets(cadena2,80,punt);

punt=fopen("a:\\datos.txt","w"); if (punt==NULL) { printf("\n Error - NO SE PUEDE ABRIR EL FICHERO PARA ESCRIBIR"); }else{ puts("\nIntroduzca una cadena de caracteres:\n"); gets(cadena); fputs(cadena,punt); if (fclose(punt) != 0) { printf(“Error cerrando el archivo “); } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

if (fclose(punt) != 0) { printf(“Error al cerrar el archivo”); } puts("\nYa hemos leido el fichero y contiene:\n"); puts(cadena2); } } }

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

30

Archivos de Texto Ejemplo 1: OPCION B, lectura de una cadena del teclado, escritura en un archivo y lectura de esa cadena del archivo #include #include #include int main(void) { FILE *punt; char cadena[80]; char cadena2[80];

fgets(cadena2,80,punt); if (fclose(punt) != 0) { printf(“Error al cerrar el archivo”); }

punt=fopen("datos.txt","w+"); if (punt==NULL) { printf("\n Error - NO SE PUEDE ABRIR EL FICHERO PARA ESCRIBIR"); }else{

puts("\nYa hemos leido el fichero contiene:\n"); puts(cadena2); } }

puts("\nIntroduzca una cadena de caracteres:\n"); gets(cadena); fputs(cadena,punt); /* Es necesario volver a apuntar al principio del archivo con el puntero */ rewind(punt); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

ATENCIÓN

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

31

Archivos de Texto if (fclose(punt) != 0) { printf(“Error al cerrar el fichero “); }

#include #include #define TAM 80 int main(void) { FILE *punt; char cadena[TAM]; char cadena2[TAM]; char nombre_archivo[TAM]; int n;

} punt=fopen(nombre_archivo,"r"); if (punt == NULL) { printf("\n Error - NO SE PUEDE ABRIR EL FICHERO” “ PARA ESCRIBIR"); }else{ puts("\nYa hemos leido el fichero y contiene:\n"); n = fscanf(punt,"%[^\n]\n",cadena2); if (n == EOF || n == 0) { printf(“Error al leer la cadena 2”); }else{ puts(cadena2); if (fclose(punt) != 0) { printf(“Error al cerrar el fichero “); } } }

printf(“Introduzca el nombre del archivo”); gets(nombre_archivo); punt=fopen(nombre_archivo,"w"); if (punt == NULL) { printf("\n Error - NO SE PUEDE ABRIR EL” “ FICHERO PARA ESCRIBIR"); }else{ puts("\nIntroduzca una cadena de caracteres:\n"); gets(cadena); fprintf(punt,"%s\n",cadena);

Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI

}

Tema 1:  Introducción. Arquitectura básica y Sistemas Operativos

32

Archivos de Texto Ejemplo: Almacenamiento de estructuras en archivos de texto #include #include #include #define N 2 /* Dimensión de los vectores (número de productos) */ / * Declaración de una estructura para los productos */ typedef struct { char nombre[12]; int precio; }PROD;

Resultado: archivo datos.txt (35 caracteres) CD Rosana 2563 CD Titanic 2628

/*** Creo el archivo ***/ int main(void) f = fopen("datos.txt","w"); { if (f ==NULL) { PROD producto[N]; /* Vector de productos en el almacén */ printf("Error al crear el archivo datos.txt\n"); int i; /* contador para los bucles*/ }else{ FILE *f; /* Descriptor del archivo de texto */ for (i = 0; i

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.