• Sábado 14 de Diciembre de 2024, 20:36

Autor Tema:  Problema En Lectura De Ficheros  (Leído 1713 veces)

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Problema En Lectura De Ficheros
« en: Sábado 7 de Junio de 2008, 13:53 »
0
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

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema En Lectura De Ficheros
« Respuesta #1 en: Sábado 7 de Junio de 2008, 22:02 »
0
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:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

fachamix

  • Miembro MUY activo
  • ***
  • Mensajes: 173
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Lectura De Ficheros
« Respuesta #2 en: Domingo 8 de Junio de 2008, 00:14 »
0
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.
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema En Lectura De Ficheros
« Respuesta #3 en: Domingo 8 de Junio de 2008, 00:39 »
0
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:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

fachamix

  • Miembro MUY activo
  • ***
  • Mensajes: 173
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Lectura De Ficheros
« Respuesta #4 en: Miércoles 11 de Junio de 2008, 03:03 »
0
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
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA