Unidad 7 Manejo de Archivos Copyright © 2005.

Slides:



Advertisements
Presentaciones similares
MOVIMIENTO JOVENES DE LA CALLE CIUDAD DE GUATEMALA chi siamo quienes-somos qui sommes-nous who we are attività actividades activités activities scuola.
Advertisements

SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR
1 Datos sobre webloggers Datos extraidos de la encuesta a webloggers disponibles en la web de los autores.
Respuestas Jack y la mata de frijoles /60. 1.vivía 2.estaba 3.estaba 4.era 5.llamaba 6.gustaba 7.comía 8.dormía 9.gustaba 10.llamó 11.dijo 12.había 13.quería.
Los números del 0 al cero uno dos tres cuatro cinco 6 7 8
50 formas de decir “Te Amo”.
Metodología de programación paralela
1 LA UTILIZACION DE LAS TIC EN LAS MICROEMPRESAS GALLEGAS. AÑO mayo 2005.
1 LA UTILIZACION DE LAS TIC EN LAS PYMES GALLEGAS AÑO de Junio de 2005.
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS ( Resumen PYMES ) Noviembre de 2004.
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS (MICROEMPRESAS, resultados provisionales) 29 de julio de 2004.
AYUDA A LA FUNCIÓN DOCENTE Internet
TEMA 5.- 1ª PARTE. EL A.O. Y SUS APLICACIONES
TEMA 2 MÚLTIPLOS Y DIVISORES
02- Plan Organización Docente v.2 Noviembre 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
02- PLAN DOCENTE Febrero 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
01- OFERTA FORMATIVA v.2 Noviembre 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
Aladdín-respuestas 1.Vivía 2.Era 3.Amaba 4.Quería 5.Gustaban 6.Se sentía 7.Salía 8.Tenía 9.Decidió 10.escapó 11. Se vistió 12. Conoció 13. Vio 14. Pensó
Respuestas Buscando a Nemo.
ABECEDARIO FIGURAS GEOMÉTRICAS NÚMERO
Objetivo: Los estudiantes van a usar vocabulario del desayuno para comprender un cuento. Práctica: 1. ¿Te gusta comer? 2. ¿Te gusta beber Mt. Dew.
Mulán /75 puntos. 1.Querían 2.Gustaban 3.Escuchó 4.Dijo 5.Tenía 6.Ayudaron 7.Maquillaron 8.Arreglaron 9.Dio 10.Estaba 11.Iba 12.Quería 13.Salió 14.Gritó
5 pt 5 pt 5 pt 5 pt 5 pt 10 pt 10 pt 10 pt 10 pt 10 pt 15 pt 15 pt
Programando con Hilos POSIX* Intel Software College.
1 XML Extensible Markup Language HTML HyperText Markup Language normas06_01.xml.
MOVIMIENTO JOVENES DE LA CALLE CIUDAD DE GUATEMALA chi siamo quienes-somos qui sommes-nous who we are attività actividades activités activities alimentazione.
60 razones para seguir vivo
1. Apoyo exterior sobre ala inferior de viga de acero
Estrategias en el aula con alumnos con problemas de atención y comportamiento Curso Actividad formativa: Seminario CRA “Entreviñas” - Fuensaldaña.
Entrada y salida Fundamentos de programación/Programación I
Visual basic Curso de Habilitación Laboral IV. ¿Qué es Visual Basic Visual Basic es uno de los tantos lenguajes de programación que podemos encontrar.
El extraño caso del Dr. Jekyll y Mr. Hyde de Robert Louis Stevenson 1.
Pilas Laboratorio de Programación II. Definición de pila Consideremos una pila de platos: Si se añade un plato a la pila, los que están más abajo son.
Pasos para realizar la declaración Jurada de Patrimonio Has clic en el botón naranja para iniciar el registro de datos Para llenar la planilla debe utilizar.
-17 Expectativas sobre la situación económica (Europa) Septiembre 2013 Indicador > +20 Indicador 0 a +20 Indicador 0 a -20 Indicador < -20 Total Unión.
Parte 3. Descripción del código de una función 1.
FUNCIONES DE UNA VARIABLE REAL
Calendario 2008 Imágenes variadas Venezuela Elaborado por: MSc. Lucía Osuna Wendehake psicopedagogiaconlucia.com Enero 2008.
¿Qué te gusta hacer? Unit 3: Vocabulario.
EL OSO APRENDIZ Y SUS AMIGOS
PL/SQL Francisco Moreno Universidad Nacional. Funciones Si un procedimiento tiene solo un parámetro de salida, se puede remplazar por una función y esta.
Ejemplar de cortesía gratis para lectura y uso personal
1 PROYECTO DE PRESUPUESTO DE EGRESOS DE LA FEDERACION 2002 COORDINACIÓN DE POLITICA ECONOMICA GP-PRD.
Hacer click Hacer click en cualquiera de estos links.
Ecuaciones Cuadráticas
DW-AKADEMIEFolie 1 LA TELEVISIÓN PÚBLICA EN ALEMANIA.
¡Primero mira fijo a la bruja!
ANÁLISIS DE RADIOGRAFÍA PANORAMICA
1 Entrada/Salida en Java Jaime Ramírez, Ángel Lucas González DLSIIS. Facultad de Informática Universidad Politécnica de Madrid.
ESTRUCTURAS DE CONTROL
¿Qué es un conjunto? Un conjunto es una colección de objetos considerada como un todo. Los objetos de un conjunto son llamados elementos o miembros del.
MINIMO COMÚN MÚLTIPLO DE DOS NÚMEROS a y b
Quetzalpapalotl Quetzalpapalotl – Gevederde Slang, vlindergod.
0 1 ¿Qué hora es? By: Craig Tillmann Revised by: Malinda Seger Coppell High School Coppell, TX.
BEATRIZ LAFONT VILLODRE
* Fuente: Sondeo del Consumidor de la Comisión de la UE, GfK. Expectativas sobre la situación.
Los números. Del 0 al 100.
MSc. Lucía Osuna Wendehake
Calendario 2009 “Imágenes variadas” Venezuela Elaborado por: MSc. Lucía Osuna Wendehake psicopedagogiaconlucia.com Enero 2009.
uno cero dos seis siete nueve Los Números DIEZ cinco ocho tres
Los Numeros.
FACULTAD DE DERECHO PROTAGONISTAS PROMOCIÓN aniversario
Estructuras de control
Indicaciones: 1.- Tener en cuenta que esta estrategia, solo funciona asociando las cuentas los días lunes. 2.- Los cálculos son aproximados con un margen.
Herramienta FRAX Expositor: Boris Inturias.
CHAPTER 4 VOCABULARY: PART II
FUNDAMENTOS DE CALIDAD EN LA GESTIÓN PÚBLICA
Tema 3. Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación.
Unidad 7 Manejo de Archivos Copyright © 2005.
Transcripción de la presentación:

Unidad 7 Manejo de Archivos Copyright © 2005

Objetivos del Aprendizaje Identificar diferentes áreas en la resolución de problemas que requieren leer o escribir datos en dispositivos de almacenamiento secundario. Aprender a manejar los archivos de datos que ofrece C. Discutir el método de manejar archivos secuenciales (stream oriented files) en C. Listar y hacer uso de diversas funciones de librería que permiten crear, leer y escribir archivos en disco.

Almacenar Datos en Dispositivos Secundarios Algunas aplicaciones requieren que los datos estén disponibles para varias ejecuciones del programa. Ejemplos de aplicaciones: Datos de los empleados, requeridos por las aplicaciones de nómina de pagos. Datos de las cuentas de los clientes en sistemas bancarios. A menos que sean explícitamente almacenados en dispositivos de almacenamiento secundario, los datos mantenidos en variables se pierde una vez que el programa termina.

Manejo de Archivos de Datos en C Los datos mantenidos en almacenamiento secundario son permanentes a menos que sean eliminados por el usuario Los datos se almacenan en forma de archivos de datos. C ofrece un conjunto grande de funciones de librería para crear y utilizar archivos de datos. Muchos lenguajes de programación clasifican los archivos en: Archivos Secuenciales. Archivos de Acceso Directo o Acceso Aleatorio.

Manejo de Archivos de Datos en C...2 C ofrece dos tipos diferentes de archivos de datos Archivos secuenciales o archivos estándar (Stream Oriented Data Files). Archivos de datos orientados al sistema o archivos de bajo nivel. Los archivos secuenciales son más fáciles de programar y manejar. Los archivos secuenciales se dividen en dos categorías: Archivos de texto. Archivos de datos sin formato.

