Sie sind auf Seite 1von 23

Pontificia Universidad Catlica Madre y Maestra Vicerrectora Acadmica Facultad Ciencias de las Ingenieras Ingeniera en Sistemas y Computacin - ISC

FUNDAMENTOS DE PROGRAMACIN
Leccin 6: Manipulacin en Archivos

23-ene-13 Santiago, Rep. Dom.

MANIPULACIN EN ARCHIVOS
Fundamentos de Programacin

Algortmos Fundamentales
ARCHIVOS DE DATOS Nos Permiten almacenar informacin de modo Permanente, acceder y modificar a la misma cuando sea necesario. Los archivos de datos se localizan en dispositivos de Almacenamiento como: disco duro, cinta, disquetes, etc. Tipo de Archivos (en este curso) : Textos Binarios

Algortmos Fundamentales
ARCHIVOS DE DATOS En C el manejo de archivo es realizado a travs del concepto de flujo (streams) o canal, tambin llamado secuencia. Flujo, es por donde fluyen/transportan los datos entre el programa y los dispositivos de almacenamiento. Abrir un archivo supone establecer una conexin del Programa con el dispositivo que contiene a este. Por este canal va a fluir la secuencia de datos. El acceso a archivo se hace a travs de buffer donde Almacenan los datos dirigidos al archivo o desde el archivo , el buffer es como un arreglo.

Algortmos Fundamentales
ARCHIVOS DE DATOS Puntero FILE Establece el rea de buffer donde se va a almacenar temporalmente la informacin, mientras se est transfiriendo entre la memoria del computador y el archivo de datos. Abrir un Archivo Supone conectar el programa con el archivo externo y decir el modo en como va a ser tratado, y que tipo de archivo es: texto(t) o binario(b). Un archivo es abierto a travs de la funcin fopen(), la cual devuelve un puntero a la estructura FILE.

Algortmos Fundamentales
ARCHIVOS DE DATOS sintaxis

fopen(nombre_archivo,modo); nombre_archivo [cadena] :nombre o identificador


modo [cadena] : externo del archivo. modo de apertura o como va a ser tratado el archivo.

La funcin fopen(), devuelve un puntero a FILE a traves del cual el programa hace referencia al archivo. Devuelve: NULL: si no puede abrir el archivo. EOF: Si la operacin falla o llega a fin de archivo.

Algortmos Fundamentales
ARCHIVOS DE DATOS Modo de Apertura r w Slo de lectura Salida, crear archivos, si existe se pierden sus datos. Append, para aadir al final.

r+ Lectura/escritura. (modificar) w+ Crear archivos Lectura/escritura, si existe se pierden sus datos. a+ Para modificar(Lectura/escritura) al final.

Algortmos Fundamentales
ARCHIVOS DE DATOS Si el archivo es de texto, seria: rt wt at r+t w+t a+t Si el archivo es de binario, seria: rb wb ab r+b w+b a+b Cerrar un Archivo Se usa la funcin fclose(puntero_file), cierra el archivo asociado al puntero_file, devuelve EOF si ocurre un error al cerrar.

Algortmos Fundamentales
Ej: slo como abrir y cerrar un archivo. #include <stdio.h> #define NULL 0 main() { FILE *fpt; fpt=fopen(C:\windows\muestra.txt,r+); if (fpt == NULL) printf(\n Error: No se pudo abrir archivo); else { /*hacer algunos calculos */ ...... fclose(fpt); } }

Algortmos Fundamentales
FUNCIONES DE LECTURA Y ESCRITURA (cont)

fputc=putc : escribe un carcter del archivo asociado


al puntero a file.

fputc(c,puntero_file); devuelve EOF si no puede putc(c,puntero_file); escribir el archivo. fgetc=getc : lee un carcter en el archivo asociado al
puntero a file.

fgetc(puntero_file); devuelve el carcter leido EOF getc(puntero_file); si hay error o fin de archivo.

Algortmos Fundamentales
FUNCIONES DE LECTURA Y ESCRITURA fputs() escribe una cadena en el archivo asociado al puntero a file.

fputs(cadena,puntero_file); devuelve EOF si no puede escribir la cadena.


fgets(): lee una cadena en el archivo asociado al puntero a file. Termina de leer cuando encuentra el carcter de fin de lnea o cuando ha leido n-1 caracteres.

fgets(cadena,n,puntero_file); devuelve NULL si ha


habido un error.

Algortmos Fundamentales
Ej 13.3 pag. 418. Crear un archivo a partir de otro. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MX 121 #define MN 30 int main() { FILE *entrada, *salida; char nom1[]=cartas.dat; char nom2[]=primero.dat; char cad[MX]; entrada=fopen(nom2,rt); salida =fopen(nom1,at); if (entrada == NULL || salida == NULL) { printf(\n Error: No se pudo abrir archivo); exit(-1); }

Algortmos Fundamentales
while(fgets(cad,MX,entrada)) { if(strlen(cad) >=MN) fputs(cad,salida); else puts(cad); } fclose(entrada); fclose(salida); return 0;

Algortmos Fundamentales
feof() Igual a macro EOF,
feof(nombre_archivo), devuelve un valor diferente de Cero 0 (true), cuando se lee el carcter de fin de archivo, de lo contrario devuelve cero 0(false);

rewind() coloca el puntero del archivo al inicio de este.


SINTAXIS: rewind(puntero_archivo);

Algortmos Fundamentales
ARCHIVOS DE DATOS Binarios. Los archivos binarios son secuencia de 0s y 1s. Estos archivos optimizan la memoria ocupada por un archivo.

La mayor eficiencia de los archivos binarios se contrapone con el echo de que su lectura se tiene que hacer en modo binario y que slo se pueden visualizar desde un entorno de un programa C.

Algortmos Fundamentales
ARCHIVOS DE DATOS un archivo binario. Binarios.

fwrite(): escribe un buffer de cualquier tipo de dato de


Sintaxis:
fwrite(direccin_buffer,tamao,num_elementos,puntero_archivo);
Ej. 13.15 Pg. 423. Se dispone de una muestra de las coordenadas de puntos de un plano representada por pares de nmeros enteros (x,y). Se desea guardar en un archivo binario estos puntos. #include <stdio.h> struct punto { int x,y; } typedef struct punto PUNTO;

Algortmos Fundamentales
#include <stdio.h> struct punto { int x,y; }

ARCHIVOS DE DATOS

Binarios.

typedef struct punto PUNTO; int main() { PUNTO p; char *nom=C:\PUNTOS.DAT; FILE *pp; if ((pp=fopen(nom,wb))==NULL) { puts(\n Error abriendo archivo); return 1; }

Algortmos Fundamentales
ARCHIVOS DE DATOS
do {

Binarios.

puts(\n Introduce las coordenadas, para finalizar (0 0) ); scanf(%d %d,&p.x,&p.y); while(p.x <0 || p.y <0) { printf(\n Coordenadas deben ser >=0 ); scanf(%d %d,&p.x,&p.y); } if( p.x >0 || p.y >0) { fwrite(&p,sizeof(PUNTO),1,pp); } } while ( p.x != 0 && p.y != 0); fclose(pp); return 0; }

Algortmos Fundamentales
ARCHIVOS DE DATOS amacena en el buffer. Sintaxis: Binarios.

fread(): lee de un archivo n bloques de bytes y los

fread(direccin_buffer,tamao,num_bloques ,puntero_archivo);

Ejemplo.

Ejemplo anterior, pero leer el mismo archivo (archbin2.c)

Algortmos Fundamentales
ARCHIVOS DE DATOS Acceso Aleatorios El acceso a este tipo de archivo se hace a travs de su posicin relativa dentro del archivo. Se pueden leer o escribir registros en cualquier orden y posicin. El inconveniente de este tipo de archivo es que se necesita programar la relacin existente entre el contenido de un registro y la posicin que ocupan. Se usan las funciones : fseek() y ftell() las cuales consideran al archivo como una secuencia de bytes, el nmero de bytes es el ndice del archivo.

Algortmos Fundamentales
ARCHIVOS DE DATOS Acceso Aleatorios Mientras se va leyendo o escribiendo en el archivo la posicin actual se guarda en un puntero. fseek() : permite cambiar la posicin del puntero al archivo a una direccin determinada. Devuelve un valor entero, distinto de cero si se comete un error en su ejecucin, cero si no hay error.

Se puede tratar al archivo como un arreglo, la posicin del archivo va a depender del desplazamiento y el origen relativo que se pasa como parmetro.

Algortmos Fundamentales
ARCHIVOS DE DATOS Acceso Aleatorios Sintaxis:

fseek(puntero_archivo,desplazamiento,origen);
Desplazamiento: nmero de bytes a mover, debe ser de tipo long. Origen: es la posicin a partir de la cual se cuenta el nmero de bytes a mover, Macro SEEK_SET SEEK_CUR SEEK_END

valores que puede tener: 0: cuenta desde el inicio del archivo 1: cuenta desde la posicin actual del archivo 2: Cuenta desde el final del archivo.

Algortmos Fundamentales
ARCHIVOS DE DATOS Acceso Aleatorios

ftell() : con esta funcin se obtiene la posicin actual


del archivo, del puntero a archivo que se pasa como parmetro. Sintaxis:

ftell(puntero_archivo);
La funcin devuelve la posicin como nmero de byte, en entero largo (long int), desde el inicio del archivo(byte 0).

Das könnte Ihnen auch gefallen