Archivos
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 rosa Emanarí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 Estructura bidimensional: Conjunto de líneas, cada una compuesta de caracteres En realidad son una sola secuencia de caracteres que incluyen el ‘\n’:
¿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
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);
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 cierran Sin 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
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)
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
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í
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
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
Algo más sobre scanf… Puede ser de utilidad  
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  [] p recedidos 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.

Archivos en C

  • 1.
  • 2.
    Archivos de TextoLos 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 rosa Emanarí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 Estructura bidimensional: Conjunto de líneas, cada una compuesta de caracteres En realidad son una sola secuencia de caracteres que incluyen el ‘\n’:
  • 3.
    ¿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
  • 4.
    Importante Un punterode 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);
  • 5.
    Abrir y Cerrarun 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 cierran Sin 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
  • 6.
    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)
  • 7.
    Operaciones de E/SLas 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
  • 8.
    E/S de Caracteresint 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í
  • 9.
    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
  • 10.
    Ejercicio En ClaseEscribir 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
  • 11.
    Algo más sobrescanf… Puede ser de utilidad 
  • 12.
    Formato de entradacon 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 [] p recedidos 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.