FSCANF |
Balayage avec format dans le fichier |
---|---|
Langage C | 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 d'effectuer la lecture de texte suivant un certain format dans un fichier.
Algorithme
MODULE FSCANF(stream, format, ...variables) SI stream est NULL ALORS RETOURNE erreur "Fichier non valide" FIN SI SI format est NULL ALORS RETOURNE erreur "Chaîne de format invalide" FIN SI Initialiser un compteur de succès à 0 * pour compter les éléments correctement lus BOUCLE POUR CHAQUE spécificateur dans la chaîne de format FAIRE SI le spécificateur est valide (par exemple, %d, %f, %s,...) ALORS Lire l'entrée du fichier associée au spécificateur SI la lecture échoue ou si le format ne correspond pas ALORS RETOURNE le nombre de succès jusqu'à ce point (certaines lectures peuvent réussir avant une erreur) FIN SI SINON Passer ce caractère du format sans faire d'action, jusqu'à ce que le format soit respecté FIN SI FIN BOUCLE POUR CHAQUE RETOURNE le nombre de succès (éléments correctement lus) |
Remarques
- Lecture formatée avec fscanf : La fonction fscanf permet de lire des données d'un fichier avec un format spécifié, en interprétant les types de données définis dans la chaîne de format. Cette approche permet d'extraire directement différents types de données (comme des entiers, des flottants ou des chaînes de caractères) à partir d'un fichier texte, ce qui en fait une solution efficace pour traiter des données formatées.
- Utilisation des spécificateurs de format dans fscanf : fscanf utilise les mêmes spécificateurs de format que scanf, tels que %d pour les entiers, %f pour les flottants et %s pour les chaînes de caractères. La flexibilité de cette syntaxe permet de lire des lignes complexes de données en une seule instruction, simplifiant le code pour les formats structurés. Toutefois, le format doit correspondre précisément aux données du fichier pour éviter des erreurs de lecture.
- Gestion des espaces blancs : fscanf ignore automatiquement les espaces, tabulations et nouvelles lignes avant la lecture d'un entier ou d'un flottant, mais pas pour les chaînes de caractères (%s). Pour lire des chaînes de caractères avec espaces, il est donc nécessaire d'utiliser d'autres solutions, comme fgets. Cela en fait une option limitée pour des données avec des espaces intégrés.
- Retour et vérification des erreurs : fscanf retourne le nombre d'éléments correctement lus et assignés, ce qui permet de vérifier si la lecture s'est déroulée comme prévu. Si le nombre retourné est inférieur au nombre d'éléments attendus, cela signifie qu'il y a eu une erreur ou que le fichier a été atteint prématurément. Il est donc recommandé de vérifier le retour pour gérer les erreurs ou les EOF.
- Vulnérabilité aux erreurs de format : Comme fscanf repose sur des formats de données précis, toute déviation du format attendu dans le fichier peut causer des erreurs. Par exemple, lire un caractère là où un entier est attendu produit des résultats indéterminés, voire un plantage du programme. Ainsi, fscanf est fiable uniquement si le format de données est strictement connu et respecté.
- Compatibilité avec différents types de fichiers : fscanf est particulièrement adapté pour les fichiers texte structurés et bien définis, mais moins approprié pour des fichiers non structurés ou binaires. Pour les fichiers binaires ou avec des structures plus complexes, il est souvent préférable d'utiliser fread, fonctionnant directement sur les données en octets.
- Gestion de la position de lecture : À chaque appel de fscanf, le curseur de lecture dans le fichier est automatiquement avancé selon les données lues. Cela permet une lecture séquentielle sans gestion manuelle du curseur. Toutefois, dans certains cas, il peut être utile de repositionner le curseur avec fseek ou fsetpos pour lire à nouveau certaines données ou gérer des erreurs de lecture.
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 :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
-
- 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);
- printf("Entier = %i\n",Entier);
- printf("Réel = %f\n",Reel);
- printf("Chaine de caractères = %s\n",Chaine);
- 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.