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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 6,391 veces)
ZedGe

Desconectado Desconectado

Mensajes: 154


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

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: 1.639


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

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
  1. while (fscanf(fichero, "%s", lineas) == 1){
  2.   ptrToken = strtok(lineas, "," );
  3.  
  4.   i = 0;
  5.   while (ptrToken != NULL){
  6.      strcpy(dato[i],ptrToken);
  7.      i++;
  8.      ptrToken = strtok(NULL, "," );
  9.   }
  10. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ZedGe

Desconectado Desconectado

Mensajes: 154


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

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: 210



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

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 en C++ al leer archivo .txt « 1 2 »
Programación C/C++
javier_SL 10 13,348 Último mensaje 21 Junio 2011, 00:54 am
por Danyel_Casvill
Problema al leer archivo en Java
Java
thekill01 1 2,671 Último mensaje 27 Mayo 2012, 03:02 am
por [Case]
Problema al leer un archivo binario en C
Programación C/C++
the_jocker 5 5,454 Último mensaje 13 Agosto 2012, 01:37 am
por CSQCasimiro
problema con leer e interpretar txt
Programación C/C++
arthu16 3 2,717 Último mensaje 12 Septiembre 2013, 18:50 pm
por eferion
problema al leer gauss desde un archivo
Programación C/C++
Idmus 1 2,034 Último mensaje 14 Noviembre 2013, 19:36 pm
por Idmus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines