Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que...

15
1 Archivos SESION 13 Mónica E. García Conceptos Definición Un archivo es una secuencia de bits almacenados en algún dispositivo externo tal como un disco o una cinta magnética. En C un archivo es simplemente un flujo(stream) externo: una secuencia de bytes almacenados en disco. Tipos de Archivos Por la forma de almacenamiento de los datos: de texto y binarios Por la forma de acceso : secuenciales y directos

Transcript of Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que...

Page 1: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

1

Archivos

SESION 13

Mónica E. García

ConceptosDefinición

Un archivo es una secuencia de bits almacenados en algúndispositivo externo tal como un disco o una cinta magnética.

En C un archivo es simplemente un flujo(stream) externo:una secuencia de bytes almacenados en disco.

Tipos de Archivos

Por la forma de almacenamiento de los datos: de texto ybinarios

Por la forma de acceso : secuenciales y directos

Page 2: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

2

Mónica E. García

Tipos de ArchivosLos archivos de texto almacenan datos como códigos ASCII.Los valores simples, como números y caracteres únicos,están separados por espacios. Se pueden utilizar paraalmacenamiento de datos o crear imágenes de salidaimpresa que se pueden enviar más tarde a una impresora.

Los archivos binarios almacenan flujos de bits, sin prestaratención a los código ASCII o a la separación de espacios.Son adecuados para almacenar objetos. El uso de estosarchivos requiere usar la dirección de una posición dealmacenamiento

Mónica E. García

CreaciónLa declaración de una variable de tipo archivo es comosigue:

FILE *variable;

donde FILE es un tipo de estructura que establece el áreade buffer para un archivo. un área de buffer, donde lainformación se almacena temporalmente mientras se estátransfiriendo entre la memoria y el archivo de datos. Lavariable tipo apuntador variable indica el inicio de estaárea. El tipo FILE está definido en la librería stdio.h.

Page 3: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

3

Mónica E. García

Para trabajar con un archivo

Se necesitan seguir los siguientes pasos:

Abrir el archivo. En la apertura se debe de indicarel modo(Escritura,Lectura..) y la ruta del archivo.

Realizar las operaciones de Escritura y lectura enel archivo

Cerrar el archivo

Mónica E. García

Operaciones para archivos

Las distintas operaciones que sepueden realizar son:

Creación Consulta Actualización (modificación, altas,bajas) Clasificación y reorganziación Destrucción (borrado) Unión (de dos o mas contenidos de archivos)

Page 4: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

4

Archivos de Texto

Archivos de acceso secuencial

Mónica E. García

Archivos de acceso secuencial

En este tipo de acceso, todos los registros son almacenadossecuencialmente en el medio de almacenamiento. A esto se lellama organización física secuencial. La secuencia física deregistros es usualmente ordenada de acuerdo a una claveprimaria.

El manejo secuencial de un archivo es recomendable cuando sedeben procesar todos o la mayoría de los registros, como porejemplo en los casos de una nómina de empleados o en laelaboración de reportes contables, ya en aplicaciones donde eltiempo real son importantes este acceso es ineficientes.

Page 5: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

5

Mónica E. García

Archivos de texto

Los archivos de texto son un caso particular dearchivos secuenciales.

Estos archivos contienen caracteres consecutivos,los cuales se pueden interpretar como datosindividuales, como componentes de una cadena ocomo números.

Mónica E. García

Apertura de un archivo (fopen)

var=fopen (nombre_archivo,tipo_apertura);

donde nombre_archivo y tipo_apertura son variables detipo cadena. La variable var es de tipo archivo (FILE).

La función fopen retorna un apuntador al principio delárea de buffer asociada con el archivo. Se retorna unvalor NULL si no se puede abrir el archivo

Page 6: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

6

Mónica E. García

Modos de aperturaLos tipos o modos de archivo son:

"r": Abrir un archivo existente sólo para lectura. "w": Abrir un nuevo archivo sólo para escritura. Si ya

existe, será destruido y creado uno nuevo (sobreescritura). "a": Abrir un archivo para añadir. Si no existe, se crea uno

nuevo. "r+": Abrir un archivo existente para lectura y escritura. "w+": Abrir un archivo nuevo para lectura y escritura. Si

ya existe, será destruido y creado uno nuevo. "a+": Abrir un archivo existente para leer y añadir. Si no

existe, se crea uno nuevo.

Mónica E. García

