En el post de hoy veremos cómo guardar los datos de un vector de struct en un archivo de texto para más tarde poder recuperarlo.
Es decir, guardar varias estructuras (un arreglo de ellas) en un archivo y en cualquier otro momento del tiempo leer ese archivo y convertirlo de nuevo a una colección de structs usando C++.
Básicamente vamos a serializar y deserializar structs en un archivo usando CPP.
Para poder guardar un struct en un archivo simplemente debemos guardar todas sus propiedades, y separarlas de alguna manera. Al momento de recuperarlas debemos hacer el proceso inverso.
Entonces lo único que hace falta es escribir todas las propiedades separadas por un delimitador, y luego separar cada struct con algo como un salto de línea.
Al momento de leer el archivo y convertirlo a la colección de structs separamos la línea leída usando el delimitador, y vamos asignando las propiedades.
No olvides que todo debe ser exactamente en el mismo orden.
Aquí tengo un ejemplo de un struct que usé para otro post. Lo que haremos será guardar una colección de estructuras en un archivo.
Comenzamos declarando la estructura y unas constantes útiles:
Veamos la siguiente parte que sería escribir una función que abra el archivo, recorra el vector de struct y escriba cada propiedad:
Tenemos la función. Abrimos el archivo en la línea 4, recorremos la colección de estructuras en la línea 6, luego accedemos al struct actual en la línea 8 y escribimos el contenido en el archivo en la línea 9.
Fíjate en que estamos escribiendo primero la edad
, luego el delimitador, más tarde el nombre
y finalmente un salto de línea.
Cuando la función se acabe de ejecutar vamos a tener todos los structs guardados en un archivo.
Nota: recuerda que esto va a sobrescribir el contenido del archivo. Si tú quieres, puedes adjuntar el contenido con la opción append.
Ahora veamos el proceso inverso: leer la colección de estructuras de un archivo y convertirlas de nuevo a un vector. El código queda así:
Abrimos el archivo en la línea 5, luego leemos del archivo mientras haya líneas en la línea 7.
Ya dentro del ciclo while creamos un input_stringstream para separar la cadena usando el delimitador y obtenemos primero la edad
y luego el nombre
, ambos como cadenas.
Luego en la línea 12 convertimos la edad a entero y la asignamos al struct, al igual que la línea 13 en donde asignamos el nombre pero no hacemos conversión porque ya es una cadena.
Finalmente en la línea 14 agregamos el struct al vector y cuando el ciclo se acaba (es decir, que ya no hay líneas para leer) regresamos el vector.
Ahora veamos esas funciones de C++ ejecutándose. También he agregado una función adicional para imprimir el vector. El código completo queda así:
El modo de uso está indicado en la función main
. Obviamente el llenado del vector puede venir de cualquier lugar; yo simplemente lo he llenado manualmente para luego escribirlo en el archivo en la línea 67, y recuperarlo en la 69.
Al ejecutarlo tenemos la siguiente salida, que coincide con el contenido del archivo:
Y ya con esto puedes trabajar con estructuras más complejas, ya sea que cambies las propiedades, los delimitadores o cualquier otra cosa.
Para terminar te dejo con más tutoriales de C++.
En mi blog te he enseñado a usar youtube-dl para descargar vídeos con permiso del…
Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL…
En un post previo te enseñé a enviar un mensaje en nombre de un Bot…
En este artículo te voy a mostrar una guía para imprimir en una impresora térmica…
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
Esta web usa cookies.
Ver comentarios
no esta declarado stoi, como lo declaro?
Hola. Gracias por sus comentarios. Si tiene alguna consulta, solicitud de creación de un programa o solicitud de cambio de software con gusto lo atiendo en https://parzibyte.me/#contacto
Saludos!