El documento trata sobre los archivos de datos en lenguaje C. Explica que los archivos permiten almacenar grandes volúmenes de datos de manera permanente. Detalla los tipos de archivos (secuenciales y binarios), y las funciones básicas para crear, abrir, cerrar, leer, escribir y actualizar archivos de datos en C.
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
Objetivo 01 Archivos de Texto
1. Archivos de Datos en Lenguaje C Prof. Nakary Ortega de Sánchez Cumaná, Enero de 2006
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.
5.
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 Destino Flujo 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 Memoria nota 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. Apertura de un Archivo de Datos 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);
15. Apertura de un Archivo de Datos El modo puede ser una de las cadenas mostradas en la tabla a continuación : Archivos Secuenciales fopen(nombre_archivo, modo); Abre o Crea un archivo de texto para añadir información. al final. Sino existe, funciona como w+ a+ Crea un archivo de texto para lectura / escritura. w+ Abre un archivo de texto para lectura / escritura. r+ Abre un archivo de texto para añadir información al final. Sino existe, funciona como w. a Crea un archivo de texto para escritura. w Abre un archivo de texto para lectura. r DESCRIPCIÓN VALOR MODOS DE APERTURA
16. Apertura de un Archivo de Datos El modo puede ser una de las cadenas mostradas en la tabla a continuación : Archivos Binarios fopen(nombre_archivo, modo); Abre o Crea un archivo binario para añadir información. al final. Sino existe, funciona como w+b a+b Crea un archivo binario para lectura / escritura. w+b Abre un archivo binario para lectura / escritura. r+b Abre un archivo de binario para añadir información al final. Sino existe, funciona como w. ab Crea un archivo binario para escritura. wb Abre un archivo binario para lectura. rb DESCRIPCIÓN VALOR MODOS DE APERTURA
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 LETRA"); printf("2.INTRODUCIR CADENA A CADENA"); 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,"%s",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 LETRA"); printf("2.LEER CADENAS"); 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("Altas"); printf("Consulta"); printf("Salir"); 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: %d",cliente.codigo); printf("Nombre: %s",cliente.nombre); printf("Direc: %s",cliente.direcion); printf("Edad: %d",cliente.edad); getch(); break; } } }