diff --git a/correcteur.c b/correcteur.c new file mode 100644 index 0000000..0dc154f --- /dev/null +++ b/correcteur.c @@ -0,0 +1,156 @@ +/** + * correcteur.c + * + * + */ + +#include + +#include +#include +// Permet d'utiliser EXIT_FAILURE et non exit(1) +// EXIT_FAILURE est plus portable +#include + +#include "dictionnaire.h" + +// Choix du dictionnaire par default +#define DICTIONNAIRE_DEF "words" + +int main(int argc, char* argv[]) +{ + // Verification du nombre d'arguments + if (argc != 2 && argc != 3) + { + printf("Utilisation: correcteur [fichier_dictionnaire] texte\n"); + return EXIT_FAILURE; + } + + // Determine le dictionnaire à utiliser + char* nom_dict = (argc == 3) ? argv[1] : DICTIONNAIRE_DEF; + + // Charge le dictionnaire + bool est_charge = importer_dict(nom_dict); + + + // Verification de l'importation du dictionnaire + if (!est_charge) + { + printf("Erreur lors de l'importation du dictionnaire %s.\n", nom_dict); + return EXIT_FAILURE; + } + + + // Ouverture du texte + char* text = (argc == 3) ? argv[2] : argv[1]; + FILE* fp = fopen(text, "r"); + // Vérifie si l'ouverture est possible + if (fp == NULL) + { + printf("Erreur lors de l'ouverture du fichier %s.\n", text); + decharger(); + return 1; + } + + printf("\nMots malorthographiés\n\n"); + int nb_malorthographie; + int nb_mots; + print_erreurs(fp, &nb_malorthographie, &nb_mots); + + // Vérifie que la lecture s'est terminée sans erreurs + if (ferror(fp)) + { + fclose(fp); + printf("Erreur lors de la lecture du fichier %s.\n", text); + decharger(); + return 1; + } + + // Fermeture du fichier + fclose(fp); + + + + if (!decharger()) + { + printf("Erreur lors de la liberation memoire%s.\n", nom_dict); + return 1; + } + + // On affiche les informations sur les mots + printf("\nMots malorthographiés: %d\n", nb_malorthographie); + printf("Mots dans le dictionnaire: %d\n", taille_dic()); + printf("Mots dans le texte: %d\n", nb_mots); + + return 0; +} + +void print_erreurs(FILE *fp, int *malorthographies, int *mots) +{ + (*malorthographies) = 0; + (*mots) = 0;// initialisation des variables + int index = 0; + char mot[LONG_MAX+1]; + + // Verification de l'orthographe + int nb_mots_ligne = 0; + for (int c = fgetc(fp); c != EOF; c = fgetc(fp)) + { + // On ne traite que les caracteres et les apostrophes + if (isalpha(c) || (c == '\'' && index > 0)) + { + // Ajout du caractere dans le mot temporaire en construction + mot[index] = c; + index++; + + // On annule la verification du mot s'il depasse la limite + if (index > LONG_MAX) + { + // On passe le reste du mot + while ((c = fgetc(fp)) != EOF && isalpha(c)); + + // Reinitialisation du mot temporaire + index = 0; + } + } + + // On ignore les mots avec des chiffres + else if (isdigit(c)) + { + // On passe le reste du mot + while ((c = fgetc(fp)) != EOF && isalnum(c)); + + // Reinitialisation du mot temporaire + index = 0; + } + + // On prend un mot en entier + else if (index > 0) + { + // fin d'un mot + mot[index] = '\0'; + + // On incremente le compteur + (*mots)++; + + // Vérifie si le mot est bien orthographie + bool malorthographie = !appartient(mot); + + + // On affiche les mots mal orthographies + if (malorthographie) + { + printf("%s\n", mot); + if (nb_mots_ligne == 2) { + printf("\n"); + nb_mots_ligne = 0; + } + (*malorthographies)++; + } + + // On passe au mot suivant + index = 0; + } + } +} + -- libgit2 0.21.2