Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ezar147 en 8 Junio 2017, 20:08 pm



Título: Pasar datos de un archivo binario a una lista dinamica
Publicado por: ezar147 en 8 Junio 2017, 20:08 pm
Tengo un archivo binario y quiero pasar los datos del archivo y registrarlos en una lista dinámica, pero al momento de hacerlo se me crean dos elementos en la lista aparte de los que están en el archivo. Quien me podría ayudar?

este es el código.
Código
  1.  
  2. Clientes *registrar_cliente(){
  3. Clientes *cliente = new Clientes; //se crea el un nuevo cliente.
  4.  
  5. if(P_inicio_cliente == NULL){ //en caso que no exista ningun elemento en la lista.
  6.  
  7. P_fin_cliente = cliente;
  8. P_inicio_cliente = cliente;
  9. cliente->P_ant = NULL;
  10. cliente->P_sig = NULL;
  11. }
  12.  
  13. else{ //si ya existen elementos en la lista.
  14.  
  15. cliente->P_ant = P_fin_cliente;
  16. P_fin_cliente->P_sig = cliente;
  17. cliente->P_sig = NULL;
  18. P_fin_cliente = cliente;
  19. }
  20. return cliente;
  21. }
  22.  
  23. int tomar_datos(){
  24. ifstream clientesIn("clientes.dat",ios::in|ios::binary);
  25. if(!clientesIn){
  26. return -1;
  27. }
  28. else{
  29. Clientes aux; //para tomar los datos del archivo y luego enviarlos a la lista
  30. clientesIn.read((char*)&aux, sizeof(Clientes));
  31. while(!clientesIn.eof()){
  32. *registrar_cliente() = aux;
  33. clientesIn.read((char*)&aux, sizeof(Clientes));
  34. }
  35. clientesIn.close();
  36. }
  37. }
  38.  
  39.  



Título: Re: Pasar datos de un archivo binario a una lista dinamica
Publicado por: MAFUS en 8 Junio 2017, 21:04 pm
En C++ existen ya las listas. No hace falta que hagas una desde cero.
*registrar_cliente() = aux; es un código muy extraño, deberías hacerlo más intuitivo. Por ejemplo algo así:
Código:
registrar_cliente(aux);
// o
misClientes.registrar(aux);


Título: Re: Pasar datos de un archivo binario a una lista dinamica
Publicado por: ezar147 en 9 Junio 2017, 00:51 am
El problema es que es un trabajo que tengo que hacerlo con structuras y archivos sin usar librerias para listas


Título: Re: Pasar datos de un archivo binario a una lista dinamica
Publicado por: ezar147 en 10 Junio 2017, 01:07 am
ya me di cuenta de mi error. Resulta que cuando guardo la información en el archivo también se guardan los datos del los punteros y estos se pasan al nuevo elemento creado. la solución es sencilla pero tuve que pensarlo bien para darme cuenta.

aquí les dejo el condigo con la solución
Código
  1. int tomar_datos(){
  2. ifstream clientesIn("clientes.dat",ios::in|ios::binary);
  3. if(!clientesIn){
  4. return -1;
  5. }
  6. else{
  7. Clientes aux; //para tomar los datos del archivo y luego enviarlos a la lista
  8. clientesIn.read((char*)&aux, sizeof(Clientes));
  9. while(!clientesIn.eof()){
  10.                        aux.P_sig = NULL;
  11.                        aux.P_ant = P_fin_cliente;
  12. *registrar_cliente() = aux;
  13. clientesIn.read((char*)&aux, sizeof(Clientes));
  14. }
  15. clientesIn.close();
  16. }
  17. }
  18.