Archivos Secuenciales Archivos de texto: Consisten de una secuencia de caracteres. Pueden ser un carácter, una cadena de caracteres o números. Varias funciones de librería están disponibles para crear, leer y escribir archivos en disco. Archivos de datos sin formato: Los datos están organizados en bloques de bytes contiguos. Se pueden usar para representar estructuras de datos más complejas tales como arreglos, estructuras, etc. Existen funciones de librerías específicas para transferir estructuras de datos completas.

Crear un Área de Buffer Se debe de crear un área de buffer para trabajar con archivos secuenciales. El área de buffer es el espacio en memoria que será utilizado para transferir los datos desde la memoria al dispositivo de almacenamiento secundario y viceversa. FILE *ptr; FILE es un tipo de estructura especial que permite la definición de un área de buffer. ptr es un puntero que apunta al inicio del área de buffer, se denomina puntero a cadena (stream pointer). La palabra FILE se escribe en mayúsculas. La estructura FILE está definida en la librería stdio.h por lo que debe incluirse la librería explicitamente en el código.

Abrir y Cerrar Archivos Un archivo de datos en C debe ser abierto antes de que pueda ser procesado (incluso creado). Al abrir un archivo se crea una asociación entre el nombre del archivo y el área de buffer. Cuando se abre un archivo se especifica su uso. Los archivos pueden ser: Read only (sólo para lectura). Write only (sólo para escritura). Read/write (lectura y escritura).

Abrir y Cerrar Archivos...2 Existe una función de librería para abrir archivos: ptr = fopen(file-name, file-type); Donde: file-name: Debe seguir las reglas para crear nombres de archivos en los sistemas operativos específicos. file-type: Cadena de caracteres que especifica cómo puede ser usado el archivo.

Especificaciones de Tipo de Archivo Significado “r” Abrir un archivo existente, en modo de sólo lectura “w” Abrir un nuevo archivo sólo para escritura. Si el archivo existe, se borra y se crea un nuevo archivo “a” Abrir un archivo existente para agregar contenido al final. Si el archivo no existe, un nuevo archivo es creado “r+” Abrir un archivo existente para lectura y escritura “w+” Abrir un nuevo archivo para lectura y escritura. Si el archivo existe, se borra y se crea un nuevo archivo “a+” Abrir un archivo existente para leer y agregar al final. Si el archivo no existe, un nuevo archivo es creado

Más acerca de Abrir y Cerrar Archivos La función fopen retorna un puntero al inicio de la ubicación de área de buffer asociada con el archivo. Si el archivo no puede ser abierto, retorna un valor NULL (cero). Un archivo no podrá abrirse si el archivo no puede ser encontrado, o si se produce una falla al intentar abrirlo porque el archivo está dañado. Al final de cada programa un archivo abierto debe ser cerrado. Una función de librería llamada fclose permite hacer esto: fclose(buffer_pointer); Se recomienda cerrar explícitamente todos los archivos de datos al final del programa, aunque la mayoría de compiladores en C los cierran automáticamente. Considerar la previa declaración de: File * buffer_pointer; Notas del Instructor A)Buffer_pointer es la referencia al área buffer mencionada anteriormente.

Abrir un Archivo #include <stdio.h> main(){ … FILE *buff_ptr; buff_ptr = fopen(“misDatos.dat”,”r”); fclose(buff_ptr); } Notas del Instructor A)Abrir un archivo existente de sólo lectura.

Chequeo por Condición de fopen()no Exitoso #include <stdio.h> #define NULL 0 main(){ FILE *buff_ptr; buff_ptr = fopen(“misDatos.dat”,”r+”); if(buff_ptr == NULL) printf(“Error al abrir archivo\n”); else{ … fclose(buff_ptr); }

Chequeo por Condición de fopen()no Exitoso...2 #include <stdio.h> #define NULL 0 main(){ FILE *buff_ptr; if((buff_ptr = fopen(“misDatos.dat”,”r+”)) == NULL) printf(“Error al abrir archivo\n”); else{ … fclose(buff_ptr); }

Crear Archivos de Datos Los archivos de datos deben ser creados antes de usarlos. Los archivos secuenciales se crean: Directamente el archivo utilizando un editor de texto o procesador de palabras. Indirectamente a través de un programa. Para crear un archivo a través de un programa se pueden leer los datos del usuario desde el teclado y escribirlos en el archivo de datos. Se usan funciones de librerías: getchar putc

