Calcule le nombre d'occurrences d'un mot passé 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_word ------------------------------------------------------ Trouve le nombre d'occurences d'un mot dans un fichier (acces direct). Recherche sensible a la casse. ------------------------------------------------------ arg : Fichier a lire. arg : Mot a retrouver. return: Nombre d'occurences du mot, -1 en cas d'erreur. ---------------------------------------------------- */ int file_tools_nbr_word (char const * const s_filename, char const * const s_word) { FILE * p_file = NULL; char * s_line = NULL; char * p_temp = NULL; char * p_temp_word = NULL; int ret = -1; int cpt = 0; /* ----- Verification des arguments. */ if (!s_filename || !s_word) { /* Erreur: arguments invalides. */ 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)) { /* Recherche du nombre d'occurence du mot dans la ligne recuperee. */ p_temp = s_line; while ((p_temp_word = strtok (p_temp, DELIM)) != NULL) { /* Comparaison du mot de la chaine */ if (strcmp (p_temp_word, s_word) == 0) { cpt++; } p_temp = NULL; } /* 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; p_temp_word = 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