¿Qué método se puede usar para leer una línea a la vez de un archivo en C?
estoy usando el fgets función, pero no funciona. Solo lee el token separado por espacios.
¿Qué hacer?
Mahesh Gupta
¿Qué método se puede usar para leer una línea a la vez de un archivo en C?
estoy usando el fgets función, pero no funciona. Solo lee el token separado por espacios.
¿Qué hacer?
rekha_sri
Use el siguiente programa para obtener línea por línea de un archivo.
#include <stdio.h>
int main ( void )
{
char filename[] = "file.txt";
FILE *file = fopen ( filename, "r" );
if (file != NULL) {
char line [1000];
while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ {
fprintf(stdout,"%s",line); //print the file contents on stdout.
}
fclose(file);
}
else {
perror(filename); //print the error message on stderr.
}
return 0;
}
lucas
Esto debería funcionar, cuando no puedes usar fgets()
por alguna razón.
int readline(FILE *f, char *buffer, size_t len)
{
char c;
int i;
memset(buffer, 0, len);
for (i = 0; i < len; i++)
{
int c = fgetc(f);
if (!feof(f))
{
if (c == '\r')
buffer[i] = 0;
else if (c == '\n')
{
buffer[i] = 0;
return i+1;
}
else
buffer[i] = c;
}
else
{
//fprintf(stderr, "read_line(): recv returned %d\n", c);
return -1;
}
}
return -1;
}
Gracias, amigo, está funcionando, pero todavía tengo un problema.
– Mahesh Gupta
3 de marzo de 2010 a las 16:36
Eso es extraño, solo puedo usar printf("%s\n", buffer);
y genera todo el búfer
– LucasN
3 de marzo de 2010 a las 16:38
sí, es extraño para mí también. porque estaba funcionando para todos los programas anteriores… :'(
– Mahesh Gupta
3 de marzo de 2010 a las 16:48
¿Está seguro de que su archivo no contiene ningún terminador de cadena?
– LucasN
3 de marzo de 2010 a las 16:52
Si está programando para una plataforma que tiene disponible la biblioteca GNU C, puede usar getline():
Esa función también está disponible en sistemas BSD, solo para información;)
– José L. Patiño
28 de julio de 2013 a las 9:03
jaredpar
los fgets
función leerá una sola línea de un archivo o num
personajes donde num
es el segundo parámetro pasado a fgets
. ¿Está pasando un número lo suficientemente grande como para leer la línea?
Por ejemplo
// Reads 500 characters or 1 line, whichever is shorter
char c[500];
fgets(c, 500, pFile);
contra
// Reads at most 1 character
char c;
fgets(&c,1,pFile);
mike ñame
Esto es más un comentario que una respuesta completa, pero no tengo suficientes puntos para comentar. 🙂
Aquí está el prototipo de función para fgets():
char *fgets(char *restrict s, int n, FILE *restrict stream);
Leerá n-1 bytes o hasta una nueva línea o eof. Para más información ver aquí
didier trosset
fgets()
debería ser el camino a seguir…
Andrei
utilizar cualquiera fgets
si sabe que sus líneas caben en el búfer o usan fgetc
para un mayor control sobre la lectura
Entonces, ¿realmente no quiere leer una línea, quiere leer hasta que se encuentre un espacio? ¿O estás diciendo que fgets se detiene en espacios en lugar de saltos de línea?
–Eric Petroelje
3 de marzo de 2010 a las 16:06
debe detenerse solo en el carácter de nueva línea.
– Mahesh Gupta
3 de marzo de 2010 a las 16:21
Aquí está mi entrada:: START A DC 10 B DS 20 STOP Obtuve:: START AB STOP como mi salida..
– Mahesh Gupta
3 de marzo de 2010 a las 16:21