elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Como guardar datos de pila en un archivo de texto?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como guardar datos de pila en un archivo de texto?  (Leído 6,083 veces)
LuisUvtol

Desconectado Desconectado

Mensajes: 10


Ver Perfil
¿Como guardar datos de pila en un archivo de texto?
« en: 2 Mayo 2020, 01:49 am »

Buen dia a todos los internautas, tengo un pequeño problema, quiero guardar mis datos a un archivo de texto pero no logro hacerlo el codigo es el siguiente:

Mis estructuras:
Código
  1. [code=cpp]struct frecuenciaCompras{
  2. char id[100];
  3. int NumeroCompras;
  4. };
  5.  
  6. struct Nodo{
  7. struct frecuenciaCompras indice;
  8. struct Nodo *sigue;
  9. };
  10.  
[/code]

mis funciones para agregar:

Código
  1. void agregar(struct frecuenciaCompras indice){
  2.  struct Nodo *agregaNodo = (Nodo*)malloc(sizeof(struct Nodo));
  3.  agregaNodo->indice = indice;
  4.  agregaNodo->sigue = superior;
  5.  superior = agregaNodo;
  6. }
  7. void agregarLista(char id[100]){
  8. struct Nodo *aux = superior;
  9. while (aux != NULL){
  10. int buscafrecuencia = strcasecmp(aux->indice.id, id);
  11. if(buscafrecuencia==0){
  12. aux->indice.NumeroCompras++;
  13. return;
  14. }
  15. aux = aux->sigue;
  16. }
  17. struct frecuenciaCompras indice;
  18. strcpy(indice.id, id);
  19. indice.NumeroCompras = 1;
  20. agregar(indice);
  21. }
El problema lo tengo en mi funcion guardar ya que solo me guarda la direccion de memoria de 1 dato, no de n datos:
Código
  1. void guardar(){
  2. ofstream archivo;
  3. char guiones[] = "--------------------";
  4. archivo.open("BaseDatos.txt",ios::app);
  5. if(archivo.fail()){
  6. cout<<"No se pudo abrir";
  7. exit(1);
  8. }
  9.  
  10. struct Nodo *aux = superior;
  11. while(aux != NULL){                     //En esta parte deberia de guardarse los datos de mi aux
  12. archivo<<aux;
  13. aux = aux->sigue;
  14. archivo.close();
  15. }
  16.  
  17. }
Espero y puedan ayudarme, les agradezco


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #1 en: 2 Mayo 2020, 17:44 pm »

No he mirado todo tu código, solo la última parte pero... Deberías no cerrar el archivo dentro del while().
Saca el:
Código
  1. archivo.close();
fuera del while() de esta manera:
Código
  1. while(aux != NULL){
  2.  archivo << aux;
  3.  aux = aux->sigue;
  4. }
  5. archivo.close();
y dime si te funcionó.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
LuisUvtol

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #2 en: 2 Mayo 2020, 21:19 pm »

Gracias por tu respuesta! realice las modificaciones que me dijiste y el resultado es el siguiente:

1. Tengo una pila con los siguientes datos:

ID |Frecuencia
2  |   2
3  |   2
4  |   1
5  |   3

Lo unico que se me guarda en el archivo es lo siguiente:
ID | Frecuencia
2   | 2

ahorita estoy trabajando para que se me guarde todo y por supuesto, si lo logro compartire el codigo en este hilo
si me puedes ayudar con esto estaría muy agradecido!
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #3 en: 3 Mayo 2020, 01:49 am »

Primero comprueba que los datos se guardan correctamente en la pila. Si es así, ahora comprueba que no estés sobrescribiendo la primera línea de tu fichero ya que al ser una pila, se ve que solo muestra el primer valor insertado que es el último en salir.

PD: El código es bastante mejorable. Hay una mezcla de C con C++...
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
LuisUvtol

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #4 en: 3 Mayo 2020, 02:10 am »

