Informática II Archivos y flujos

Slides:



Advertisements
Presentaciones similares
1 Unidad IV Archivos en Java y C++ M.C. Juan Carlos Olivares Rojas.
Advertisements

Manejo de archivos de texto.  Unidad fundamental de almacenamiento dentro del ámbito de la informática. Alberga un conjunto de datos que es posible leer,
Unidad VI Registros y Archivos Matlab Dr. J. D. Pope S. ITD.
Teoría de Sistemas Operativos Archivos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Prof. Mauro Zaravia Ortiz Computación e Informática.
Programación II Sesión 3. TABLA DE CONTENIDO  Tipos de Datos en C  Delimitadores  Tipo Char  Tipo Int  Tipo Float  Tipo Double  Constantes  Operadores.
RubyNote ARCHIVOS EN RUBY HECHO POR: FRANCISCO ALVAREZ AGUILA.
Microsoft Office 2007 Introducción a Access. Una base de datos es una colección de información relacionada entre si y almacenada en una o más computadoras.
Archivos en Java Unidad III – Programación Orientada a Objetos en Java Programación I
ALGORITMOS, DIAGRAMAS DE FLUJO ING. DIANA CRUZ. QUÉ ES UN ALGORITMO ALGORITMO PARA UNA RECETA DE COCINA ETAPAS PARA SOLUCIONAR UN PROBLEMA PROPIEDADES.
ITESCO – Arquitectura Computadoras L. S. C. A. Raúl Monforte Chulin - MORCH Systems 1.1. Arquitectura básica y sus operaciones. Objetivo: El estudiante.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
L. S. C. A. Raúl Monforte Chulin
Un poco de lo que se de WORD
TERMINOLOGÍA BÁSICA Informática: conjunto de conocimientos científicos y técnicas que hacen posible el tratamiento automático y racional de la información,
Programación en C - manejo de Archivos
. Primera Open Class Asignatura: Programación Estructurada Tema:
Funciones, Arreglos y Vectores
Griselda Rosas Informática Lic. CINTHYA P. BELMONTES GUEVARA
Teoría de Sistemas Operativos Archivos
ROBERTO PINEDA FLORES. ALEXIS JULIAN VELAZQUEZ NAVA.
Programación en C - manejo de Archivos
Conceptos básicos de programación
Fundamentos de programación
Algunas Características de C++ no presentes en C
Elaboración del formulario
Usando StreamReader y StreamWriter
CAPÍTULO 2: PRINCIPIOS BÁSICOS DE MATLAB
Unidad 7: Nivel Interno Algunos Conceptos Importantes
Algunas Características de C++ no presentes en C
Computadora La computadora es una máquina capaz de realizar y controlar a gran velocidad cálculos y procesos complicado que requieren una toma rápida de.
ESUCOMEX profesor presentación power builder Lautaro Cabezas
Tema 6. Conceptos básicos de programación Clase 1
Definición y Conversión de datos
G87 Ciclo fijo de cajera rectangular - 1/6
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.
INTRODUCIR DATOS En cada una de las celdas de la hoja es posible introducir textos, números o fórmulas. Aparecerán en dos lugares: en la celda activa y.
LÓGICA DE PROGRAMACIÓN
Programación Orientada a Objetos
MEMORIAS. Alba Lus, Esther Escobar, Laura Hierro, Raquel Fdez.
Usando StreamReader y StreamWriter
INTRODUCIR DATOS En cada una de las celdas de la hoja es posible introducir textos, números o fórmulas. Aparecerán en dos lugares: en la celda activa y.
Usando StreamReader y StreamWriter
Scratch Presentado por: Valentina Agudelo Huerfano J.M.
PROGRAMACIÓN 1 INTRODUCCIÓN
ARRAYS Y COLECCIONES DE DATOS
Herramientas Entorno Web
Java – programación orientada a objetos programación ii – iee
y pensamiento algebraico
CONCEPTOS BÁSICOS DE COMPUTACIÓN E HISTORIA
HERRAMIENTAS DE PROGRAMACIÓN
Diego Hernández R Pascal Variables Diego Hernández R
LENGUAJE C.
Introducción al Visual Basic  Un programa en sentido informático está constituido en un sentido general por variables que contienen los datos con los.
Sistemas Numéricos 1. Introducción 2. Sistema de Numeración Decimal
Tipos de Datos abstractos
Dispositivos de almacenamiento
Tipos de Datos abstractos
Introducción a la Estadística Informática
MC Beatriz Beltrán Martínez Verano 2018
Curso de Programación Estructurada
Estructura de Sistemas Operativos CAMPOS CHACALTANA, ANTHONY.
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial
Estructuras de Repetición Algoritmos
Archivos binarios en C++
NATURALEZA DE LOS DATOS Valores Numéricos Son los valores que se pueden hacer cálculos aritméticosritméticos Tipos de valores Entero Real Cadena ( “ h”
Funciones principales de Excel Online
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Tema 8. Estructuras de decisión. Clases 1 y 2.
Transcripción de la presentación:

Informática II Archivos y flujos Clase 24 Informática II Archivos y flujos

Almacenamiento Estamos acostumbrados a la idea que las diferentes aplicaciones que utilizamos diariamente en nuestras computadoras almacenan información como archivos. Depende del tipo de aplicación es la forma en la que la aplicación guarda los datos de modo tal de poder accederlos en un tiempo posterior. Según el tipo de información contenida en los archivos, la información contenida en los mismos se trata de diferentes maneras: Secuencial: esta metodología esta asociada fundamentalmente a los archivos de texto, donde no hay una unidad de información de tamaño definido por lo que los datos se recuperan uno después de otro sin posibilidad de “saltear” datos. Acceso aleatorio: la información se almacena en bloques de tamaño definido por lo que es posible desplazarse entre los mismos accediendo a los fragmentos de información de interés.

Implementaciones Cada uno de estos tipos de acceso se asocia al uso de clases o métodos específicos, ya sea en C++ o Qt. En este sentido, cabe aclarar, que la metodología de manejo de archivos propia de C++ puede utilizarse en el entorno de Qt. Mientras que las familias de clases que incorpora Qt para esto no es posible utilizarlas desde C++. Debido a esto, comenzaremos analizando la metodología de trabajo con archivo en C++ y luego veremos las alternativas propias de Qt.

Archivos de Acceso Secuencial y C++ La librería STL de C++ incorpora una jerarquía de plantillas que permite el acceso a los datos contenidos en archivos. Estas implementan el acceso a través de flujos. basic_ios basic_istream basic_ostream basic_ifstream basic_iostream basic_ofstream ifstream (lectura) ofstream (escritura) basic_fstream fstream (lectura y escritura)

Archivos de Acceso Secuencial y C++ - Apertura y cierre Para poder trabajar con archivos con objetos de la clases ifstream, ofstream o fstream es necesario indicarle en algún momento el nombre del archivo con el que se desea trabajar y, ocasionalmente, la forma de acceso. Esto es posible a través del uso del constructor de cada una de estas clases, que toman como argumento dos cadenas de caracteres (cadenas tipo c). El primer argumento corresponde con el nombre del archivo que se desea utilizar mientras que el segundo indica el modo de apertura del archivo: Parámetro Significado ios::app Abre el archivo para escritura ubicándose al final del mismo antes de cada operación de escritura. ios::ate Abre el archivo para escritura y se ubica al final. ios::in Abre el archivo para lectura. ios::out Abre el archivo para escritura. ios::trunc Si el archivo existe, descarta su contenido. ios::binary Abre el archivo en modo entrada salida y trata la información como datos binarios.

Archivos de Acceso Secuencial y C++ - Apertura y cierre Según el modo de acceso deseado sobre el archivo en cuestión será la clase que deberemos usar y los argumentos posibles para el constructor de la misma: Clase ofstream Se utiliza para acceder al archivo en modo escritura. Las variantes de acceso posibles son: ios::out, ios::app, ios:trunc ifstream Se utiliza para acceder al archivo en modo lectura. El modo de acceso por defecto es de lectura ios::in. fstream Permite el acceso en modo de lectura y escritura y son válidas todas las variantes de acceso. Es posible utilizar más de un modificador de acceso y para esto se utilizar el símbolo pipe (|), ya que cada constante tiene un valor que puede sumarse y es interpretado de modo adecuado.

Archivos de Acceso Secuencial y C++ - Apertura y cierre Además de asociar un archivo del sistema de archivos con un flujo a través del constructor, también es posible utilizar un constructor sin parámetros y utilizar el método open de cada clase con los mismos argumentos que el constructor analizado anteriormente. Un detalle importante es que las clases antes mencionadas sobrecargan el operador ! de modo tal que se pueda tener conocimiento si el archivo pudo abrirse o no con las opciones indicadas. Así como en el Lenguaje C, siempre que abramos un archivo deberemos cerrarlo. Para realizar esta operación todas las clases antes mencionadas incorporan un método denominado close() con este fin.

Archivos de Acceso Secuencial y C++ - Escritura Si el archivo fue abierto utilizando un objeto de la clase ofstream, las operaciones de escritura sobre el archivo pueden realizarse utilizando el operador de inserción de flujo (<<) ya que el archivo se comporta como un flujo de información. De modo similar a como cuando trabajamos con cout, y a diferencia del lenguaje c, no será necesario indicar el tipo de dato que deseamos almacenar ya que el operador de inserción está sobrecargado. ej1 ej2

Archivos de Acceso Secuencial y C++ - Lectura El proceso de lectura también se realiza considerando que el archivo es un flujo, por esto se utiliza el operador de extracción de flujo para obtener los diferentes valores almacenados. Al igual que cuando trabajamos en lenguaje c, es necesario que los valores dentro del archivo se puedan distinguir. Esto es, si tenemos un conjunto de valores enteros y deseamos tratarlos como tales, es necesario que se encuentren separados uno del otro por espacios en blanco, tabulaciones o saltos de línea. También será necesario verificar que no se alcance el final del archivo, que se hallan podido leer los valores del tipo indicado y que no se hallan producido errores desconocidos. Esto se puede verificar a través de los métodos: Nombre del método Retorna verdadero si… ifstream::eof() Se alcanza el final del archivo ifstream::fail() No se pudo leer un valor del tipo indicado ifstream::bad() Se produjo un error desconocido ej3

Archivos de Acceso Secuencial y C++ - Lectura Además de los métodos anteriores para determinar si se ha producido un error o nó, es posible utilizar el método good(). Este método retornará un valor verdadero si ninguna de la condiciones anteriores se ha detectado (fin de archivo, imposibilidad de leer un determinado tipo de valor, error desconocido). En el ejemplo anterior vimos como cargar valores numéricos de un archivo, ahora mostraremos por pantalla el contenido de un archivo que contiene texto. Para esto utilizaremos la función getline, esta función toma como argumentos: Un flujo de entrada. Un contendor para almacenar la cadena obtenida. De modo opcional, un carácter que indique el fin de línea. No utilizaremos el operador de extracción de flujo ya que de usarlo obtendríamos el texto por palabra y no por renglón. ej4

Archivos de Acceso Secuencial y C++ - Lectura Cuando realizamos tratamos un archivo con contenido secuencial, para algunos algoritmos es necesario leer varias veces el contenido del mismo ya que no es posible conocer a priori la cantidad de información contenida. Para esto es posible utilizar los métodos seekp definido en la clase ostream (accesible a través de ofstream) y seekg definido en la clase istream (accesible a través de ifstream). Ambos nos permiten ubicarnos en una posición del archivo, la diferencia es que seekp (seek put) ubica el cursor del archivo en operaciones de escritura mientras que seekg (seek get) ubica el cursor en operaciones de lectura. Los argumentos que toman estos métodos son dos: La cantidad de bytes a desplazarse Desde donde se desea contar el valor anterior. Las posibilidades son ios::end : desde el final ios::beg : desde el comienzo ios::cur : desde la posición actual Nota: debido a que el procesamiento en general se realiza hasta que se dispara una condición de error, para volver a procesar el contenido del mismo es necesario reinicializar el estado de las banderas utilizando el método clear(), ej5

Archivos de acceso aleatorio C++ Los archivos de acceso aleatorio pueden ser leídos y escritos utilizando las clases ifstream, ofstream y fstream. En este caso, las operaciones de lectura y escritura deben realizarse a través de los métodos read y write que toman como argumento un puntero a char (char *), el mismo debe ser “constante” para las operaciones de escritura. Para poder escribir un valor de diferente tipo es necesario hacer una conversión utilizando el operador reinterpret_cast El segundo argumento de estos métodos será la cantidad de bytes a procesar, que debe ser consistente con el tipo de dato utilizado en la escritura o lectura. ej7

Archivos de acceso aleatorio C++ En un archivo de acceso aleatorio suele ser importante el posicionamiento en cualquier lugar del mismo. Para esto es posible utilizar seekg y seekp. Además es necesario conocer en que ubicación nos encontramos dentro del archivo en cuestión. Para esto es posible utilizar los métodos tellg y tellp, estos retornan un valor entero indicando en que lugar nos encontramos dentro del archivo respecto de las operaciones de escritura y lectura, respectivamente. ej8

Archivos y Qt En Qt, el acceso a archivos se realiza o utilizando una clase denominada QFile que implementa las funcionalidades básicas de lectura y escritura, o a través de flujos utilizando QTextStream (para flujos asociados a texto) y QDataStream (para flujos sin tipo). La metodología de trabajo es similar a la antes vista, el nombre del archivo a utilizar puede ser indicado a través del constructor de la clase QFile o a través del método setFileName. Más allá de esto es necesario invocar al método open para abrir el archivo y poder acceder a su contenido. Este método toma como argumento un valor que indica la forma en la que se desea abrir el archivo y retorna un valor booleano que indica el éxito de la operación. Los posibles argumentos del método open son: QIODevice::ReadOnly : abre el archivo solo para lectura QIODevice::WriteOnly : solo se podrá escribir en el archivo QIODevice::ReadWrite : permite lectura y escritura QIODevice::Truncate : elimina el contenido previo QIODevice::Text : indica que se trata de un archivo de texto y realiza las traducciones de caracteres necesarias.

Archivos y Qt QFile Un método útil de la clase es exists, es un método estático y retorna un valor boleano que indica si el nombre de archivo dado como argumento existe. De esta forma es posible conocer los parámetros con los que se debe abrir el archivo posteriormente. Al igual que con fstream y sus variantes, tras realizar las operaciones de escritura y lectura deseadas es necesario cerrar el archivo utilizado utilizando el método close(). Debido a que en general se trata con buffers, es posible hacer que las operaciones pendientes de realizarse debido a que los buffers no se han completado se ejecuten en un momento particular. Para esto puede invocarse el método flush(), este método retornará un valor booleano que indica el éxito de la operación.

Archivos y Qt QFile – Lectura y escritura Las operaciones de lectura y escritura son realizadas a partir de los métodos read y write. Estos toman como argumentos la dirección de memoria de los datos a escribir y el tamaño en bytes de los mismos. En todo momento el tamaño del archivo se puede conocer a través del método size() que retorna el tamaño del archivo en bytes. Este tamaño puede ser modificado en cualquier momento (siempre que el archivo esté abierto para escritura) utilizando el método resize, que toma como argumento el nuevo tamaño del archivo. Si el nuevo tamaño es mayor al original, las nuevas posición se escribirán con el valor cero. En caso contrario el archivo será truncado al nuevo tamaño. En lo que respecta al posicionamiento dentro del archivo, este se puede lograr invocando al método seek que toma como argumento el desplazamiento desde el comienzo del mismo. El método pos(), retorna la posición actual.

Archivos y Qt QFile – Ejemplo Con el objetivo de analizar un ejemplo consideremos el siguiente enunciado: Se tiene una estación meteorológica que registra diferentes variables físicas. Entre ellas se encuentran: Temperatura: un valor real de precisión simple. Velocidad del viento: un valor real de precisión simple para la velocidad y un valor entero para indicar la dirección según la tabla adjunta. Implemente una clase que permita almacenar en un archivo binario diferentes registros de las dos magnitudes antes mencionadas. Genere valores al azar para comprobar el correcto funcionamiento de esta clase. Dirección Valor Norte Noreste 1 Este 2 Sureste 3 Sur 4 Suroeste 5 Oeste 6 Noroeste 7 ej9

Archivos y Qt QFile y QTextStream Cuando se desea trabajar con archivos de texto, es posible utilizar la clase QTextStream. Esta clase incorpora un constructor que toma como parámetro la dirección de memoria de un objeto QFile sobre el que se desea trabajar. Debido a esto, es necesario abrir el archivo y cerrarlo luego de realizar las operaciones de interés a través de los métodos de la clase QFile. La clase QTextStream, implementa versiones sobrecargadas del operador de inserción que permiten tratar manejar diferentes tipos de valores de manera similar a las clases ifstream y ofstream. Debido a la característica secuencial de los archivos de texto, cobra interés el método atEnd() (equivalente a eof() de iftream) que retorna un valor booleano true si se alcanza el final del archivo durante un proceso de lectura.

Archivos y Qt QFile – Ejemplo Con el objetivo de analizar un ejemplo consideremos el siguiente enunciado: Desarrolle una clase que permita exportar los datos contenidos en un archivo binario como el indicado a un archivo de texto. La exportación se debe poder realizar sobre todos los datos, solo sobre datos de temperatura o solo sobre los datos de velocidad del viento. ej10

Archivos y Qt QTextStream Lectura En lo que respecta a operaciones de lectura esta clase incorpora (entre otros) los siguientes métodos: QString QTextStream::readAll(): retorna un objeto QString con todo el contenido del archivo de texto. Qstring QTextStream::readLine(qint64 max=0): retorna un objeto QString con una línea de cómo máximo max caracteres. Si no se indica un máximo, se espera el carácter de fin de línea. Qstring QTextStream::read (qint64 max=0): retorna un objeto QString con la cantidad de caracteres indicados. Si no son cadenas de caracteres lo que se desea leer del archivo, el operador de extracción de flujo está sobrecargado para permitir leer diferentes tipos de valores. ej11

Bibliografía Como programar C++ Introducción a la programación de juegos y las Bibliotecas Boost. Sexta edición H.M. Deitel / P. J. Deitel Capítulo 17: Procesamiento de archivos Documentación del entorno de desarrollo de Qt: Clase QFile: http://doc.qt.nokia.com/latest/qfile.html Clase QTextStream: http://doc.qt.nokia.com/latest/qtextstream.html