Ejemplo FILE *archi; char ruta[15]=“a:Prueba.txt”, acceso[2]=“a+”;..... archi = fopen(ruta,acceso); if (archi == 0)

printf(“Creacion y apertura exitosa”);

O BIEN : FILE *archi; ..... archi = fopen(“a:Archivosprueba.txt”,”a+”); if (archi != 0)

printf(“ERROR en la creación del archivo”); else

printf(“Creacion y apertura exitosa”);

Page 7: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

7

Mónica E. García

Almacenamiento de datosfprintf (apunta_archi,”formatos”,Var1,Var2,..);

Ejemplo:fprintf(ptr,”%d %f”,x,y);

Donde: FILE *ptr; int x; float y;

Variable tipoapuntador aarchivo Se colocan tantos tipos de

formatos como variablessean, es importante el orden.

Nombre de lasvariables queseránalmacenadas,deben irseparadas porcomas.

Mónica E. García

Ejemplo de almacenamientoSuponerstruct registro{ int ncontrol; char nombre[15]; int edad; char sexo;}alumno;FILE *arch;

// Se realiza la lectura printf("\n Dar numero de control: ");

scanf("%d",&alumno.ncontrol); fflush(stdin); printf("\n Dar sólo el nombre : "); gets(alumno.nombre); printf("\n Dar edad: "); scanf("%d",&alumno.edad); fflush(stdin); printf("\n Sexo [F/M]: "); scanf("%c",&alumno.sexo);

// Se almacenan los datos en el archivofprintf(arch,"\n %d %s %d %c",alumno.ncontrol,alumno.nombre,alumno.edad,alumno.sexo);

Page 8: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

8

Mónica E. García

Cerrar un archivo

Lo que se logra al cerrar un archivo esterminar el acceso o detener el uso delarchivo. Para esto se hace uso de la funciónfclose.

fclose(apunt_archi);

Mónica E. García

Obtención de datos del archivo

fscanf (apunta_archi,”formatos”,&Var1,&Var2,…);

Ejemplo:fscanf(ptr,”%d %f”,&x,y);

Donde: FILE *ptr; int x;

char y[5];

Variable tipoapuntador aarchivo Se colocan tantos tipos de

formatos como variablessean, es importante el orden.

Nombre de lasvariables queseránalmacenadas,deben irseparadas porcomas.El & no siempre seusa para variablestipo char

Page 9: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

9

Mónica E. García

Acceso al archivo Función feof

Sirve para detectar una condición de fin de archivo (gralmente. usadaara archivos secuenciales). Esta función devuelve un valor distinto decero si detecta una condición de fin de archivo y un valor cero (falso) sino se detecta.

Generalmente se usa con el ciclo de repetición while.

Ejemplo: while (!feof(apunta_archi)) { Acciones

}

Mónica E. García

Ejemploprintf("\n\t***** SALIDA DE DATOS DESDE EL ARCHIVO ******** \n"); printf("\n\t __NUMERO___NOMBRE___EDAD____SEXO__\n ");

//Uso del ciclo while

while(!feof(arch)) //equivale a x=feof(arch); while(x!=0) { .....} { // Se obtienen los datos en el archivo fscanf(arch," %d %s %d %c",&alumno.ncontrol,&alumno.ncompleto,&alumno.edad,&alumno.sexo); printf(" %d %s %d %c\n",alumno.ncontrol,alumno.ncompleto,alumno.edad,alumno.sexo); }

//Se cierra el archivo fclose(arch);

Page 10: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

10

Mónica E. García

Funciones paraactualizar-modificar archivos

La función remove elimina todos los elementosreferidos en él.

Por ejemplo: remove(“a:Archivo1.txt”);

indica que se “eliminará” toda informaciónrelacionada con ese archivo. Esta eliminación es untipo de inlink (no enlace).

Si la función remove se logra con éxito seretronará un valor de 0 de lo contrario un –1.

Mónica E. García

Funciones paraactualizar-modificar archivos

La función rename nombra un archivo con unnombre diferente, la ruta del nuevo archivo puedeser otra.

Ejemplo:rename(“a:viejo.txt”.”a:nuevo.txt”);

Si la función rename se logra con éxito seretronará un valor de 0 de lo contrario un –1.

Page 11: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

11

Mónica E. García

Ejemplo de actualizaciónvoid actualizar()

