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í:
#include <stdio.h>
#include <stdlib.h>
#define NOM_ENTRADA "alumno.csv"
struct alumno {
char nombre[30];
char apellido[30];
char materia[30];
int edad;
};
int main(void)
{
FILE *entrada;
int ch;
struct alumno a;
int num_lineas;
if ((entrada
= fopen(NOM_ENTRADA
, "r")) == NULL
){ return EXIT_FAILURE;
}
num_lineas = 0;
while((ch
= fgetc(entrada
)) != EOF
) if (ch == '\n')
num_lineas++;
while (fscanf(entrada
, " %[^,],%[^,],%[^,],%d", a.
nombre, a.
apellido, a.
materia, &a.edad) == 4)
{
/* "a" contiene la informacion del nodo leido, se procesa en alguna forma ... */
printf("%s\n%s\n%s\n%d\n\n", a.
nombre, a.
apellido, a.
materia, a.
edad); }
/* ... */
return EXIT_SUCCESS;
}
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