Commit 0e62ceb149de528a6d278ea5c9e85a0cbd4ad8ac
1 parent
8c1065af
Code propre
Showing
5 changed files
with
87 additions
and
23 deletions
Show diff stats
doc.txt
lib.txt
... | ... | @@ -8,24 +8,39 @@ |
8 | 8 | |
9 | 9 | int main(int argc, char *argv[]) |
10 | 10 | { |
11 | + init_pgrm(); | |
11 | 12 | Node tree = NULL; |
12 | 13 | int error = 0; |
13 | 14 | FILE* fp_lib; |
14 | 15 | FILE* fp_txt; |
16 | + | |
17 | + if(argc < 3) | |
18 | + { | |
19 | + printf("Le nombre d'arguments est incorrect. Veuillez réessayer.\n"); | |
20 | + return EXIT_FAILURE; | |
21 | + } | |
22 | + | |
15 | 23 | fp_lib = fopen(argv[argc-2], "r"); |
16 | 24 | fp_txt = fopen(argv[argc-1], "r"); |
17 | 25 | |
26 | + if(fp_lib==NULL || fp_txt==NULL) | |
27 | + { | |
28 | + printf("Erreur de lecture d'un des fichiers passés en paramètres.\n"); | |
29 | + return EXIT_FAILURE; | |
30 | + } | |
31 | + | |
18 | 32 | init_tree(&tree); |
19 | 33 | read_lib(fp_lib, &tree); |
20 | - read_txt(fp_txt, &tree, &error); | |
34 | + read_txt(fp_txt, &tree, &error, fp_txt); | |
21 | 35 | |
22 | 36 | // printf("%p\n", tree); |
23 | 37 | |
24 | 38 | //print_first(tree); |
25 | 39 | //printf("\n"); |
26 | 40 | //print_tree(tree, 0); |
27 | - | |
28 | - printf("erreurs : %d\n", error); | |
41 | + | |
42 | + if(error<2) printf("Dans le texte %s, %d mot n'est pas dans le dictionnaire %s.\n", argv[argc-1], error, argv[argc-2]); | |
43 | + else printf("Dans le texte %s, %d mots ne sont pas dans le dictionnaire %s.\n", argv[argc-1], error, argv[argc-2]); | |
29 | 44 | |
30 | 45 | free_tree(&tree); |
31 | 46 | fclose(fp_lib); | ... | ... |
... | ... | @@ -102,7 +102,7 @@ char max_index(char word[]) |
102 | 102 | return index; |
103 | 103 | } |
104 | 104 | |
105 | -void scan_word(Node Tree, char word[], int* error) // si un mot démarre juste après un caractère de fin, la fonction ne lit pas les mots séparément | |
105 | +void scan_word(Node Tree, char word[], int* error, FILE* fp_txt) // si un mot démarre juste après un caractère de fin, la fonction ne lit pas les mots séparément | |
106 | 106 | { |
107 | 107 | bool endWord = false; |
108 | 108 | bool stop = false; |
... | ... | @@ -124,8 +124,7 @@ void scan_word(Node Tree, char word[], int* error) // si un mot démarre juste a |
124 | 124 | } |
125 | 125 | else |
126 | 126 | { |
127 | - printf("mot : %s erreur :%c %d \n", word, word[ind], word[ind]); | |
128 | - (*error)++; | |
127 | + add_error(error, word, ind, Tree, fp_txt); | |
129 | 128 | //printf("%d\n", ind); |
130 | 129 | ind = max_index(word); |
131 | 130 | //printf("%d\n", ind); |
... | ... | @@ -135,11 +134,38 @@ void scan_word(Node Tree, char word[], int* error) // si un mot démarre juste a |
135 | 134 | } |
136 | 135 | if(!endWord && !stop) |
137 | 136 | { |
138 | - (*error)++; | |
139 | - printf("---%s---\n", word); | |
137 | + add_error(error, word, ind, Tree, fp_txt); | |
140 | 138 | } |
141 | 139 | } |
142 | 140 | |
141 | +void add_error(int* error, char word[], int index, Node Tree, FILE* fp_txt) | |
142 | +{ | |
143 | + (*error)++; | |
144 | + if(index==0) | |
145 | + { | |
146 | + printf("Le mot %s ne correspond à aucun mot du dictionnaire.\n\n", word); | |
147 | + return; | |
148 | + } | |
149 | + else if(index<strlen(word)) | |
150 | + printf("Il y a une erreur dans le mot '%s', au caractère %c d'incide %d.\n\n", word, word[index], index); | |
151 | + else | |
152 | + printf("Il manque au moins une lettre au mot '%s'.\n\n", word); | |
153 | + make_correction(word, index, Tree, fp_txt); | |
154 | +} | |
155 | + | |
156 | +void make_correction(char word[], int index, Node Tree, FILE* fp_txt) | |
157 | +{ | |
158 | + return; | |
159 | +} | |
160 | + | |
161 | +void init_pgrm(void) | |
162 | +{ | |
163 | + printf("\n------------------------------------------\n"); | |
164 | + printf("Correcteur ortographique.\n"); | |
165 | + printf("Normand Quentin & Rouillé Guillaume.\n"); | |
166 | + printf("------------------------------------------\n\n"); | |
167 | +} | |
168 | + | |
143 | 169 | bool no_accent(char word[]) |
144 | 170 | { |
145 | 171 | int index_max = max_index(word); |
... | ... | @@ -148,17 +174,18 @@ bool no_accent(char word[]) |
148 | 174 | return true; |
149 | 175 | } |
150 | 176 | |
151 | -void read_txt(FILE* fp, Node* Tree, int* error) | |
177 | +void read_txt(FILE* fp, Node* Tree, int* error, FILE* fp_txt) | |
152 | 178 | { |
153 | 179 | char word[MAX]; |
154 | 180 | while(1) |
155 | 181 | { |
156 | 182 | if(fscanf(fp, "%s", word)!=1) |
157 | 183 | break; |
158 | - scan_word(*Tree, word, error); | |
184 | + if(no_accent(word)) // !!! MOTS AVEC ACCENTS NON PRIS EN COMPTE | |
185 | + scan_word(*Tree, word, error, fp_txt); | |
159 | 186 | } |
160 | - if(feof(fp)) printf("Fin normale de lecture fichier.\n"); | |
161 | - if(ferror(fp)) printf("Erreur de lecture fichier.\n"); | |
187 | + if(feof(fp)) printf("Fin de la lecture du fichier à scanner.\n\n"); | |
188 | + if(ferror(fp)) printf("Erreur lors de la lecture du fichier à scanner.\n\n"); | |
162 | 189 | } |
163 | 190 | |
164 | 191 | void read_lib(FILE* fp, Node* Tree) |
... | ... | @@ -173,10 +200,11 @@ void read_lib(FILE* fp, Node* Tree) |
173 | 200 | if(no_accent(word)) |
174 | 201 | add_in_tree(*Tree, word); |
175 | 202 | } |
176 | - if(feof(fp)) printf("Fin normale de lecture bibliothèque.\n"); | |
177 | - if(ferror(fp)) printf("Erreur de lecture bibliothèque.\n"); | |
203 | + if(feof(fp)) printf("Fin de la lecture de la bibliothèque.\n\n"); | |
204 | + if(ferror(fp)) printf("Erreur lors de la lecture de la bibliothèque.\n\n"); | |
178 | 205 | } |
179 | 206 | |
207 | + | |
180 | 208 | void print_tree(Node Tree, int index) |
181 | 209 | { |
182 | 210 | if(is_empty_tree(Tree)) | ... | ... |
... | ... | @@ -8,6 +8,7 @@ |
8 | 8 | #include <stdio.h> |
9 | 9 | #include <stdlib.h> |
10 | 10 | #include <stdbool.h> |
11 | +#include <string.h> | |
11 | 12 | #define MAX 30 // taille maximale d'une chaîne lue dans un fichier |
12 | 13 | #define NB_CARAC 27 // nombre de caractères différents pouvant être identifiés -> 89 avec accentués |
13 | 14 | |
... | ... | @@ -43,13 +44,13 @@ bool is_end_caract(char letter); |
43 | 44 | char max_index(char word[]); |
44 | 45 | |
45 | 46 | // Détermine si le mot 'word' est présent dans l'arbre indexé |
46 | -void scan_word(Node Tree, char word[], int* error); | |
47 | +void scan_word(Node Tree, char word[], int* error, FILE*); | |
47 | 48 | |
48 | 49 | // Retourne 'true' si le mot 'word' est non accentué, 'false' sinon |
49 | 50 | bool no_accent(char word[]); |
50 | 51 | |
51 | 52 | // Transmet les mots du texte à analyser à 'scan_word' |
52 | -void read_txt(FILE* fp, Node* Tree, int* error); | |
53 | +void read_txt(FILE* fp, Node* Tree, int* error, FILE*); | |
53 | 54 | |
54 | 55 | // Transmet les mots de la biliothèque à 'add_in_tree' |
55 | 56 | void read_lib(FILE* fp, Node* Tree); |
... | ... | @@ -66,3 +67,11 @@ void print_first(Node Tree); |
66 | 67 | // Libère l'espace mémoire associé à l'arbre indexé |
67 | 68 | void free_tree(Node* Tree); |
68 | 69 | |
70 | +// Ajoute une erreur | |
71 | +void add_error(int*, char*, int, Node, FILE*); | |
72 | + | |
73 | +// Corrige les erreurs | |
74 | +void make_correction(char *, int, Node, FILE*); | |
75 | + | |
76 | +// Initialise le programme | |
77 | +void init_pgrm(void); | ... | ... |