objetivo 01 archivos de texto

41
Archivos de Datos en Lenguaje C Prof. Nakary Ortega de Sánche Cumaná, Enero de 2006

Upload: nakaryortegaleon

Post on 28-May-2015

5.346 views

Category:

Education


0 download

DESCRIPTION

Presentación que muestra las funciones básicas para el manejo de archivos de textos en C

TRANSCRIPT

Page 1: Objetivo 01 Archivos de Texto

Archivos de Datos en

Lenguaje C

Prof. Nakary Ortega de Sánchez

Cumaná, Enero de 2006

Page 2: Objetivo 01 Archivos de Texto

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

Page 3: Objetivo 01 Archivos de Texto

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

Page 4: Objetivo 01 Archivos de Texto

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

Page 5: Objetivo 01 Archivos de Texto

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á.

Page 6: Objetivo 01 Archivos de Texto

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.

Page 7: Objetivo 01 Archivos de Texto

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

Page 8: Objetivo 01 Archivos de Texto

Enero 2006 Asignatura: Programación Estructurada II

¿Qué es un Flujo o Secuencia?

Ejemplo:Cuando se realiza una función

scanf(“%d”,&nota), 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

Page 9: Objetivo 01 Archivos de Texto

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.

Page 10: Objetivo 01 Archivos de Texto

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.

Page 11: Objetivo 01 Archivos de Texto

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;

Page 12: Objetivo 01 Archivos de Texto

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;

Page 13: Objetivo 01 Archivos de Texto

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);

Page 14: Objetivo 01 Archivos de Texto

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

Page 15: Objetivo 01 Archivos de Texto

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+

Page 16: Objetivo 01 Archivos de Texto

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

Page 17: Objetivo 01 Archivos de Texto

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);

Page 18: Objetivo 01 Archivos de Texto

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>

Page 19: Objetivo 01 Archivos de Texto

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);

}

Page 20: Objetivo 01 Archivos de Texto

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>

Page 21: Objetivo 01 Archivos de Texto

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);

Page 22: Objetivo 01 Archivos de Texto

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>

Page 23: Objetivo 01 Archivos de Texto

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);

Page 24: Objetivo 01 Archivos de Texto

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>

Page 25: Objetivo 01 Archivos de Texto

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)) ;

Page 26: Objetivo 01 Archivos de Texto

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);

}

Page 27: Objetivo 01 Archivos de Texto

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,"$"));}

Page 28: Objetivo 01 Archivos de Texto

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>

Page 29: Objetivo 01 Archivos de Texto

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);

Page 30: Objetivo 01 Archivos de Texto

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>

Page 31: Objetivo 01 Archivos de Texto

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);

Page 32: Objetivo 01 Archivos de Texto

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);

}

Page 33: Objetivo 01 Archivos de Texto

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);

}

Page 34: Objetivo 01 Archivos de Texto

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);

Page 35: Objetivo 01 Archivos de Texto

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>

Page 36: Objetivo 01 Archivos de Texto

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);

Page 37: Objetivo 01 Archivos de Texto

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;

Page 38: Objetivo 01 Archivos de Texto

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);

}

Page 39: Objetivo 01 Archivos de Texto

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);}

Page 40: Objetivo 01 Archivos de Texto

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;

}}

}

Page 41: Objetivo 01 Archivos de Texto

Enero 2006 Asignatura: Programación Estructurada II