• Viernes 8 de Noviembre de 2024, 04:18

Autor Tema:  Lectura De Archivo  (Leído 3485 veces)

Goselito_0

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Lectura De Archivo
« en: Jueves 12 de Junio de 2008, 14:09 »
0
Hola, aqui estoy de nuevo, de duda en duda...

La duda es la siguiente:
Creo el archivo:          
fstream fichout(nom_arch.c_str(), ios::out);
(lo manipulo y lo cierro)    
fichout.close()

Al leerlo utilizo el bucle:
while (!fichout.eof())
()

Añado la libreria <fstream.h>
En la mamipulacion no esta el error puesto que he utilizado un bucle "for" para probarlo y funciona, el error creo que esta en que no encuentra el final del archivo correctamente y me da error de memoria, ¿estoy pasando algo por alto?

Gracias de nuevo.

sonGoku

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #1 en: Viernes 13 de Junio de 2008, 11:08 »
0
pon un poco más de código sobre como abres el fichero, y lees datos.

Saludos

Goselito_0

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #2 en: Viernes 13 de Junio de 2008, 13:01 »
0
Sigo sin encontrar el fallo    :(    Cuando me salta el error se abre "stdlib.h"
Código: Text
  1.   fstream fich(nomb_arch.c_str(), ios::in);
  2.  
  3.   if (!fich.is_open())
  4.         ShowMessage(&#34;El fichero no existe o no pudo abrirse correctamente!!&#34;);
  5.   else
  6.         {
  7.         // LEEMOS UNA LINEA DEL FICHERO ABIERTO:
  8.  
  9.         // Nos situamos en el comienzo del archivo
  10.         fich.seekg(0);
  11.  
  12.         // Extraemos la primera linea, se leen los titulos de cabecera &#34;Id. Bloque&#34; &#34;Fila&#34; &#34;Columna&#34;...
  13.         fich.getline(salida,100);
  14.  
  15.  
  16.         for(i= 1; i&#60; 10; i++) //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  17.         //while(fich.eof()== false)
  18.                 {
  19.                 // Extraemos la segunda linea
  20.                 fich.getline(salida,100);
  21.  
  22.                 // Asignamos valores al &#34;elem&#34; y lo guardamos en la lista_arch
  23.  
  24.                 // Leemos el id. bloque (tipo char)
  25.                 p= strtok(salida, &#34;;&#34;);
  26.                 elem.inform.Ident= p;
  27.                 // Leemos la fila (int)
  28.                 p= strtok(NULL, &#34;;&#34;);
  29.                 d= atoi(p);
  30.                 elem.inform.fila= d;
  31.                 ...
  32.  
  33.                 lista_arch.Insertar_pos(lista_arch.Longitud()+1, elem);
  34.                 }
  35.         fich.close();
  36.         }
  37.  

Goselito_0

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #3 en: Viernes 13 de Junio de 2008, 20:13 »
0
¿Es posible que el fallo este en el uso de la funcion "atoi"?
Cuando me sale el error se abre la libreria stdlib.h y se marca la siguiente linea:

Código: Text
  1.    inline int _RTLENTRY atoi(const char *__s) { return (int)atol(__s); }
  2.  

¿Hay alguna otra forma de pasar de char a int?

Gracias de nuevo.

TRod

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: mx
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #4 en: Viernes 13 de Junio de 2008, 22:22 »
0
Te recomiendo que agregues una excepción (try/catch) y verificar que datos esta leyendo.

Elforious

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #5 en: Sábado 14 de Junio de 2008, 18:35 »
0
Para pasar de char a int, tambien está la funcion "StrToInt(<cadena>);", que funciona igual que atoi().

Espero que te sirva.

Goselito_0

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #6 en: Domingo 15 de Junio de 2008, 13:06 »
0
Con "StrToInt" tambien me da error de memoria.

¿Tendrá algo que ver que el archivo sea un ".csv" abierto con Excel? ¿Quizas por esto no funciones correctamente la funcion .eof()?

AnimaSubtilis

  • Miembro MUY activo
  • ***
  • Mensajes: 172
  • Nacionalidad: co
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #7 en: Lunes 16 de Junio de 2008, 16:01 »
0
Claro que la StrToInt da error puesto que esta comvierte es de AnsiString a Int mas no char...

lo que se podria hacer seria lo siguiente

AnsiString temp;

temp=p;
d=StrToInt(temp);

 :P Bueno eso es lo que pienso yo.........

espero que sirva de algo... :whistling:

Chaitosss... :hola:
A menudo unas pocas horas de «prueba y ensayo» podrán ahorrarte minutos de leer manuales.
[size=150]
Dios nos Otorgo el uno y el cero....y con eso creamos un universo....[/size]

[size=109]↑°°°°ÄNÍMÄ §ÛBTÍLͧ°°°°↓[/size]


Goselito_0

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #8 en: Lunes 16 de Junio de 2008, 17:14 »
0
Sigue dando error de memoria   :(

Bueno este miércoles iré a hablar con el tutor de mi proyecto a ver que me cuenta.

Muchas gracias a todos por la colaboración, si diera con la solución la comento.

Goselito_0

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Lectura De Archivo
« Respuesta #9 en: Miércoles 18 de Junio de 2008, 17:05 »
0
Por fin he dado con la solución!!
La comento por si a alguien le sirviera:

Código: Text
  1.   if (!fich.is_open())
  2.         ShowMessage(&#34;El fichero no existe o no pudo abrirse correctamente!!&#34;);
  3.   else
  4.         {
  5.         fich.seekg(0);
  6.  
  7.         fich.getline(salida,100);
  8.  
  9.         while(fich.eof()== false)
  10.                 {
  11.  
  12.                 fich.getline(salida,100);
  13.  
  14.                 if(!fich.eof()) // FALTABA ESTA COMPROBACION!!!!!!!!!!
  15.                         {
  16.                         p= strtok(salida, &#34;;&#34;);
  17.                         elem.inform.Ident= p;
  18.                         ...
  19.  

El final del archivo puede encontrarse al principio de una nueva linea, entonces fich.getline() puede intentar leer una linea donde lo primero que aparezca sea el fin del archivo y por lo tanto intentará leer datos a los que no puede acceder, de ahí el error de memoría.
No se si me habré explicado mu bien, un saludo y hasta la próxima.