objetivo 01 archivos de texto
DESCRIPTION
Presentación que muestra las funciones básicas para el manejo de archivos de textos en CTRANSCRIPT
Archivos de Datos en
Lenguaje C
Prof. Nakary Ortega de Sánchez
Cumaná, Enero de 2006
Enero 2006 Asignatura: Programación Estructurada II
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
Enero 2006 Asignatura: Programación Estructurada II
Archivos de Datos en Lenguaje C
Desarrollar programas en lenguaje C para el procesamiento de transacciones de archivos de datos
Objetivo General
Enero 2006 Asignatura: Programación Estructurada II
Archivos de Datos en Lenguaje C
1. Aprender a crear, leer, escribir y actualizar archivos de datos en C.
2. Familiarizarse con el procesamiento de Archivos Secuenciales
3. Familiarizarse con el procesamiento de Archivos Binarios
4. Construir programas para el procesamiento de transacciones de archivos secuenciales y binarios
Objetivos Específicos
Enero 2006 Asignatura: Programación Estructurada II
¿Qué es un Archivo de Datos?
Es una colección de registros relacionados entre sí con aspectos en común y organizados para un propósito específico.
Ejemplo:
El archivo de nómina del personal docente del IUT-Cumaná.
Enero 2006 Asignatura: Programación Estructurada II
¿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.
Enero 2006 Asignatura: Programación Estructurada II
¿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
DestinoFlujo de DatosConexión
Enero 2006 Asignatura: Programación Estructurada II
¿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
MemorianotaBuffer stdin
Enero 2006 Asignatura: Programación Estructurada II
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.
Enero 2006 Asignatura: Programación Estructurada II
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.
Enero 2006 Asignatura: Programación Estructurada II
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;
Enero 2006 Asignatura: Programación Estructurada II
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;
Enero 2006 Asignatura: Programación Estructurada II
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);
Enero 2006 Asignatura: Programación Estructurada II
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);
Apertura de un Archivo de Datos
Enero 2006 Asignatura: Programación Estructurada II
El modo puede ser una de las cadenas mostradas en la tabla a continuación:
Archivos Secuenciales
fopen(nombre_archivo, modo);
Apertura de un Archivo de Datos
MODOS DE APERTURA
VALOR DESCRIPCIÓN
r Abre un archivo de texto para lectura.
w Crea un archivo de texto para escritura.
aAbre un archivo de texto para añadir información al final. Sino existe, funciona como w.
r+ Abre un archivo de texto para lectura / escritura.
w+ Crea un archivo de texto para lectura / escritura.
a+Abre o Crea un archivo de texto para añadir información. al final. Sino existe, funciona como w+
Enero 2006 Asignatura: Programación Estructurada II
El modo puede ser una de las cadenas mostradas en la tabla a continuación:
Archivos Binarios
fopen(nombre_archivo, modo);
Apertura de un Archivo de Datos
MODOS DE APERTURA
VALOR DESCRIPCIÓN
rb Abre un archivo binario para lectura.
wb Crea un archivo binario para escritura.
abAbre un archivo de binario para añadir información al final. Sino existe, funciona como w.
r+b Abre un archivo binario para lectura / escritura.
w+b Crea un archivo binario para lectura / escritura.
a+bAbre o Crea un archivo binario para añadir información. al final. Sino existe, funciona como w+b
Enero 2006 Asignatura: Programación Estructurada II
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);
Enero 2006 Asignatura: Programación Estructurada II
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>
Enero 2006 Asignatura: Programación Estructurada II
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);
}
Enero 2006 Asignatura: Programación Estructurada II
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>
Enero 2006 Asignatura: Programación Estructurada II
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);
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fputsEscribe 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>
Enero 2006 Asignatura: Programación Estructurada II
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);
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALES
Función fprintfEscribe 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>
Enero 2006 Asignatura: Programación Estructurada II
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)) ;
Enero 2006 Asignatura: Programación Estructurada II
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\n");printf("2.INTRODUCIR CADENA A CADENA\n\n");printf("Elegir opcion: ");scanf("%d",&opt);fflush(stdin);clrscr();switch(opt){
case 1:letra();break;
case 2:frase();break;
}fclose(punt_fich);
}
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la ESCRITURA de caracteres y cadenas en
archivos SECUENCIALESvoid 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\n",frase);// fputs(frase,punt_fich);fflush(stdin);
}while(strcmp(frase,"$"));}
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la LECTURA de caracteres y cadenas en archivos SECUENCIALES
Función fgetc/fgetDevuelve 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>
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la LECTURA de caracteres y cadenas en archivos SECUENCIALES
Función fgetc/fgetLa sintaxis para estas función es la siguiente:
var_char = fgetc(puntero_archivo);var_char = getc(puntero_archivo);
Enero 2006 Asignatura: Programación Estructurada II
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>
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la LECTURA de caracteres y cadenas en archivos SECUENCIALES
Función fgetsLa sintaxis para estas función es la siguiente:
fgets(variable_cadena,tamaño,puntero_archivo);
Enero 2006 Asignatura: Programación Estructurada II
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\n");printf("2.LEER CADENAS\n\n");printf("Elegir opcion: ");scanf("%d",&opt);fflush(stdin);switch(opt){
case 1:letra();break;
case 2:frase();break;
}getch();fclose(punt_fich);
}
Enero 2006 Asignatura: Programación Estructurada II
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);
}
Enero 2006 Asignatura: Programación Estructurada II
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);
Enero 2006 Asignatura: Programación Estructurada II
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>
Enero 2006 Asignatura: Programación Estructurada II
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);
Enero 2006 Asignatura: Programación Estructurada II
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;
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la LECTURA/ESCRITURA de caracteres y cadenas en
archivos BINARIOSvoid main(void){char opcion;if((fich=fopen("gestion.dat","a+b"))==NULL){
printf("Error al crear fichero");exit(0);
}do{
clrscr();printf("Altas\n");printf("Consulta\n");printf("Salir\n\n");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);
}
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la LECTURA/ESCRITURA de caracteres y cadenas en
archivos BINARIOSvoid 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);}
Enero 2006 Asignatura: Programación Estructurada II
Funciones para la LECTURA/ESCRITURA de caracteres y cadenas en
archivos BINARIOSvoid 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\n",cliente.codigo);printf("Nombre: %s\n",cliente.nombre);printf("Direc: %s\n",cliente.direcion);printf("Edad: %d\n",cliente.edad);getch();break;
}}
}
Enero 2006 Asignatura: Programación Estructurada II