FSCANF |
Balayage avec format dans le fichier |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
int fscanf(FILE *ptrfichier,const *format,...) |
Paramètres
Nom | Description |
---|---|
ptrfichier | Ce paramètre permet d'indiquer l'identificateur de fichier |
format | Ce paramètre permet d'indiquer le format des informations à traiter |
Description
Cette fonction permet la lecture de texte suivant un certain format dans un fichier.
Remarques
- La fonction fscanf() fonctionne exactement comme la fonction scanf(), sauf qu'elle lit les informations du flux de données spécifié par ptrfichier au lieu de stdin (l'entrée standard).
- La fonction fscanf() renvoie le nombre de paramètres des valeurs réellement affectées. Ce nombre n'inclut pas les champs ignorés. Une valeur de retour EOF signifie qu'une défaillance s'est produite avant la première affectation.
- Lecture formatée depuis un fichier : La fonction fscanf permet de lire des données formatées depuis un fichier, de manière similaire à scanf, mais en utilisant un FILE* comme source. Cela permet de traiter des fichiers texte contenant des valeurs bien structurées, comme des fichiers CSV ou des fichiers de configuration.
- Gestion des espaces et des fins de ligne : fscanf ignore les espaces et les retours à la ligne lorsqu'il lit des valeurs, sauf pour %c lisant exactement un caractère, y compris les espaces. Pour éviter ce problème, on peut utiliser " %c" (avec un espace avant %c) pour ignorer les espaces avant un caractère.
- Retour du nombre de valeurs lues : fscanf retourne le nombre d'éléments correctement extraits du fichier. Il est recommandé de toujours vérifier cette valeur pour éviter des erreurs de lecture :
- Lecture d'une ligne complète avec fgets et sscanf : fscanf n'est pas toujours adapté pour lire une ligne entière avec des espaces. Une meilleure approche consiste à utiliser fgets pour lire la ligne, puis sscanf pour extraire les valeurs :
- Gestion de la fin de fichier (EOF) : fscanf retourne EOF lorsqu'il atteint la fin du fichier ou en cas d'erreur. Une boucle de lecture doit donc inclure une vérification comme :
- Limitations et alternatives : fscanf ne gère pas bien les erreurs d'entrée (exemple : mauvais format, dépassement de tampon), il ne lit pas les lignes contenant des espaces de manière intuitive et pour des entrées plus robustes, std::ifstream en C++ est souvent préférable :
Cela permet d'éviter des comportements indéfinis en cas d'entrée incorrecte.
Cela évite des erreurs liées aux fins de ligne mal gérées.
Mais attention, si le format ne correspond pas, fscanf peut retourner un nombre inférieur à celui attendu sans nécessairement atteindre EOF.
Exemple
Prenons pour acquis que le fichier «readtext.txt» est le contenu :
16, 19.74, gladir.comVoici un exemple montrant une utilisation plus classique de cette fonction :

- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
-
- int main()
- {
- FILE * Handle = fopen("readtext.txt", "r");
- if(Handle != NULL) {
- int Entier;
- float Reel;
- char Chaine[255];
- fscanf(Handle,"%i,%f,%s",&Entier,&Reel,&Chaine);
- std::cout << "Entier = " << Entier << std::endl;
- std::cout << "Réel = " << Reel << std::endl;
- std::cout << "Chaine de caractères = " << Chaine << std::endl;
- fclose(Handle);
- }
- return 0;
- }
on obtiendra le résultat suivant :
Entier = 16Réel = 19.740000
Chaine de caractères = gladir.com
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - atof
Langage de programmation - C++ - Référence de procédures et fonctions - fprintf
Langage de programmation - C++ - Référence de procédures et fonctions - printf
Langage de programmation - C++ - Référence de procédures et fonctions - scanf
Langage de programmation - C - Référence de procédures et fonctions - fscanf
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 732.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 113.