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)
| | |-+  Contar nuemero de lineas de un fichero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Contar nuemero de lineas de un fichero  (Leído 14,411 veces)
Cas980

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Contar nuemero de lineas de un fichero
« en: 17 Abril 2014, 23:26 pm »

Estoy escribiendo un código usando ficheros, necesito saber cuantas lineas tiene el archivo para almacenar el espacio correspondiente. ¿¿como puedo contar el numero de lineas usando el fscanf??


A partir de ahí tengo que separar la informacion y guardarla en la estructura.
en el archivo tengo algo como esto
Código:
daniela,castillo,biologia,15
carlos,cervantes,fisica,14
diego,garcia,quimica,16

Algun consejo para hacerlo?? tenia pensado dividirlo usando la funcion strtok y despues ir copiando a cada variable pero aun no se muy bien como plantearlo.

 


Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4.  
  5. struct alumno
  6. {
  7.       char nombre[30];
  8.       char apellido[30];
  9.       char materia[30];
  10.       int edad;
  11. }; struct alumno reg*;
  12.  
  13.  
  14. int main()
  15. {
  16.     FILE *ptr;
  17.     char c[80];
  18.     char *b;
  19.     int x=0;
  20.  
  21.     ptr=fopen("alumno.csv","r+");
  22.  
  23.     while(!feof (ptr))
  24.     {
  25.            fscanf(ptr,"%[^\n]s",&c);
  26.            x++;
  27.     }
  28.  
  29.     reg=(struct alumno*)malloc(x*sizeof(struct alumno));
  30.     rewind(ptr);
  31.  
  32.     printf("numero de filas: %i",x);
  33.  
  34.      .
  35.      .
  36.      .
  37.      .
  38.      .
  39.      .
  40.      .
  41.      .
  42.      .    
  43.  
  44.     getch();
  45. }


« Última modificación: 18 Abril 2014, 23:34 pm por Cas980 » En línea

xoker

Desconectado Desconectado

Mensajes: 24



Ver Perfil WWW
Re: Contar nuemero de lineas de un fichero
« Respuesta #1 en: 17 Abril 2014, 23:59 pm »

Tienes varias opciones, una poco eficiente seria contar el numero de '\n' que hay en el fichero mirando uno a uno cada caracter y cada vez que el caracter sea igual a '\n' sumas 1 en un contador.

Otra opcion es contar el numero de lineas, esta opcion es mas eficiente, en este video se explica exactamente como contar las lineas de un fichero:



Esta al comienzo! Espero que te sirva, un saludo.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Contar nuemero de lineas de un fichero
« Respuesta #2 en: 18 Abril 2014, 00:33 am »

Estoy escribiendo un código usando ficheros, necesito saber cuantas lineas tiene el archivo para almacenar el espacio correspondiente. ¿¿como puedo contar el numero de lineas usando el fscanf??
Para conocer el numero de lineas en el archivo de texto lo mas fácil y sencillo es leer su contenido carácter por carácter, el numero de lineas esta dado por el numero de caracteres igual a '\n'.

Y si la estructura del archivo de entrada esta garantizado (tres palabras y un entero por linea separados entre si por comas) entonces puedes leer su contenido directamente con fscanf. Mas o menos así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NOM_ENTRADA  "alumno.csv"
  5.  
  6. struct alumno {
  7.   char nombre[30];
  8.   char apellido[30];
  9.   char materia[30];
  10.   int edad;
  11. };
  12.  
  13. int main(void)
  14. {
  15.   FILE *entrada;
  16.   int ch;
  17.   struct alumno a;
  18.   int num_lineas;
  19.  
  20.   if ((entrada = fopen(NOM_ENTRADA, "r")) == NULL){
  21.      perror(NOM_ENTRADA);
  22.      return EXIT_FAILURE;
  23.   }
  24.  
  25.   num_lineas = 0;
  26.   while((ch = fgetc(entrada)) != EOF)
  27.      if (ch == '\n')
  28.         num_lineas++;
  29.  
  30.   rewind(entrada);
  31.   while (fscanf(entrada, " %[^,],%[^,],%[^,],%d", a.nombre, a.apellido, a.materia,
  32.      &a.edad) == 4)
  33.   {
  34.      /* "a" contiene la informacion del nodo leido, se procesa en alguna forma ... */
  35.      printf("%s\n%s\n%s\n%d\n\n", a.nombre, a.apellido, a.materia, a.edad);
  36.   }
  37.   fclose(entrada);
  38.  
  39.   /* ... */
  40.  
  41.   return EXIT_SUCCESS;
  42. }

Pero si cualquier campo contiene espacios (por ejemplo un nombre como "Jose Maria") o la estructura de la linea es ligeramente mas complicada hay que cambiar la aproximación y utilizar fgets para obtener una linea y strtok para extraer cada uno de los campos.

Por ultimo deberías evitar el uso de la biblioteca conio de Borland, convertir al tipo apropiado el valor de retorno de malloc y utilizar la función feof para controlar la lectura del archivo. Mas información relacionada en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Contar las lineas de un RichTextBox
Programación Visual Basic
Hendrix 0 1,683 Último mensaje 5 Septiembre 2006, 22:54 pm
por Hendrix
Contar lineas TextBox multiline
Programación Visual Basic
Hendrix 3 7,251 Último mensaje 12 Septiembre 2006, 10:25 am
por txomin
Contar Lineas y Leer Fichero
Java
<<<-Basura->>> 5 21,911 Último mensaje 29 Noviembre 2012, 23:00 pm
por HalconEye
Contar carácteres de un fichero a través de un Hilo.
Java
Didy 2 2,676 Último mensaje 7 Junio 2013, 13:13 pm
por Didy
[Pregunta]: Contar saltos de lineas de una cadena (PHP)
PHP
Leguim 4 6,417 Último mensaje 4 Diciembre 2019, 16:14 pm
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines