elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Lectura última línea
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Lectura última línea  (Leído 3,182 veces)
javahat

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Lectura última línea
« en: 30 Septiembre 2010, 07:16 am »

Hola tengo un archivo txt con nombre y apellido con el sgte formato:

Juan|Perez
Lola|Sazo
Miguel|Torres

y cuando los quiero leer(recuperar) no me lee el ultimo nombre del archivo por ejemplo me lee correctamente juan perez y lola sazo pero miguel torres no lo muestra, aquí está el código gracias.


Código
  1. fscanf(archivo,"%[a-z]|%[a-z]|\n",usuario[i].nombre,usuario[i].apellido);
  2.  
  3. while(!feof(archivo)){
  4.  
  5.  
  6.  
  7.            printf("Nombre:%s\n",usuario[i].nombre);
  8.            printf("Apellido:%s\n",usuario[i].apellido);
  9.  
  10.    i++;
  11.    fscanf(archivo,"%[a-z]|%[a-z]|\n",usuario[i].nombre,usuario[i].apellido);
  12.  
  13.     }
  14.  
  15. fclose(archivo);




En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Lectura última línea
« Respuesta #1 en: 30 Septiembre 2010, 07:25 am »

Trata cambiando el while por un do{}while();


En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Lectura última línea
« Respuesta #2 en: 30 Septiembre 2010, 11:54 am »

feof, por si solo, es ineficiente para comprobar el final de un archivo. O bien repetís una lectura al final o alguna te va a faltar. Lo explique en varios hilos, pero basicamente feof no te devuelve el dato correcto cuando alcanzas el final de un archivo, lo hace cuando ya lo pasaste. Usa el buscador que en otros hilos lo he explicado en detalle.

Lo ideal es usar feof sumado al valor de retorno de la función de lectura que estés utilizando, igualmente si lo primero que tenes que hacer en un ciclo es la lectura, te podes ahorrar feof completamente.

Igualmente, el tipo de lectura que estas utilizando, es propensa a errores y obsoleta. Realmente te recomendaría que leas en un buffer y luego parsees el contenido.

Te pongo un ejemplo básico:

Código
  1. while (fgets(buffer,sizeof buffer ,archivo) != NULL)
  2. {
  3. charptr=strtok (buffer,"|");
  4.  while (charptr != NULL)
  5.  {
  6.    strncpy(usuario[i].nombre, buffer, sizeof usuario[i].nombre);
  7.    strncpy(usuario[i].apellido, charptr, sizeof usuario[i].apellido);
  8.    charptr=strtok (NULL, "|");
  9.  }
  10. printf("Nombre: %s \nApellido: %s\n\n",usuario[i].nombre,usuario[i].apellido);
  11. i++;
  12. }

Por supuesto lo ideal seria que antes valides el contenido, luego hagas el parseo, y obviamente que cada tarea la dividas en funciones, pero eso ya queda que lo hagas vos.

El código lo codifique directo en el post y no lo he probado, así que ante cualquier error, avísame por acá u por pm.

Referencias:

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines