Autor
|
Tema: ¿Como guardar datos de pila en un archivo de texto? (Leído 6,813 veces)
|
LuisUvtol
Desconectado
Mensajes: 10
|
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: [code=cpp]struct frecuenciaCompras{ char id[100]; int NumeroCompras; }; struct Nodo{ struct frecuenciaCompras indice; struct Nodo *sigue; };
[/code] mis funciones para agregar: void agregar(struct frecuenciaCompras indice){ struct Nodo *agregaNodo = (Nodo*)malloc(sizeof(struct Nodo)); agregaNodo->indice = indice; agregaNodo->sigue = superior; superior = agregaNodo; } void agregarLista(char id[100]){ struct Nodo *aux = superior; while (aux != NULL){ int buscafrecuencia = strcasecmp(aux->indice.id, id); if(buscafrecuencia==0){ aux->indice.NumeroCompras++; return; } aux = aux->sigue; } struct frecuenciaCompras indice; strcpy(indice.id, id); indice.NumeroCompras = 1; agregar(indice); }
El problema lo tengo en mi funcion guardar ya que solo me guarda la direccion de memoria de 1 dato, no de n datos: void guardar(){ ofstream archivo; char guiones[] = "--------------------"; archivo.open("BaseDatos.txt",ios::app); if(archivo.fail()){ cout<<"No se pudo abrir"; exit(1); } struct Nodo *aux = superior; while(aux != NULL){ //En esta parte deberia de guardarse los datos de mi aux archivo<<aux; aux = aux->sigue; archivo.close(); } }
Espero y puedan ayudarme, les agradezco
|
|
|
En línea
|
|
|
|
K-YreX
|
No he mirado todo tu código, solo la última parte pero... Deberías no cerrar el archivo dentro del while(). Saca el: archivo.close();
fuera del while() de esta manera: while(aux != NULL){ archivo << aux; aux = aux->sigue; } archivo.close();
y dime si te funcionó.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
LuisUvtol
Desconectado
Mensajes: 10
|
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
|
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
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
LuisUvtol
Desconectado
Mensajes: 10
|
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 while(aux != NULL){ archivo << aux; aux = aux->sigue; } archivo.close();
|
|
|
En línea
|
|
|
|
LuisUvtol
Desconectado
Mensajes: 10
|
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 while(aux != NULL){ archivo << aux; aux = aux->sigue; archivo<<aux->sigue->indice.id; archivo<<aux->sigue->sigue->indice.id; archivo<<aux->sigue->sigue->sigue->indice.id; } 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
|
Yo lo he probado y me ha guardado todo correctamente. El siguiente código debería funcionar: Nodo *aux = superior; while(aux != NULL){ archivo << aux->indice.id << " | " << aux->indice.NumeroCompras << endl; aux = aux->sigue; }
Cómo has sobrecargado el operador <<??
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
LuisUvtol
Desconectado
Mensajes: 10
|
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: char ejemplo[] = "1,1,2,3,3,3,4,4,5,5,5,5,6,7";
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
|
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
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
LuisUvtol
Desconectado
Mensajes: 10
|
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: int main(){ int i,j,k; char a[50],aux; for(i=0;(a[i]=getchar())!='\n';i++){ for(k=0;k<i;k++){ for(j=1;j<i;j++){ if(a[j]<a[j-1]){ aux=a[j]; a[j]=a[j-1]; a[j-1]=aux; } } } } for(j=0;j<i;j++){ printf("%c",a[j]); }
Pero no lo logro ordenar por frecuencia
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Guardar entrada estandar en un archivo de texto
Programación C/C++
|
gonzaloi
|
8
|
4,560
|
3 Abril 2011, 00:23 am
por leogtz
|
|
|
¿COMO HACER QUE UN *.bat EXCRIBA UN ARCHIVO DE TEXTO SEGUN LOS DATOS DEL *.bat?
Scripting
|
xhunik
|
1
|
2,232
|
22 Agosto 2014, 05:43 am
por Eleкtro
|
|
|
Como extraer multiples datos de un archivo de texto[AYUDA]
Programación C/C++
|
Rastreator1010
|
0
|
2,238
|
16 Octubre 2014, 20:17 pm
por Rastreator1010
|
|
|
[C]Leer archivo y poner datos en pila
Programación C/C++
|
elpibewer
|
1
|
3,703
|
26 Octubre 2015, 12:50 pm
por Stakewinner00
|
|
|
Como guardar arraylist en archivo de texto interno android java
Programación General
|
victor96
|
8
|
6,426
|
23 Noviembre 2018, 19:36 pm
por victor96
|
|