Advertisement
Diamond32_Tutoriales

SERIALIZER

Dec 31st, 2023
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <unordered_map>
  5. #include <vector>
  6. #include <algorithm>
  7.  
  8. class MiObjeto {
  9. public:
  10. std::unordered_map<std::string, std::string> datos;
  11.  
  12. // Método para serializar el objeto
  13. void serializar(std::ostream& out) const {
  14. // Crear un vector de pares ordenados por clave
  15. std::vector<std::pair<std::string, std::string>> sortedDatos(datos.begin(), datos.end());
  16. // Ordenar el vector por clave
  17. std::sort(sortedDatos.begin(), sortedDatos.end());
  18.  
  19. // Serializar los datos ordenados
  20. for (const auto& par : sortedDatos) {
  21. out << par.first << "::\"" << par.second << "\"\n";
  22. }
  23. }
  24.  
  25. // Método para deserializar el objeto
  26. void deserializar(std::istream& in) {
  27. std::string linea;
  28. while (std::getline(in, linea)) {
  29. std::istringstream iss(linea);
  30. std::string clave, token, valor;
  31.  
  32. if (std::getline(iss, clave, ':') && std::getline(iss, token, '\"') && std::getline(iss, valor, '\"')) {
  33. datos[clave] = valor;
  34. }
  35. }
  36. }
  37.  
  38. // Operador de índice para facilitar la asignación
  39. std::string& operator[](const std::string& clave) {
  40. return datos[clave];
  41. }
  42.  
  43. // Operador de índice constante para permitir la búsqueda sin modificar
  44. const std::string& operator[](const std::string& clave) const {
  45. static const std::string valorPredeterminado = "";
  46. auto iter = datos.find(clave);
  47. if (iter != datos.end()) {
  48. return iter->second;
  49. } else {
  50. return valorPredeterminado;
  51. }
  52. }
  53. };
  54.  
  55. int main() {
  56. // Crear un objeto
  57. MiObjeto DatosAGuardar;
  58.  
  59.  
  60. MiObjeto miObjeto;
  61. // Asignar valores usando el operador de índice
  62. miObjeto["personaje"] = "GOKU";
  63. miObjeto["edad"] = "25";
  64. miObjeto["pais"] = "NO";
  65.  
  66. DatosAGuardar["gokuprueba"] = miObjeto;
  67.  
  68. // Serializar el objeto y escribirlo en un archivo
  69. std::ofstream archivoSalida("datos.txt");
  70. if (archivoSalida.is_open()) {
  71. miObjeto.serializar(archivoSalida);
  72. archivoSalida.close();
  73. } else {
  74. std::cerr << "Error al abrir el archivo de salida\n";
  75. return 1;
  76. }
  77.  
  78. // Leer el archivo y deserializar el objeto
  79. MiObjeto objetoLeido;
  80. std::ifstream archivoEntrada("datos.txt");
  81. if (archivoEntrada.is_open()) {
  82. objetoLeido.deserializar(archivoEntrada);
  83. archivoEntrada.close();
  84. } else {
  85. std::cerr << "Error al abrir el archivo de entrada\n";
  86. return 1;
  87. }
  88.  
  89. // Buscar un valor específico
  90. std::string valor = objetoLeido["Dato2"];
  91. std::cout << "Valor de Dato2: " << valor << "\n";
  92.  
  93. // Intentar buscar una clave que no existe
  94. std::string valorNoExistente = objetoLeido["Dato3"];
  95. std::cout << "Valor de Dato4: " << valorNoExistente << "\n";
  96.  
  97. return 0;
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement