archivos lenguaje c

12
Archivos

Upload: gustavo-salazar

Post on 28-Nov-2014

75.497 views

Category:

Education


3 download

DESCRIPTION

ARCHIVOS LENGUAJE C

TRANSCRIPT

Page 2: ARCHIVOS LENGUAJE C

Archivos de Texto• Los archivos pueden almacenar todo tipo de información

– Dependiendo de eso, tienen un “tipo”

– En Windows, el “tipo” de un archivo esta dicho por su extensión

• Los archivos tipo texto (.txt) son los más simples de todos– Sólo almacenan secuencias de caracteres

• Suponga ahora el siguiente archivo shakespeare.txt:

¿Que hay en un nombre?Eso que llamamos una rosaEmanaría un olor tan dulce, aun teniendo otro nombre

¿Que hay en un nombre?Eso que llamamos una rosaEmanaría un olor tan dulce, aun teniendo otro nombre

• Al verlo, podemos decir que es un conjunto de caracteres, y de hecho, este archivo tiene 3 líneas.

– Es práctico pensar en un archivo como una estructura de dos dimensiones: líneas, cada una compuesta de un conjunto de caracteres

¿Que hay en un nombre?\nEso que llamamos una rosa\nEmanaria un olor tan dulce, aun teniendo otro nombre¿Que hay en un nombre?\nEso que llamamos una rosa\nEmanaria un olor tan dulce, aun teniendo otro nombre

Estructura bidimensional:Conjunto de líneas, cada

una compuesta de caracteres

En realidad son una sola secuencia de caracteres que incluyen el ‘\n’:

Page 3: ARCHIVOS LENGUAJE C

¿Y En C?• Un archivo se parece mucho a una cadena• Desde un programa en C se puede:

– Crear archivos– Tomar datos del archivo y ponerlos en variables– Modificar archivos– Eliminar y renombrar archivos

• Todas son operaciones que se manejan a través de stdio.h• Para trabajar con archivos se debe:

– Declarar una variable de tipo FILE * (un puntero a FILE)– Esta se debe asociar con el archivo, usando la función fopen– Se efectúan las operaciones de manejo de archivos que se desee– Cuando se ha terminado de trabajar con el archivo se utiliza

fclose para cerrarlo

Page 4: ARCHIVOS LENGUAJE C

Importante

• Un puntero de tipo FILE sirve para representar a un archivo en un programa en C.

• Por cada archivo con el que se desee trabajar, se declarar una variable FILE *

• Si una función va a trabajar con un archivo, puede recibir una variable de tipo FILE *

• La variable de tipo FILE * no sirve de nada si no se la “asocia” a un archivo a través de la función fopen:variable de tipo FILE * = fopen (nombre de archivo, modo);

Page 5: ARCHIVOS LENGUAJE C

Abrir y Cerrar un Archivo• Un archivo se puede abrir para en los siguientes modos:

– Lectura: “r”• Para “tomar” datos del archivo. El archivo DEBE existir

– Escritura: “w”• Para crear archivos y escribir o “mandar” datos al archivo. Si el archivo

no existe, lo crea, si ya existe, lo sobre-escribe

– Añadir: “a”• Para escribir o “mandar” datos a un archivo que ya existe. Si no

existe, lo crea, si ya existe, los datos enviados se “añaden”

infile = fopen (“shakespeare.txt”,”r”);• Si la operación de “abrir” falla, por alguna razon, fopen devuelve

NULL. if(infile == NULL) {printf(“Error al abrir el archivo\n”);exit(1);

}/*trabajar con el archivo*/fclose(infile);

Cuando se ha terminado de trabajar con el archivo, este se cierra con fclose. Cuando un programa termina, todos los archivos se cierranSin embargo, es una BUENA PRACTICA de programación, cerrar los archivos pues al revisar el código se sabrá cuando ya no se usa mas una archivo

Page 6: ARCHIVOS LENGUAJE C

