Lire une ligne d'un fichiers en C
Date de publication : 19 Mars 2005 , Date de mise à jour : 10 Aout 2005
Par
Nicolas Joseph (home)
Cette fonction a pour but de lire la prochaine ligne du flux de sortie et de la placer dans une zone de mémoire allouée dynamiquement dont l'adresse est stockée dans la variable .
En cas d'erreur, la fonction retourne la valeur EXIT_FAILURE. Si le la fichier du fichier est atteinte, est mis à NULL et la fonction retourne EXIT_FAILURE.
getNextLine.h | #ifndef H_NJ_GETNEXTLINE_1903052321
#define H_NJ_GETNEXTLINE_1903052321
#include <stdio.h>
#define skipNextLine(file) getNextLine ((file), NULL)
int getNextLine (FILE *stream, char **pp_line);
#endif /* not H_NJ_GETNEXTLINE_1903052321 */ |
getNextLine.c | #include <stdlib.h>
#include "getNextLine.h"
int getNextLine (FILE *stream, char **pp_line)
{
int ret = EXIT_SUCCESS;
if (stream)
{
int end = 0;
char *line = NULL;
size_t size = 1;
int i = 0;
while (ret == EXIT_SUCCESS && end == 0)
{
int c = fgetc (stream);
switch (c)
{
case EOF:
if (feof (stream))
{
if (pp_line && !line)
{
*pp_line = NULL;
ret = EXIT_FAILURE;
}
end = 1;
}
else
{
ret = EXIT_FAILURE;
}
break;
default:
if (pp_line)
{
if (i == size - 1)
{
void *tmp = NULL;
size <<= 1;
tmp = realloc (line, sizeof (*line) * size);
if (tmp)
{
line = tmp;
}
else
{
free (line);
line = NULL;
ret = EXIT_FAILURE;
}
}
if (line)
{
if (c == '\n')
{
end = 1;
}
else
{
line[i] = c;
i++;
}
}
}
break;
}
}
if (pp_line && line)
{
line[i] = '\0';
*pp_line = line;
}
}
else
{
ret = EXIT_FAILURE;
}
return (ret);
} |
Voic un exemple d'utilisation de cette fonction dans une boucle pour lire l'intégralité d'un fichier :
char *p_line = NULL;
FILE *file = fopen (...);
while (getNextLine (file, &p_line) && p_line)
{
...
free (p_line);
p_line = NULL;
} |
 
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2006 Nicolas Joseph.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|