Leer y Mostrar Archivo de Texto... Ejemplo 1 #include <stdio.h> main(){ FILE *myText; /* Área de buffer */ char ch; /* Abrir el archivo */ myText = fopen("myStory.dat","r"); if(myText == NULL) printf("Error al abrir el archivo\n"); else{ ch = getc(myText); while(ch != EOF){ putchar(ch); } fclose(myText);

Escribir en un Archivo de Datos main(){ FILE *myText; int ch; myText = fopen("myStory.dat","w"); if(myText == NULL) printf("Error\n"); else{ printf("Ingrese un texto a ser \ almacenado dentro del archivo\n"); ch = getchar(); while( ch != '\n' ){ ch = toupper(ch); putc(ch, myText); } fclose(myText); Notas del Instructor A)Recordar a los estudiantes que deben incluir a: stdio.h y ctype.h en este código si desean verificarlo directamente.

Funciones para Leer y Escribir en Archivos Para leer y escribir caracteres: getc putc Para leer y escribir cadenas de caracteres: gets puts fgets fputs Para leer y escribir estructuras complejas: fscanf fprintf Notas del Instructor Crear un a matriz de opinión en el auditorio para que surgan las comparaciones entre las diferentes funciones de lecto – escritura que existen.

Procesar un Archivo de Datos Cuando se escribe un un archivo se puede: Agregar registros Eliminar registros Modificar registros Reordenar los registros Un método para hacer esto es: Tener dos archivos, uno para entrada y el otro para salida. Leer los registros del archivo de entrada, hacer el procesamiento y escribir los registros en el archivo de salida. Cuando se termina, borrar el archivo de datos de entrada y reemplazarlo con el nuevo archivo actualizado. Otro método es: Leer un registro del archivo. Procesarlo y escribir de vuelta al mismo archivo reemplazando el registro.

Modo Texto vs Modo Binario Los archivos de datos se clasifican de acuerdo a como se abren para su uso en: Archivos de texto Archivos binarios. Los archivos de texto y binarios difieren en tres áreas: Como se manejan los caracteres de cambio de línea. El manejo de la condición de fin de archivo. Como se almacenan números.

Manejo de Caracteres de Cambio de Línea En el modo texto, el carácter de cambio de línea se convierte en “retorno de carro y nueva línea” y luego se escribe en el disco Cuando se realiza una lectura del disco, el “retorno de carro y nueva línea” se convierte en un carácter de cambio de línea. Cuando el archivo se abre en modo binario, no ocurren estas conversiones. Para abrir un archivo en modo binario: fptr = fopen(“miArchivo.dat”,”rb”); Se usa “b” para indicar que el archivo se abra en modo binario. Se especifica “t” para indicar que el archivo se abra en modo texto. Éste es el valor por defecto si se omite.

Manejo de Fin de Archivo Para indicar el fin de archivo en modo texto se inserta como último carácter el valor ASCII de 26. Cuando se encuentra el valor ASCII de 26 en el archivo, la función de lectura retorna EOF (fin de archivo) al programa que efectuó la llamada. En archivos en modo binario, no existe un carácter especial que indique el fin de archivo. Para archivos binarios, el fin de archivo se deduce del número de caracteres presentes en la entrada de directorio del archivo. Si se almacenan los números en modo binario, se deben leer también en modo binario.

Manejo de Almacenamiento de Números Función fprintf Los caracteres se almacenan en un 1 byte en memoria. Los números se almacenan como cadenas de caracteres. La función fprintf no almacena números ya que se requieren 2 bytes en el caso de int y 4 bytes en el caso de float. Los números se almacenan como cadenas de caracteres El número 5643 se almacena en 4 bytes. El número punto flotante 25.625 se almacena en 6 bytes. Cuando se utilizan archivos de texto para almacenar números grandes es bastante ineficiente por el espacio que ocupa. Una alternativa es abrir el archivo en modo binario y utilizar las funciones fread y fwrite.

Archivos sin Formato Algunas aplicaciones requieren el uso de archivos de datos que almacenen bloques de datos y cada bloque consiste de un número fijo de bytes almacenados en forma contigua. Los bloques de datos pueden representar estructuras complejas de datos (estructuras de C o arreglos). Se debe tener la posibilidad de leer o escribir bloques completos de datos, en lugar de manejar los elementos individuales de las estructuras complejas. Se utilizan las funciones de librería de C fread y fwrite son funciones de lectura/escritura sin formato. Los archivos son denominan archivos de datos sin formato.

fwrite y fread Las funciones fread y fwrite requieren cuatro argumentos. Un puntero al bloque de datos. El tamaño del bloque de datos. El número de bloques de datos a ser manejados en la transferencia. Un puntero cadena (stream pointer). Ejemplo de uso de fwrite fwrite(&stud, sizeof(marks_list), 1, mark_ptr); donde: stud: la variable estructura de tipo marks_list, mark_ptr:el puntero asociado con el archivo 1: indica el número de bloques a ser transferidos.

Uso de Archivos sin Formato...Ejemplo 1 1 #include <stdio.h> 2 #define SIZE 2 3 /* Estructura */ 4 typedef struct{ 5 char idno[9]; 6 char nombre[45]; 7 /* Notas de los 6 cursos */ 8 float notas[6]; 9 }LISTA_NOTAS; 10 /* Función para obtener datos del usuario y almacenarlo en un archivo */ 11 void almacenarDatos(){ 12 FILE *in_mark_ptr; 13 LISTA_NOTAS in_stud[SIZE]; 14 int j,k; 15 /* Abrir archivo modo escritura */ 16 in_mark_ptr = fopen("history.dat","wb"); 17 k = 0; Notas del Instructor A) Este ejemplo incuye el uso de fwrite() y fread(). B) En la línea 11 comienza la función almacenarDatos()

Uso de Archivos sin Formato... Ejemplo 1 18 /* Leer datos de los estudiantes */ 19 while(k < SIZE){ 20 printf("Introduzca IDNO"); 21 scanf("%s",in_stud[k].idno); 22 fflush(stdin);printf("Ingrese el Nombre\n"); 23 scanf("%s",in_stud[k].nombre); 24 printf("Ingresar las notas de 6 cursos \n"); 25 for(j = 0; j < 6; j++){ 26 do{ 27 printf("Notas de los Cursos No: %d[0-100]\n",j+1); 28 scanf("%f", &in_stud[k].notas[j]); 29 }while((in_stud[k].notas[j]<0)||(in_stud[k].notas[j]>100)); 30 } 31 k++; 32 } 33 for(k = 0; k < SIZE; k++) 34 fwrite(&in_stud[k], sizeof(LISTA_NOTAS),1,in_mark_ptr); 35 /* Cerrar archivo */ 36 fclose(in_mark_ptr); 37} Notas del Instructor A)En la línea 37 termina la función almacenarDatos() que viene de la lámina anterior. B)Mencionar que en la línea 22 mediante fflush se limpia el buffer de salida.

Uso de Archivos sin Formato... Ejemplo 1 38 /* Leer los datos del archivo e imprimirlos */ 39 void recuperarDatos(){ 40 FILE *out_mark_ptr; LISTA_NOTAS out_stud[SIZE]; 41 int j,k; 42 /* Abrir archivo modo lectura */ 43 out_mark_ptr = fopen("history.dat","rb"); 44 /* Leer datos de los estudiante del archivo */ 45 k = 0; 46 while (k < SIZE){ 47 fread(&out_stud[k], sizeof(LISTA_NOTAS), 1, out_mark_ptr); 48 k++; 49 } 50 /* Cerrar archivo */ 51 fclose(out_mark_ptr); 52 for(k = 0; k < SIZE; k++){ 53 printf("\n%s:%s\n",out_stud[k].idno,out_stud[k].nombre); 54 printf("Notas en los Cursos:\n"); 55 for(j = 0; j < 6; j++) 56 printf("%6.2f\n", out_stud[k].notas[j]); 57 } 58 } Notas de Instructor El main es así: main(){ almacenarDatos(); recuperarDatos(); }

Resumen Se identificaron diferentes áreas en la resolución de problemas que requieren leer o escribir datos en dispositivos de almacenamiento secundario. Se aprendió a manejar los archivos de datos que ofrece C. Se discutió el método de manejar archivos secuenciales (stream oriented files) en C. Se presentaron y usaron diversas funciones de librería que permiten crear, leer y escribir archivos en disco.