Archivos Estándar• stdio ofrece funciones para manipulación de E/S,

– Usando los dispositivos estándar y– Usando archivos

• Para evitar esa diferencia en las operaciones,

– stdio, trata a todos como archivos– Incluyendo a los dispositivos de E/S estándar:

• Teclado y Monitor• Para representar a cada “archivo de dispositivo” existen 3

identificadores especiales de tipo FILE *

– stdin: dispositivo de entrada estándar (teclado)– stdout: dispositivo de salida estándar (el monitor)– stderr: dispositivo de salida de errores estándar (el

monitor)

Page 7: ARCHIVOS LENGUAJE C

Operaciones de E/S• Las operaciones básicas son:

– Tomar (get) datos de un archivo existente: Entrada

– Poner (put) datos un archivo, sea nuevo o existente: Salida

• Se puede “tomar” o “poner”

– 1 carácter o

– 1 línea entera• Para esto se deben usar las funciones de stdio.h:

– getc, putc

– fgets, fputs• Se puede incluso tomar o leer datos usando un cierto formato:

– fprintf, fscanf

Page 8: ARCHIVOS LENGUAJE C

E/S de Caracteres• int getc(FILE *infile);

– Toma un carácter del archivo representado por infile– Devuelve el código ASCII de dicho carácter– El programa lo toma y lo puede almacenar en una variable de tipo char– La primera llamada a getc, luego de abierto un archivo, retorna el 1er

carácter– La segunda, retorna el 2do, y así…– Al llegar al final del archivo, getc retorna EOF (fin de archivo). EOF es

una constante definida en stdio con -1• void putc(int ch, FILE *outfile)

– “Pone” un carácter en el archivo representado por outfile– Al abrir un archivo, la primera llamada a putc, pone un carácter en el

inicio– La segunda, lo pone en la segunda posición el archivo, y así

Page 9: ARCHIVOS LENGUAJE C

Funciones de Lectura/Escritura stdio.h

• fgetc• Lee un caracter desde un archivo• Recibe un puntero a FILE como parámetro• fgetc(stdin) equivale a getchar()

• fputc• Escribe un caracter a un archivo• Recibe un puntero a FILE y un caracter como parámetro• fputc('a',stdout) equivale a putchar('a')

• fgets• Lee una línea desde un archivo

• fputs• Escribe una línea en un archivo

• fscanf / fprintf• Procesamiento de archivos equivalentes a scanf y printf

Page 10: ARCHIVOS LENGUAJE C

Ejercicio En Clase• Escribir un programa que permita copiar el

contenido de un archivo llamado entrada.txt a otro llamado salida.txt

• ¿Qué pasos seguir?– Abrir el archivo fuente (entrada.txt) en modo

lectura– Abrir el archivo destino (salida.txt) en modo

escritura– Tomar carácter a carácter del fuente y poner en el

de lectura, hasta llegar al final del archivo (EOF)– Cerrar los dos archivos

Page 11: ARCHIVOS LENGUAJE C

Algo más sobre scanf…

Puede ser de utilidad

Page 12: ARCHIVOS LENGUAJE C

Formato de entrada con scanf• Con scanf se puede:

• Entrada de todo tipo de datos• Entrada de caracteres específicos• Omitir caracteres específicos

• Conjuntos de revisión (scan sets)– Conjunto de caracteres entre corchetes [] precedidos del signo %– Busca sólo los caracteres del conjunto

• Cuando los encuentra los almacena en el arreglo respectivo• Detiene la lectura cuando lee un caracter que no pertenece al conjunto

– Conjunto de caracteres invertido• Usa el símbolo ^, por ejemplo: [^aeiou]• Almacena los caracteres que no se encuentren en el conjunto

• Omisión de caracteres– Se puede incluir el caracter que se desea omitir en la cadena de control– O, se puede usar el * que omite cualquier tipo de caracter sin

almacenarlo.