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.

Explicación general

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.

Estructura de ejemplo

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:

Guardar struct en un archivo

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.

Recuperar struct de archivo en C++

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.

Poniendo todo junto

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:

Guardar y recuperar colección de struct en archivo usando C++

Guardar y recuperar colección de struct en archivo usando C++

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++.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 4,739 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada.

A %d blogueros les gusta esto: