I. Introduction▲
Dans certains projets, il peut être nécessaire d'extraire des données depuis un fichier. Que ce soit une liste de contacts,
des données pour remplir des tableaux ou pour des tableurs, des options utilisateurs, etc... Ce tutoriel va vous expliquer
les bases pour lire différents formats et en extraire les données.
Dans un premier temps (Chapitre III), nous allons voir comment créer un fichier avec une structure appropriée au stockage d'une liste de
contacts pour par exemple, un programme de gestion de contacts. Dans le Chapitre IV nous verrons comment lire des fichiers de type INI et en extraire les données suivant
leur type (entiers, chaînes de caractères). Nous finirons par le format CSV au Chapitre V.
Le format XML (eXtended Markup Langage) ne sera pas traité ici, un tutoriel lui est entièrement consacré dans le tutoriel suivant : Utilisation de la bibliothèque libxml2 en C
II. Pré-requis▲
Quelques pré-requis sont indispensables pour les chapitres à suivre. Des fonctions que tout le monde devrait avoir constamment sous le coude, voici celles indispensables pour ce tutoriel et qui traitent des chaînes de caractères :
static
char
*
str_dup (
const
char
*
str)
{
char
*
dup =
NULL
;
if
(
str !=
NULL
)
{
size_t size =
strlen (
str) +
1
;
dup =
malloc (
size);
if
(
dup !=
NULL
)
{
memcpy (
dup, str, size);
}
}
return
dup;
}
Cette fonction permet de copier simplement une chaîne de caractères. Le nouveau pointeur retourné par la fonction doit
explicitement être libéré avec la fonction standard free.
La seconde fonction indispensable dans ce tutoriel permet de terminer une chaîne de caractères avec un zéro de fin de chaîne,
ce qui n'est pas toujours le cas surtout dans des chaînes extraites d'un fichier :
static
void
str_finalize (
char
*
str)
{
char
*
p =
strchr (
str, '
\n
'
);
if
(
p !=
NULL
)
{
*
p =
0
;
}
}
Cette fonction recherche un éventuel saut de ligne et le remplace par un zéro terminal. Les sauts de ligne sont surtout présents lorsqu'on récupère des lignes de texte à partir d'un fichier mais les fonctions standards attendent un zéro de fin de chaîne.