Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Guardar arbol a un archivo

Estas en el tema de Guardar arbol a un archivo en el foro de C/C++ en Foros del Web. Bueno como comente en el otro tema, estoy teniendo un problemon con archivos, no logro hacer que me guarde en un archivo que es NOMBREARCHIVO.ART ...
  #1 (permalink)  
Antiguo 16/03/2012, 08:28
 
Fecha de Ingreso: marzo-2012
Ubicación: Uruguay
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 0
Exclamación Guardar arbol a un archivo

Bueno como comente en el otro tema, estoy teniendo un problemon con archivos, no logro hacer que me guarde en un archivo que es NOMBREARCHIVO.ART y el usuario se encarga de ingresar el nombredelarchivo.art en un string dinamico, bueno aca paso las estructuras.

Código PHP:
ELEMENTO:
typedef struct {
int solapa;
bool EsNumero;
union {
int numero;
char car;
DatosExtra;
Elemento;


EXPRESION:
typedef struct NodoA {
Elemento info;
NodoA hizq;
NodoA hder;
nodo;
typedef nodo Expresion

Yo tengo que guardar una expresion, el tema es que tengo que guardar elemento por elemento para que vaya ordenado en preorden, cosa que despues lo pueda levantar igual, para eso le cargo el int solapa al elemento y le voy cargando esos numeros a la expresion en preorden.

el tema es que no se si el sizeof me va a calcular el largo en bites de ese struct con union discriminada, esto es lo que tengo:


Código PHP:
string s2;
scan(s2);
 
FILE archivo;
                                         
archivo fopen (s2,"r");
                                         
Elemento elem1;
                                         if (
archivo == NULL){
                                             
archivo fopen (s2,"wb");
                                            
                                             [
B]save (archivo,aux);[/B//lo comento mas abajo
                                             
fclose(archivo);


                                         }
                                         else
                                         
printf("YA EXISTE UN ARCHIVO CON ESE NOMBRE, Desea sobreescribilo? S = Si, N = No \n");
                                         
fflush(stdin);
                                         
scanf("%c",&opcion);
                                         if ((
opcion == 'S') || (opcion == 's')){
                                             
archivo fopen (s2,"wb");
                                             
fwrite (&aux->info,10,1,archivo);
                                             
fclose(archivo);

                                         }
//end if
                                         
else
                                         if ((
opcion == 'N') || (opcion == 'n')){
                                         
printf("EL ARCHIVO NO SE HA GUARDADO. Escriba help para mas ayuda. \n");
                                         
fflush(stdin);
                                         }
//end if
                                         
else
                                         
printf("OPCION INCORRECTA. Escriba help para mas ayuda. \n");
                                         
fflush(stdin);



                                     } 
//end if
                                     
else
                                     
printf("PARAMETRO INCORRECTO, La posicion %d no ha sido cargada. Escriba help para mas ayuda. \n",valor1); 

Primero que nada no se si mi size esta bien para mi union discriminada Elemento, le puse 10.

en cuando al save que cito es asi

Código PHP:
void save (FILE *archivoExpresion exp){
    if(
exp != NULL){
        
fwrite (&exp->info,10,1,archivo);
        
save (archivo,exp->hizq);
        
save (archivo,exp->hder);
    }
//end if 
El tema es que no me esta guardando, no se si estoy haciendo algo mal, tampoco se si me esta funcionando el load que en este caso les iba a consultar como lo podia hacer.

Gracias por todo, espero que se entienda mi mensaje jejeje

saludos,
  #2 (permalink)  
Antiguo 16/03/2012, 08:41
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Guardar arbol a un archivo

En este caso deberias usar sizeof(Elemento). Ademas veo que lo quieres escribir en forma binaria.
Asi deberia estar escribiendo.. fijate cuanto ocupa el archivo. No espere ver letras y numeros cuando lo abras porque lo estas escribiendo en binario.

Saludos
  #3 (permalink)  
Antiguo 16/03/2012, 09:23
 
Fecha de Ingreso: marzo-2012
Ubicación: Uruguay
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Guardar arbol a un archivo

Cita:
Iniciado por sam90 Ver Mensaje
En este caso deberias usar sizeof(Elemento). Ademas veo que lo quieres escribir en forma binaria.
Asi deberia estar escribiendo.. fijate cuanto ocupa el archivo. No espere ver letras y numeros cuando lo abras porque lo estas escribiendo en binario.

Saludos
Gracias, ya lo cambie pero cuando hago el load no me carga nada, el load lo tengo asi:

Código PHP:
void load (FILE *archivo,ListaExpresiones &lis,int &ref ){
    
int n;
    
Expresion aux,aux2;
    
ExpIdent expi;
    
aux2 NULL;
    
aux NULL;
    
fread (&aux->info,sizeof(Elemento),1,archivo);
    
aux2 aux;
    while (!
feof(archivo)){
        
fread (&aux->info,sizeof(Elemento),1,archivo);
        if((
aux->info.solapa) < (aux2->info.solapa) ){
        
aux2->hizq= new nodo;
        
aux2->hizq->info aux->info;
        }
        else
        
aux2->hder= new nodo;
        
aux2->hder->info aux->info;

    }
    
CargarExpIdent(expi,ref,aux2);
    
InsBack(lis,expi);

Cuando realizo este load no me carga nada no me muestra nada, hay algo mal en el load con respecto a los archivos?

Gracias por la ayuda :)
  #4 (permalink)  
Antiguo 16/03/2012, 17:38
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Guardar arbol a un archivo

Estoy con poco tiempo... lo primero que podrias probar es ver si se esta guardando bien... proba leer un solo nodo para ver que lee..

Mañana te ayudo con lo demas. Saludos

Etiquetas: funcion, int, string, struct, arboles
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:35.