SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: pacorubio77 en Sábado 7 de Junio de 2008, 13:53

Título: Problema En Lectura De Ficheros
Publicado por: pacorubio77 en Sábado 7 de Junio de 2008, 13:53
Antes que nada,tengo el siguiente registro;
typedef struct Talumno{
    char dni[10];
    string nombre;
    string apellidos;
    string cantidad;
};

Hola,tengo una duda,tengo un fichero texto.txt de la siguiente forma

4707744389 Julian Maritnez 200

y yo quiero leer esto ,y asignar a cada campo de mi alumno,y no se como hacerlo?


pues yo hago mi main

int main(){
Talumno alumno;
   
    fstream fic;

    fic.open("bancos.txt",ios::in);
    if(!fic){
       cout<<"error de apertura del fichero"<<endl;
    }
    else{
          //yo creo que tengo que leerlo asi
          fic.read((char *),&alumno,sizeof(Talumno));
        //pero cuando compruebo si leo algo o si yo quiero que ese alumno que he leido escribirlo en otro fichero no me sale bien


    }


}

Mi pregunta es como yo puedo leerlo bien,es decir leer el alumno correctamente, y otra pregunta,como escribir ese alumno en otro fichero.por ejemplo texto2.txt??

Os agradecería mucho vuestra ayuda.Gracias
Título: Re: Problema En Lectura De Ficheros
Publicado por: ProfesorX en Sábado 7 de Junio de 2008, 22:02
El problema es que  fic.read es para leer los datos en formato binario, y como los datos estan en formato texto, es la razon del fallo, debes leer/escribir en formato texto. Si ademas quieres guardarlo en otro archivo, debes abrir otro archivo, pero en modo escritura, a continuacion te dejo la manera correcta de leer/escribir en formato texto con fstream:

Código: Text
  1.  
  2. #include &#60;string&#62;
  3. #include &#60;iostream&#62;
  4. #include &#60;fstream&#62;
  5. #include &#60;cstdlib&#62;
  6.  
  7. using namespace std;
  8.  
  9. struct Talumno{
  10.   char dni[11];
  11.   string nombre;
  12.   string apellidos;
  13.   string cantidad;
  14. };
  15.  
  16. int main()
  17. {
  18.   Talumno alumno;
  19.   string linea;
  20.  
  21.   fstream fic1;
  22.   fstream fic2;
  23.  
  24.   // Lectura
  25.   fic1.open(&#34;bancos.txt&#34;, ios::in);
  26.   // Escritura
  27.   fic2.open(&#34;bancos2.txt&#34;, ios::out);
  28.   if(!fic1)
  29.   {
  30.     cout &#60;&#60; &#34;error de apertura del fichero&#34; &#60;&#60; endl;
  31.   }
  32.   else
  33.   {
  34.     // Lees
  35.     fic1 &#62;&#62; alumno.dni &#62;&#62; alumno.nombre &#62;&#62; alumno.apellidos &#62;&#62; alumno.cantidad;
  36.     // Escribes
  37.     fic2 &#60;&#60; alumno.dni &#60;&#60; &#34; &#34; &#60;&#60; alumno.nombre &#60;&#60; &#34; &#34; &#60;&#60; alumno.apellidos &#60;&#60; &#34; &#34; &#60;&#60;alumno.cantidad;
  38.   }
  39.  
  40.   fic1.close();
  41.   fic2.close();
  42.  
  43.   system(&#34;pause&#34;);
  44.   return 0;
  45. }
  46.  
  47.  
  48.  

Nota como al escibir dejo espacios entre cada variable, de esa forma se conserva el espacio, porque si no, al escribir en el segundo archivo, estaria todo junto.

Saludos :hola:
Título: Re: Problema En Lectura De Ficheros
Publicado por: fachamix en Domingo 8 de Junio de 2008, 00:14
no probe el codigo que has dado en tu solucion ProfesorX , porke soy medio vago.

pero, hace poko yo tenia el mismo problema que el amigo, e intente lo que vos propones y tampoco me funciono, por eso te pregunto si has probado ese codigo, porke yo hacia lo ke vos propones y naranja, segui dandome cualkier cosa.


despues poniendome a analizar , yo pensaba que el error era el siguiente:

*al declarar una estructura con campos String.

Pues yo pensaba que por esta razon no podia leer correctamente, pues el String es de tamaño "variable" y asi el programa nunca iva a saber hasta donde leer.
pues usaba el sizeof que siempre iva a variar.

Si has probado tu codigo y funciona, quiere decir que yo estaba errado en mi suposicion , sino , hacemelo saber, porke capaz que tenga que instalar de nuevo este compilador che.
Título: Re: Problema En Lectura De Ficheros
Publicado por: ProfesorX en Domingo 8 de Junio de 2008, 00:39
Cita de: "fachamix"
Si has probado tu codigo y funciona, quiere decir que yo estaba errado en mi suposicion , sino , hacemelo saber, porke capaz que tenga que instalar de nuevo este compilador che.
Si, este codigo lo probe y funciona, si te fijas, el amigo no puso el codigo completo, yo lo acomplete con lo que faltaba, eso si el archivo bancos.txt debe de existir antes de ejecutar el programa, porque primero lee y luego escribe. Lo compile y ejecute con Visual C++ Express 2008, no lo probe con mingw, pero debe de funcionar tambien.

Saludos :hola:
Título: Re: Problema En Lectura De Ficheros
Publicado por: fachamix en Miércoles 11 de Junio de 2008, 03:03
cual es la regla general a la hora de leer ????

si estoy leyendo algo y lo guardo en un string, se va a leer hasta que se encuentreun espacio ?????? es decir, por mas que sea un string no voy a poder leer en nombre algo como "Juan Martin" , por los espacios digo.


tengo esa inquietud