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
file_tools.zip