{ int x;

printf("\n\t\t ******* BAJAS ***********");

if ((apun1=fopen("a:original.txt","r"))!=NULL &&

(apun2=fopen("a:auxiliar.txt","w"))!=NULL )

{

printf("\n Dar el dia para dar de baja la fecha ");

scanf("%d",&x);

while(!feof(apun1))

{

fscanf(apun1,"%d %s %d",&dia,&mes,&ann); if (x!= dia)

{

fprintf(apun2,"\n %d %s %d",dia, mes, ann);

}

}

fclose(apun1);

fclose(apun2);

remove("a:original.txt"); rename("a:auxiliar.txt","a:original.txt"); } }

Mónica E. García

Otras funciones para datos char

Para extraer del archivo Carácter fgetc Cadena fgets

Para almacenar en el archivo Carácter fputc Cadena fputs

Page 12: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

12

Mónica E. García

Otras funciones ...

fgets(cadena2,strlen(cadena1)+1,apunta_archi);fgets lee carácter por carácter de un archivo hasta n-1o hasta que se encuentra una nueva línea(\n).

fputs(cadena,apunta_archi);Copia una cadena –con espacios- a un archivo, nocopia el carácter nulo (\0).

Archivos binarios

Archivos de acceso directo

Page 13: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

13

Mónica E. García

Acceso Directo Los registros individuales de un archivo de acceso

directo normalmente son de longitud fija y se puedetener acceso a ellos directamente.

Este tipo de archivos son adecuados paratransacciones que requieren de acceso rápido a datosespecíficos.

Los datos pueden agregarse , ser actualizados obarrados sin tener que reescribir todo el archivo.

Mónica E. García

Archivos binarios

Los archivos binarios almacenan flujos de bits sinprestar atención a los códigos ASCII o a la separaciónde espacios. Son adecuados para almacenar objetos.Sin embargo, el uso de los archivos binarios requiereusar la dirección de una posición de almacenamiento.

Page 14: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

14

Mónica E. García

Funciones de acceso directo

fwrite(buffer,n,c,pf); Esta función escribe hasta c elementos delongitud n bytes, almacenados en el buffer, en el archivoapuntado por pf.

fread (buffer,n,c,pf); Esta función lee hasta c elementos delongitud n bytes, del archivo apuntado por pf y los almacena enel buffer. Devuelve el número de elementos leídos.

La longitud n se obtiene con la funcion sizeof(variable);

Mónica E. García

.. Funciones fseek(pf,desp,pos); Esta función mueve el apuntador de L/E

(Lectura-Escritura) asociado con el archivo apuntado por pf auna nueva localidad desplazada por desp bytes de la posicióndada por pos.Las opciones de pos pueden ser :

SEEK_SET Principio del archivoSEEK_CUR Posición actual del apunatdor de L/ESEEK_END Final del archivo

rewind(pf); Realiza la misma tarea que fseek con la opciónSEEK_SET. Es decir que coloca el apuntador de tipo archivo alinicio de éste.

Page 15: Archivos - UTMmgarcia/PE13(Archivos).pdf · Por ejemplo: remove(“a:Archivo1.txt”); indica que se “eliminará” toda información relacionada con ese archivo. Esta eliminación

15

Mónica E. García

Ejemplo de escriturachar op;

if ((apun1=fopen("a:binario1.txt","ab"))==NULL) { printf("No se pudo leer el archivo"); getch(); } else { do { printf("\nDia__ ");scanf("%d",&fecha.dia); printf("\nMes__ ");scanf("%s",&fecha.mes); printf("\nAño__ ");scanf("%d",&fecha.ann); fwrite(&fecha,sizeof(struct dat),1,apun1); printf("\n\t Dar otra fecha"); fflush(stdin); scanf("%c",&op); //op=getch(); clrscr(); }while(op=='s' || op == 'S'); fclose(apun1);

Sea:

struct dat{ int dia,ann; char mes[15];}fecha;

FILE *apun1

Mónica E. García

Ejemplo de lecturaint i; if ((apun1=fopen("a:binario1.txt","rb"))==NULL) { printf("No se pudo leer el archivo"); getch(); } else { clrscr(); printf("\n\t ******** SALIDA DE DATOS ******** "); //while(!feof(apun1)) while (fread(&fecha,sizeof(struct dat),1,apun1)== 1) { //fread(&fecha,sizeof(struct dat),1,apun1); printf("\n\n\tDia %d",fecha.dia); printf("\n \tMes %s",fecha.mes); printf("\n \tAño %d",fecha.ann); } getch(); fclose(apun1); }