Advanced Programming Workshop: Text Files
Ce cours explique l'utilisation des fichiers textes en langage C. Il détaille l'utilisation des fonctions d'écriture et de lecture comme fprintf, fscanf, fputs et fgets à travers des exemples pratiques.
D'après le document Advanced Programming Workshop: Text Files
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source
Programming in C · PDF · 5 pages · 2011
Afficher l'aperçu du document
Ce cours de programmation avancée traite de la manipulation des fichiers textes en langage C. Il détaille la création, le remplissage et l’affichage de fichiers textes contenant des structures de données complexes, notamment à l'aide des fonctions fprintf, fscanf, fputs et fgets.
Structures de données et ouverture de fichiers texte
La gestion structurée des informations repose sur la définition préalable de types personnalisés en C, tels que la date et la fiche étudiant.
DATE: contient les champsjour,moisetannee.ETUDIANT: contient le code étudiantce, le tableaunom[20], la date de naissancedate_naisset la moyennemoy.
Pour ouvrir un fichier texte en mode lecture et écriture, on utilise la fonction ouverture :
void ouverture (FILE **fp)
{
char nf[20];
printf("saisir nom fichier");
gets(nf);
*fp = fopen(nf, "wt+");
}
Remplissage d’un fichier texte avec des données d’étudiants
Le remplissage d'un fichier texte s'effectue via l'écriture formatée de variables en mémoire.
- La première variante s'appuie sur la fonction
saisir_etudiant, qui renvoie la valeur 0 pour interrompre la saisie lorsque le code saisi est égal à -1. - La seconde variante gère la boucle de saisie directement dans la fonction principale de remplissage.
Dans les deux approches, l'écriture des données dans le fichier s'effectue avec fprintf selon un format prédéfini :
fprintf(fp, "%5d %20s %2d %2d %4d %5.2f\n", etd.ce, etd.nom, etd.date_naiss.jour, etd.date_naiss.mois, etd.date_naiss.annee, etd.moy);
Affichage du contenu d’un fichier texte
La lecture séquentielle d'un fichier texte préserve la mise en forme initiale des données enregistrées.
void affichage_fichier(FILE *fp)
{
ETUDIANT etd;
while(1)
{
fscanf(fp, "%d%s%d%d%d%f", &etd.ce, etd.nom, &etd.date_naiss.jour, &etd.date_naiss.mois, &etd.date_naiss.annee, &etd.moy);
printf("\n le ce est: %5d, le nom est %20s, la date de naissance est %2d / %2d / %4d, et la moyenne est %5.2f \n",
etd.ce, etd.nom, etd.date_naiss.jour, etd.date_naiss.mois, etd.date_naiss.annee, etd.moy);
if(feof(fp)) break;
}
}
Fonctions fputs et fgets pour la gestion des chaînes de caractères
Les fonctions fputs et fgets facilitent le traitement direct des lignes et chaînes de caractères sans formatage complexe.
La fonction fputs écrit une chaîne dans un flux sans ajouter automatiquement de saut de ligne :
fputs(s, fp);écrit la chaînesdans le fichier désigné par le pointeurfp.- Elle retourne une valeur non négative en cas de succès, ou la constante
EOFen cas d’erreur. - Trois appels successifs à
fputs("bonjour", fp);écrivent la chaîne "bonjourbonjourbonjour" sur une seule ligne. - Pour insérer un saut de ligne, il convient d'utiliser
fprintf(fp, "%s\n", s);.
La fonction fgets permet de lire une chaîne de caractères depuis un fichier :
fgets(s, n, fp);lit au plus n - 1 caractères dans le tampons, en incluant le caractère de fin de ligne\nsi celui-ci est rencontré.- Elle renvoie l’adresse de la chaîne lue ou le pointeur
NULLen cas d’erreur ou de fin de fichier. - Un caractère nul de fin de chaîne
\0est automatiquement ajouté à la suite des caractères lus.
Programme complet de gestion d’un fichier texte d’étudiants
L'exemple ci-dessous illustre l'écriture et la lecture de lignes complètes représentées sous forme de chaînes de caractères dans un fichier texte.
void remplir(FILE *fp)
{
int val;
char ch[100];
while(1)
{
printf("saisir un étudiant: ce, nom, date naissance, moyenne \n");
gets(ch);
if(*ch == '0') break;
val = fputs(ch, fp);
if(val == EOF) printf("erreur d'écriture");
fputs("\n", fp);
}
}
void afficher(FILE *fp)
{
char ch[100];
rewind(fp);
while(fgets(ch, 100, fp))
puts(ch);
}
La seconde version de la fonction afficher extrait les données d'une ligne lue avec fgets vers la structure ETUDIANT au moyen de la fonction sscanf :
void afficher(FILE *fp)
{
char ch[100];
ETUDIANT etd;
rewind(fp);
while(fgets(ch, 100, fp))
{
sscanf(ch, "%d%s%d%d%d%f", &etd.ce, etd.nom, &etd.date_naiss.jour, &etd.date_naiss.mois, &etd.date_naiss.annee, &etd.moy);
printf("ce:%d nom:%s jour:%d mois:%d annee:%d moy:%5.2f\n",
etd.ce, etd.nom, etd.date_naiss.jour, etd.date_naiss.mois, etd.date_naiss.annee, etd.moy);
}
}
Programme principal
La fonction main orchestre l'ouverture du fichier, la saisie des données, le repositionnement du pointeur de fichier via rewind, la lecture et la fermeture du flux.
void main()
{
FILE *fp;
ouverture(&fp);
remplir(fp);
rewind(fp);
afficher(fp);
fclose(fp);
}
Points clés
- Les fichiers textes sont manipulés avec
fprintf,fscanf,fputsetfgetspour l'écriture et la lecture de données formatées ou de chaînes. - La structure
ETUDIANTpermet de regrouper les informations individuelles, incluant une sous-structure pour la date de naissance. fputsn'ajoute pas de caractère de fin de ligne\nlors de l'écriture dans un fichier.fgetspréserve le caractère de fin de ligne\net termine la chaîne lue par un caractère nul\0.- La fonction
rewindréinitialise le pointeur de position au début du fichier pour permettre une lecture immédiatement après l'écriture.
Commentaires
Aucun commentaire pour le moment. Posez la première question.