• Sábado 14 de Diciembre de 2024, 11:47

Autor Tema:  Error Codigo!! Urge !! Problema al Leer Archivo !!  (Leído 1930 veces)

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Error Codigo!! Urge !! Problema al Leer Archivo !!
« en: Lunes 29 de Noviembre de 2010, 13:03 »
0
Hola, estoy intentando hacer una práctica en la que tengo que leer un archivo txt, pero no se por qué no se abre, si no que el programa en ejecucion se queda parado sin hacer nada...

Parte del código es:
Código: C++
  1.  
  2.     cout << endl << endl << "--> Ruta del fichero : ";
  3.    
  4.     cin >> ruta;
  5.    
  6.     ruta_archivo = new char [ruta.size()-1];
  7.     strcpy (ruta_archivo, ruta.c_str());
  8.  
  9.  

Ahora, "ruta_archivo" se lo paso a una función que, a parte de más cosas, abre el fichero, haciendo:

Código: C++
  1.     ifstream Puntos_Muestra (route);
  2.  
  3.         // Se comprueba que el fichero se ha abierto correctamente
  4.         if (!Puntos_Muestra)
  5.         {
  6.             // Código que se ejecuta bien si no se espcifica ruta o mal el nombre del fichero
  7.         }
  8.        
  9.         else
  10.         {
  11.                        // El programa se queda parado, supongo que aquí
  12.                 }
  13.  
  14.  
  15.  

Muchas gracias y un saludo.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #1 en: Lunes 29 de Noviembre de 2010, 13:57 »
0
No pones la declaración de ruta_archivo.

Usa la clase string en vez de char*, que para eso tienes C++  ;)

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #2 en: Lunes 29 de Noviembre de 2010, 13:59 »
0
la declaración es:

char * ruta_archivo;
string ruta;

luego convierto el string a char* y ese char * es el parametro q l paso a la funcion donde luego se ejecuta lo anterior, pero es que no sé por qué no va... :(

pongo aquí parte de la funcion que abre el archivo por si acaso :
Código: C++
  1. ifstream Puntos_Muestra (route);
  2.  
  3.        
  4.         if (!Puntos_Muestra)
  5.         {
  6.  
  7. // Ejecucion correcta
  8.  
  9.             cout << endl << endl;
  10.             cout << "No se pudo abrir el fichero. No existe o la ruta no es valida.";
  11.             cout << endl << endl;
  12.             exit(1);
  13.         }
  14.        
  15.         else
  16.         {
  17.  
  18. // Ejecución errónea, aquí se para el programa....
  19.  
  20.             cout << "hola";  // Comprobacion para ver que se abre el archivo
  21.            
  22.             float x, f_x_y;
  23.            
  24.  
  25.             vector<float> componentes (n_var);
  26.  
  27.             int n_puntos_muestra = 0;
  28.            
  29.             float valor_fitness = 0;
  30.  
  31.             Puntos_Muestra >> x;
  32.  
  33.             while (!Puntos_Muestra.eof())
  34.             {
  35.                
  36.                 for (int j = 0; j <  n_var; j++)
  37.                 {
  38.                     componentes[j] = x;
  39.                     Puntos_Muestra >> x;
  40.                 }
  41.                
  42.                 float output;
  43.                
  44.                 output = pob[i].Calcula_Output (componentes, straight_line);
  45.                
  46.                 float t = output - f_x_y;
  47.                 valor_fitness += pow (t, 2);
  48.                
  49.                 n_puntos_muestra++;
  50.                
  51.                 Puntos_Muestra >> x;
  52.             }
  53.            
  54.             valor_fitness /= n_puntos_muestra;
  55.            
  56.             pob[i].fitness = valor_fitness;
  57.         }
  58.     }
  59.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #3 en: Lunes 29 de Noviembre de 2010, 17:49 »
0
Todos los nuevos en C caen en el mismo problema  :P

Código: C
  1. char * ruta_archivo;
  2.  
Aquí estás declarando un puntero a una cadena de caracteres, PERO no reservas memoria para ello. Por tanto tienes 0 espacio para tus caracteres. Tienes que hacer algo como

Código: C
  1. char ruta_archivo[256];
  2.  
Para reservar memoria para 255 caracteres, o bien usar malloc() (y free()) para reservar memoria dinámicamente.

De todas formas no necesitas char* para nada. Usa string, es mucho más cómodo.

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #4 en: Lunes 29 de Noviembre de 2010, 17:54 »
0
Hola, al final declaro un string (ruta), se lo paso a la funcion y hago:

ifstream Puntos_Muestra (ruta.c_str());

Pero el problema persiste, es decir, parece que abre el archivo, pero es como si reconociera el nombre y que está ahí pero sin embargo no sigue ejecutando sentencias...

PD: lo de reservar memoria sí me había dado cuenta pero más tarde, la verdad q era un fallo técnico algo grave :P jejeje

Gracias por dedicarme tiempo eh? l verdad es que me corre algo de prisa y por mas vueltas que le doy no consigo dar con el error :S

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #5 en: Lunes 29 de Noviembre de 2010, 18:25 »
0
Ya encontré un error, el archivo si se abre, lo que no sucede es que se lea su contenido... me explico

Código: C++
  1. ifstream Puntos_Muestra (route.c_str());
  2.  
  3.         if (Puntos_Muestra.is_open())
  4.         {
  5.             cout << "hola" << endl;
  6.             float x;
  7.             Puntos_Muestra >> x;
  8.             cout << x;
  9.            
  10.         }      
  11.         // Se comprueba que el fichero se ha abierto correctamente
  12.         //if (!Puntos_Muestra)
  13.         else
  14.         {
  15.             cout << endl << endl;
  16.             cout << "No se pudo abrir el fichero. No existe o la ruta no es valida.";
  17.             cout << endl << endl;
  18.             exit(1);
  19.         }
  20.  

hola se imprime, pero X no...

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #6 en: Lunes 29 de Noviembre de 2010, 20:25 »
0
Al final sí se leían los número, pero no se mostraban........... Es decir, se leen si hago esto:

Código: C++
  1. if (Puntos_Muestra.is_open())
  2.         {
  3.             cout << "Hello" << endl;
  4.             float x;
  5.             Puntos_Muestra >> x;
  6.  
  7.             cout << x;        ----------------------> asi NO se muestran los numeros
  8.                         cout << x << endl; ------------------> asi SI se muestran
  9.         }
  10.  

Alguien sabe a qué se debe esto? Porque en teoria tendrían que mostrarse igualmente :S

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #7 en: Lunes 29 de Noviembre de 2010, 22:18 »
0
Puede ser que endl hace que se vacíe el buffer y se "empujen" los datos a la salida.

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Error Codigo!! Urge !! Problema al Leer Archivo !!
« Respuesta #8 en: Lunes 29 de Noviembre de 2010, 23:00 »
0
Sí, era eso.. porque probé a hacer un cout.flush() al final de las sntencias y funciona.... GRACIAS !!!