Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porΛυδία Ταρσούλη Modificado hace 5 años
1
Programación Básica| Sesión 18, Manejo de archivo -aplicacion-
Luis Infante
2
INTRODUCCION En sesiones anteriores se introdujo el manejo de archivos usando la clase fstream de C++ y la estructura FILE de C, en esta sesión se reforzara lo aprendido mediante ejemplos, ademas de introducir nuevos conceptos
3
Escribir y leer Archivos numericos
Los archivos se manejan como una cadena, cada dato guardado es un eslabon de esta cadena (Fig. 1) , estos eslabones tienen un elemento que los separa uno de otros, en el siguiente ejemplo se guardan 10 números reales, se utiliza el objeto fstream y se abre el archivo como ios::out (escritura desde el inicio) 1 Modo escritura 3 Fig.1 No olvidar cerrar
4
Escribir y leer Archivos numericos
Si abrimos el archivo creado en bloc de notas se podría ver de esta forma ¿Podremos a partir de este archivo recuperar los datos? Nota : El archivo es generado y guardado en la carpeta del proyecto de la aplicación, a menos que se especifique otra ruta, si se corre desde el archivo ejecutable (aplicacion_nombre.exe) el archivo se genera en la carpeta donde este este
5
Escribir y leer Archivos numericos
El modo ios::out ,genera un archivo de texto, pero como no se escribió ningún separador entre los valores para un objeto fstream será difícil leerlo, por eso es común agregar un separador, en el caso de valores numéricos un espacio bastara El espacio Nota: los modos ios::xxx son enumeraciones, no solo existen ios::in y ios::out, estan también el modo ios::app que abre el archivo para escritura desde el final, el ios::binary y el ios::ate
6
Escribir y leer Archivos numericos
Al agregar el espacio se hace que el puntero de lectura pueda moverse entre los eslabones de la cadena de datos, colocándose justo donde comienza cada eslabón. cursor espacio dato1 dato2 dato3 dato4 Situándose al principio cursor dato1 dato2 dato3 dato4 Moviéndose al siguiente dato
7
Escribir y leer Archivos numericos
Espacios y saltos de línea pueden bastar para escribir y leer archivos correctamente pero también los espacios y saltos de línea son útiles para darle formato al archivo, leer resulta sencillo ya que es casi igual a escribir, para leer debe utilizarse el enumerador ios::in Modo Lectura
8
Escribir y leer Archivos con texto
Lectura y escritura de Cadenas de texto Si se manejan cadenas de texto el procedimiento es casi igual, pero las cadenas de texto tienen que ser sin espacios ESCRIBIR LEER
9
Escribir y leer Archivos con texto
Los espacios causan que el cursor se mueve a la cadena después del espacio creyendo que es otro eslabon como se ve en la figura de abajo Cadena con espacio uno dos cinco tres cuatro ESCRIBIR uno dos cinco tres cuatro Nada mas se escribe hasta el tres
10
Escribir y leer Archivos con texto
Los espacios causan que el cursor se mueve a la cadena después del espacio creyendo que es otro eslabón como se ve en la figura de abajo Cadena con espacio ESCRIBIR uno dos cinco tres cuatro uno dos cinco tres cuatro
11
Escribir y leer Archivos con texto
Esto resultaría en una lectura errónea, ya que el cursor de lectura no llega hasta el final del archivo Imprimiendo en pantalla 1 2 3 1 uno dos cinco tres cuatro
12
Escribir y leer Archivos con texto
Para escribir texto o números y texto en un mismo archivo no basta entonces utilizar espacios o salto de linea, un separador adicional es necesario, es practica común utilizar la coma como un separador mas fuerte (aunque es posible usar otros), la lectura debe entonces reconocer a la coma como un separador cursor uno dos cinco tres cuatro ESCRIBIR Coma(,)
13
Escribir y leer Archivos con texto
Para escribir texto separado por comas en un archivo no resulta muy complicado La coma Pero para leer texto separado por comas no es posible utilizar el operador sobrecargado >> de lectura, se necesita la función getline(…)
14
Escribir y leer Archivos con texto
Lectura y escritura de Cadenas de texto con espacio la función getline(…) La función getline es una función de entrada de datos, utilizada para leer líneas de texto, aunque estas incluyan espacios Funciones de entrada y salida ya sea de terminal o de archivo, requieren conocer que “objeto” les esta suministrando los datos o hacia que objeto están mandando estos datos, funciones como printf o scanf saben que se están tratando con el objeto consola pero getline puede utilizarse con objetos tipo archivo y la consola
15
Escribir y leer Archivos con texto
El objeto del que se va leer (objeto-lectura) es el primer parámetro de getline(…), el segundo es cadena de texto donde se colocara lo leído (string-destino), un tercer parámetro “opcional” indica con que símbolo separador detenerse la lectura(carácter- separador) en caso de no existir se lee la línea completa que venga del objeto-lectura getline(objeto-lectura ,string-destino, carácter-separador) getline(objeto-lectura ,string-destino) //Línea completa
16
Escribir y leer Archivos con texto
Para leer el archivo con espacios vacios y separado por comas del ejemplo anterior, podemos usar entonces getline(…) El tercer parámetro indicara que símbolo se usa como separador El primer parámetro es de donde se lee, en este caso de un archivo variable donde se guardaran los elementos del archivo Nota : No olvidar cerrar - archivo.close() -
17
Escribir y leer Archivos con texto
Si se imprime en pantalla la lectura de el archivo con getline(…) se puede entonces leer el archivo integro
18
Leyendo una tabla en un archivo
El archivo se llama subservicios.txt En el siguiente ejemplo leeremos una tabla que esta dentro de un archivo, los elementos de la tabla pueden ser tanto números como cadenas de texto con o sin espacio, se debe leer el archivo y mostrarlo en la pantalla
19
Leyendo una tabla en un archivo
El archivo contiene una tabla, cada columna separada con una coma , cada renglón por un salto de línea renglon columna separador
20
Leyendo una tabla en un archivo
El código para la lectura podría ser Imprimiendo en pantalla lo que se va leyendo Imprimiendo salto de línea por renglón leido
21
Leyendo una tabla en un archivo
En el código anterior, se utiliza un objeto llamado sline del tipo stringstream para guardar la línea leida del archivo y guardada en objeto llamado line, getline(…) es usado nuevamente para leer cada línea y descomponerla en campos, cada campo esta encerrado entre comas, necesita un objeto tipo dispositivo (podemos pensar en una maquina), el objeto line es insuficiente para funcionar con getline, por ser una simple cadena de caracteres, pero sline si funciona como dispositivo de entrada separador (,) Guarda en: getline(…) Guarda en: line (string) Guarda en: getline(…) Lee de: Lee de: Archivo s[] (array de string) sline (stringstream)
22
Leyendo una tabla en un archivo
Impresión en pantalla Impresión con formato Nota: Todos los campos son string Lectura de línea vacía
23
Leyendo una tabla en un archivo
La impresión se hizo correctamente, pero la ultima línea del archivo esta vacia pero existe como tal, puede eliminarse manualmente , pero también puede omitirse , puede haber varias formas para hacer esto, si se espera por ejemplo una línea se espera que contenga “algo” Si la longitud de la nueva línea es cero o menor de lo esperado, puede no realizarse su lectura
24
Leyendo una tabla en un archivo
Impresión “corregida“ de tabla
25
Creando una tabla en un archivo
Otra forma de leer de un archivo que contenga una tabla es utilizando fgets(…), el uso de fgets(…) evitaría la creación de un objeto del tipo stringstream e incluso de la separación por comas Pero se requeriría usar la estructura FILE de manejo de archivos para C y sus funciones fopen_s(…) y fclose(…) El archivo puede contener campos sin ninguna separación entre ellos
26
Creando una tabla en un archivo
El código para leer el archivo podría ser el siguiente Estructura FILE (manejo de archivos C) fopen_s(…) abierto para lectura Usando fgets(…) 1er parámetro: cadena de texto destino 2do parámetro:tamaño cadena 3er estructura de archivo
27
Creando una tabla en un archivo
El resultado seria el siguiente, una observación interesante es que el código leyó los saltos de línea como caracteres y en la impresión volvieron a ser saltos de linea
28
Creando una tabla en un archivo
Otra observación interesante es que la lectura funciona moviendo el cursor de lectura dentro del archivo Inicio blusa Moviendose entre campos 2 2+5 2+5+20 blusa /n 2+5+2
29
Leyendo una tabla en un archivo
Con lo anterior ya podemos saber como se lee una tabla que este dentro de un archivo y que este separada por comas, pero como se podría generar una tabla como esta, la tabla del archivo es una tabla con texto formateado, esto es que las columnas tienen un ancho preestablecida, también existe una cantidad de columnas fija
30
Creando una tabla en un archivo
Crearemos una tabla simple en un archivo, sin ocuparnos por el momento del formato, agregaremos tres renglones a la tabla Tabla ejemplo para guardar Separador entre campos Salto de línea entre renglones
31
Creando una tabla en un archivo
El resultado del código anterior seria: El resultado no es del todo incorrecto, pero la cuarta columna no se ve correctamente, necesita establecerse el ancho de este campo como fijo, pero es mejor establecer los anchos de cada columna
32
Creando una tabla en un archivo
Corregir la impresión, puede ser hecho de varias formas, aquí se muestra una de ellas Podemos agregar un arreglo con los anchos de las columnas int w[5]{1,4,2,20,8} Podemos hacer uso de la función sprintf_s(…), esta función proviene de C puro, esta función nos permite guardar en una cadena de texto, un texto formateado, en este caso el formato consistirá en que todos los campos tengan el mismo tamaño, la función necesita un primer parámetro que es la cadena de texto donde se guardara el texto formateado, un segundo parametro que indique el tamaño de la cadena, un tercer parámetro que es la cadena de texto original sprintf( destino , tamaño, origen ) //las cadenas son del tipo char cadena[] o char *cadena Cada texto formateado se guardan en un objeto string y se recortan con substring al tamaño deseado y desde el punto que nose necesario
33
Creando una tabla en un archivo
El uso de sprintf_s(…) hace que todos los campos tengan el mismo tamaño, insertando espacios en la posición izquierda de la cadena original, el campo mas largo que es de 20 caracteres no requiere ningún recorte, pero el resto si string inicial _ _ _ _ _ _ _ _ _ _ _ _ b l u s a substr(…) _ _ _ _ _ _ _ _ _ _ _ _ b l u s a string final 20-w[j] string inicial _ _ _ _ _ _ _ _ _ _ _ _ _ w[j] substr(…) string final
34
Creando una tabla en un archivo
Anchos de campos Formateando campos Recortando campos
35
Modificando un archivo
La lectura es el proceso mas difícil en cuanto al manejo de archivos Imaginemos que necesitamos modificar algún campo de una tabla, el situado en “x” renglón, necesitamos el llamado cursor, que puede ser tanto de escritura como de lectura Renglón a modificar Numero 2 Campo a modificar Num. de renglón
36
Modificando un archivo
Como primer paso necesitamos abrir el archivo tanto en modo lectura como en modo escritura, el operador “|” actua como un “or” Se necesita también tener la posición del cursor para eso se usa la función tellg(), que obtiene la posición del cursor de lectura Necesitamos establecer el momento en que se alcanzo el segundo renglón, necesitamos entonces tener un arreglo (s) para los campos donde el primero sabemos que es el numero de renglón
37
Modificando un archivo
Y en el momento en que estamos en el renglón a modificar debemos establer el cursor de escritura y hacer inserciones desde esa posición, insertamos valores nuevos en los campos donde sea necesario, donde no cambien debemos conservar los mismos que se tenían Conservando la coma conservando valor de campo Modificando campo
38
Modificando un archivo
El código completo seria: (establecer posición de cursor ) (varias líneas de código compactadas) (posición de cursor en nueva linea)
39
Modificando un archivo
El archivo modificado queda :
40
Ficheros binarios Normalmente hemos creado y utilizado archivos que se pueden leer en una aplicación tipo bloc de notas, los conocemos como archivos de texto, pero C/C++ no solo pueden generar archivos de este tipo, también pueden generar archivos binarios, se pueden abrir archivos en un objeto del tipo fstream con el modo ios::binary Los archivos binarios parecen archivos de texto, pueden verse parcialmente en un bloc de notas sin embargo, hay algunas diferencias y también aplicaciones que pueden tener uno y otro modo
41
Ficheros binarios Código para generar un archivo binario:
abrir archivo para escritura en modo binario Resultado en bloc de notas Resultado en Wordpad En bloc de notas no se ve el salto de línea en wordpad si
42
Ficheros binarios Un archivo binario no solo escribe caracteres simples en un archivo, también agrega caracteres que un bloc de notas no es capaz de leer y es capaz de guardar información mejor que un archivo de texto, puede guardar mejor un numero real que un archivo de texto simple En el código a la izquierda se escribe y lee un valor real en los dos modos (texto y binario)
43
Ficheros binarios El resultado del código muestra la diferencia entre guardar valores numéricos en un archivo binario, es evidente la superioridad del modo binario Sin embargo el modo binario exige que lo que se vaya a guardar se traduzca al modo “binario” , que es básicamente hacer que el valor ocupe todo el espacio de memoria que necesita para no perder precisión, esto hace que los archivo pueden quedar en este caso de diferente tamaño (archivo txt quedo en 6 bytes el binario en 8 bytes)
44
Ficheros binarios El modo binario puede resultar en archivos ilegibles para el bloc de notas Y también para el bloc de notas
45
Ficheros binarios Crear archivos binarios puede también facilitar la extracción de datos, pero obliga a conocer el origen y tamaño de los datos en memoria que queremos guardar en archivo, si tenemos dos números float y una cadena de caracteres de tamaño 20 hay que extraerlos en el orden en que se introdujeron, respetando los tamaños, si estos forman una tabla seria mas útil saber cuantos campos por línea, no siendo necesario introducir un salto de linea Sin embargo hay que considerar que requerirá mas código, o cambiar el código que se tenga para hacer escrituras “binarias”
46
Programación Fin de la sesión
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.