elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:53  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problema Al leer Archivo En C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema Al leer Archivo En C  (Leído 366 veces)
ZedGe

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Problema Al leer Archivo En C
« en: 22 Enero 2012, 06:20 »

Tengo el siguiente codigo que lee un fichero, con datos separados por coma

EJ:

Juanito,Perez,15,Cancer,Si,5,Si,21.01.2012,Si
Anita,Lava,1,Resfrio,No,5,Si,01.01.2011,No

Código:
#include <stdlib.h>
#include <stdio.h>


int cargarTXT()
{
       FILE *fichero;
      char nombre[30];
     

      system("cls");//Se borra la pantalla
      printf("\n\t\t%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176);
      printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176);
      printf("\n\t\t%c                                                 %c",176,176);
      printf("\n\t\t%c                                                 %c",176,176);
      printf("\n\t\t%c      Ingrese Nombre Del Fichero A Cargar:       %c",176,176);
      printf("\n\t\t%c                                                 %c",176,176);
      printf("\n\t\t%c                                                 %c",176,176);
      printf("\n\t\t%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176);
      printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176);
      printf("\n\n");
      scanf("\t\t\t\t\t\t%s",nombre);

      fichero = fopen(nombre,"r");

      if (fichero == NULL){
      printf("No Se Pudo Abrir El Fichero");
      return 0;
      }
   

      char *ptrToken;      //Variable que permite guardar dato entre las comas
      int i=0;
      int j=0;
     char lineas[800];
     char dato[8][8000];
 

    while( !feof(fichero) )  //En caso de leerlo y hasta no llegar al final se ahce esto
{
fscanf( fichero, "%s",lineas);
ptrToken = strtok(lineas, "," ); //Se re-lee la linea hasta encontrar una ',' y se guarda lo leido
        i=0;
while ( ptrToken != NULL ) //Si lo leido hasta una , no es nulo o no hay nada
  {
      strcpy(dato[i],ptrToken);
      i++; //Se aumenta el auxiliar i
      ptrToken = strtok(NULL, "," ); //Se obtiene el siguiente token y se sigue en el while
  }
}
   menu();
   fclose(fichero);
}


El problema es que al imprimir los datos lee el ultimo dato de la ultima linea nuevamente, y no se por que.... con una linea funciona.. con 2 no



En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Problema Al leer Archivo En C
« Respuesta #1 en: 22 Enero 2012, 07:23 »

Un error en el programa y, supongo, causa del comportamiento que mencionas es el uso de la función "feof". Salvo contados escenarios se debe evitar el uso de ella en favor del valor de retorno de la función utilizada.

En tu caso fscanf retornara 1 mientras pueda leer una palabra y EOF en caso de error o fin de archivo. Cambia el bucle a:
Código
while (fscanf(fichero, "%s", lineas) == 1){
  ptrToken = strtok(lineas, "," );
 
  i = 0;
  while (ptrToken != NULL){
     strcpy(dato[i],ptrToken);
     i++;
     ptrToken = strtok(NULL, "," );
  }
}

Un saludo


En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
ZedGe

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Problema Al leer Archivo En C
« Respuesta #2 en: 22 Enero 2012, 11:03 »

ok muchas gracias =D.....

otra pregunta hay alguna forma de leer el fichero y retornar la cantidad de lineas sin saber el max total de estas ni su largo??

es decir un fichero con 50 caracteres por linea  123 lineas retornara 123

ese mismo fichero pero con 10 caracteres y  123123123 lineas retorne 123123123


ya que como lei yo le asigne un max de 8000... lo que si tengo solo 10 lineas es un gasto de memoria
En línea
Xandrete

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Problema Al leer Archivo En C
« Respuesta #3 en: 22 Enero 2012, 11:27 »

ok muchas gracias =D.....

otra pregunta hay alguna forma de leer el fichero y retornar la cantidad de lineas sin saber el max total de estas ni su largo??

es decir un fichero con 50 caracteres por linea  123 lineas retornara 123

ese mismo fichero pero con 10 caracteres y  123123123 lineas retorne 123123123


ya que como lei yo le asigne un max de 8000... lo que si tengo solo 10 lineas es un gasto de memoria

Cuenta los saltos de línea ('\n') y súmale 1. Por ejemplo.

Saludos
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al leer linea archivo txt [Solucionado]
Programación Visual Basic
skapunky 2 491 Último mensaje 16 Octubre 2008, 13:59
por cobein
Problema al escribir y leer un archivo txt
Programación C/C++
miiso 4 1,966 Último mensaje 17 Noviembre 2009, 09:28
por tragantras
Problema al leer un archivo XML (Solucionado)
.NET
Zeroql 3 1,282 Último mensaje 12 Julio 2010, 15:31
por Zeroql
Problema en C++ al leer archivo .txt
Programación C/C++
javier_SL 10 1,327 Último mensaje 21 Junio 2011, 00:54
por danyhack
Problema al leer archivo en Java
Programación General
thekill01 1 31 Último mensaje 27 Mayo 2012, 03:02
por [Case]
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines