Calcule le nombre d'occurrences d'une lettre passée en paramètre dans un fichier, recherche sensible à la casse
#include "t_bool.h" #include "file_tools.h" #include <stdlib.h> #include <stdio.h> #include <string.h> /* Nom du fichier temporaire. */ #define TEMP_FILE "example.txt" /* Liste, non exhaustive, de delimiteurs */ #define DELIM " *§:/;!.,?&~<>{([|])}\"\\+=" /* ------------------------------------------------------- file_tools_nbr_letter ------------------------------------------------------- Trouve le nombre d'occurences d'une lettre dans un fichier (acces direct). Recherche sensible a la casse. ------------------------------------------------------- arg : Fichier a lire. arg : Lettre a retrouver. return: Nombre d'occurences de la lettre, -1 en cas d'erreur. ------------------------------------------------------- */ int file_tools_nbr_letter (char const * const s_filename, char const c_letter) { FILE * p_file = NULL; char * s_line = NULL; int ret = -1; int cpt = 0; /* ----- Verification des arguments ----- */ if (!s_filename) { /* Erreur: arguments incorrects. */ return -1; } /* ----- */ /* ----- Ouverture du fichier a lire ----- */ p_file = fopen (s_filename, "r"); if (!p_file) { /* Erreur: impossible d'ouvrir le fichier. */ return -1; } /* ----- Allocation du buffer temporaire ----- */ s_line = malloc (BUFSIZ); if (!s_line) { /* Erreur: impossible d'allouer l'espace requis. */ fclose (p_file); return -1; } /* ----- Parcours du fichier ----- */ while (fgets (s_line, BUFSIZ, p_file)) { /* Parcours de la ligne recuperee. */ size_t i = 0; for (i = 0; i < strlen (s_line); i++) { /* Recherche des occurences de la lettre. */ if (s_line[i] == c_letter) { cpt++; } } /* On efface le buffer. */ memset (s_line, 0, sizeof (s_line)); } /* On transmet la valeur du compteur a la variable de retour. */ ret = cpt; /* Fermeture du fichier. */ fclose (p_file); /* Liberation du buffer temporaire. */ free (s_line); s_line = NULL; return ret; }
Vous pouvez retrouver cette fonction ainsi que toutes les autres fonctions de la catégorie Fichier dans l'archive file_tools.zip.
L'archive comprends les fichiers suivants :
- example1.txt et example2.txt deux fichiers utilisés par la méthode main.
- t_bool.h : déclaration du type booléen.
- file_tools.h et file_tools.c : déclaration et implémentation des fonctions de la catégorie Fichier.
- main.c : fonction permettant et mettant en œuvre l'ensemble des fonctions Fichier.
Exécution
$gcc main.c file_tools.c -o filetools $chmod +x filetools $./filetools