Los datos se guardan correctamente en la pila, encontre una manera de guardar los datos pero no es eficiente, deberia emplear un bucle pero no se como implementarlo
Código
  1. while(aux != NULL){
  2.  archivo << aux;
  3.  aux = aux->sigue;
  4.  
  5. }
  6. archivo.close();
En línea

LuisUvtol

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #5 en: 3 Mayo 2020, 02:13 am »

Los datos se guardan correctamente en la pila, encontre una manera de guardar los datos pero no es eficiente, deberia emplear un bucle pero no se como implementarlo
Código
  1. while(aux != NULL){
  2.  archivo << aux;
  3.  aux = aux->sigue;
  4.  archivo<<aux->sigue->indice.id;
  5.  archivo<<aux->sigue->sigue->indice.id;
  6.  archivo<<aux->sigue->sigue->sigue->indice.id;
  7. }
  8. archivo.close();
de esta manera si me guarda los datos en el archivo, he estado intentando usar un bucle ¿Alguna idea para implementarlo?
Gracias!!
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #6 en: 3 Mayo 2020, 02:45 am »

Yo lo he probado y me ha guardado todo correctamente. El siguiente código debería funcionar:
Código
  1. Nodo *aux = superior;
  2. while(aux != NULL){
  3.  archivo << aux->indice.id << " | " << aux->indice.NumeroCompras << endl;
  4.  aux = aux->sigue;
  5. }
Cómo has sobrecargado el operador <<??
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
LuisUvtol

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #7 en: 3 Mayo 2020, 17:59 pm »

Me ha funcionado! Muchas gracias, estoy por terminar mi codigo, pero quiero hacer una ultima modoficacion, tal vez me puedas ayudar, ¿Como puedo ordenar una variable tipo char? por ejemplo:
Código
  1. char ejemplo[] = "1,1,2,3,3,3,4,4,5,5,5,5,6,7";
  2.  
Quisera ordenarla de esta manera:
ejemplo[] = "5,5,5,5,3,3,3,4,4,1,1,6,7"

Quiero ordenarla dependiendo de la frecuencia de los numeros, Gracias!
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #8 en: 3 Mayo 2020, 18:40 pm »

Hay muchas formas de hacerlo y dependerán de las funciones, las estructuras,... que quieras usar. Básicamente dependerá de tu algoritmo.
También tendrás que tener en cuenta ciertas precondiciones como si conoces la cantidad de dígitos diferentes existentes o si todos los dígitos iguales aparecerán seguidos,...
Puedes usar una estructura para guardar un valor y sus repeticiones. Crear un array de esta estructura y guardar todos los valores, ordenar dicho array y después crear la nueva cadena a partir de esos resultados.
Puedes usar una cola con prioridad (puedes usar la de la STL de C++). Y es altamente recomendable no solo para esto sino para todos tus programas que tengas en claro tu lenguaje de programación. En C++ no se usa malloc/free sino new/delete. Tienes los strings para facilitarte el trabajo con cadenas y tienes las clases en vez de las estructuras.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
LuisUvtol

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: ¿Como guardar datos de pila en un archivo de texto?
« Respuesta #9 en: 3 Mayo 2020, 19:03 pm »

Gracias por tu respuesta! Lo que yo busco hacer es ordenar esa cadena, dependiendo de las repeticiones y que se me genere una nuevo char, ya con este nuevo char modifico mi codigo para poder trabajar con el, puedo ordenar el char de manera ascencente con el siguiente codigo:
Código
  1. int main(){
  2. int i,j,k;
  3. char a[50],aux;
  4.  
  5. for(i=0;(a[i]=getchar())!='\n';i++){
  6.  
  7. for(k=0;k<i;k++){
  8. for(j=1;j<i;j++){
  9. if(a[j]<a[j-1]){
  10. aux=a[j];
  11. a[j]=a[j-1];
  12. a[j-1]=aux;
  13. }
  14. }
  15. }
  16. }
  17. for(j=0;j<i;j++){
  18. printf("%c",a[j]);
  19. }
  20.  
Pero no lo logro ordenar por frecuencia :(
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines