Bonjour,

j'ai un problème, je veux faire un petit programme qui va lire un texte et baliser chaque pronom personnel rencontré dans le texte de balises <pp></pp>.

Pour ce faire, j'ouvre mon fichier test.txt qui contient le fichier texte à traiter, et je crée un fichier hey.xml qui va contenir le texte formaté (avec les balises).

Tant qu'on est pas arrivé à la fin du fichier test.txt :

tant que le caractère donné par getc n'est pas un espace ou saut de ligne, on copie ce caractère dans un tableau motlu.

On copie enfin le tableau motlu dans le tableau temp, et on convertit en minuscule les caractères present dans le tableau temp.

On compare le mot présent dans le tableau temp à notre base de données (qui contient tous les pronoms personnels du français), si le mot du tableau temp est contenu dans la base, donc si on a enregistré un pronom personne, on ecrit la balise <pp> dans notre fichier xml, suivit des données du tableau motlu (j'ecris les données du tableau motlu et non ceux du tableau temp car je veux conserver les majuscules du texte), et je mets la variable ok à 1 pour indiquer que le mot a bien été balisé.

Si ok vaut 0 , donc qu'il ne faut pas baliser le mot car on ne l'a pas trouvé dans la base de donnée, alors on l'ecrit directement à la suite dans le fichier xml.


Voilà comment fonctionne mon programme.

Le problème est que quand j'execute mon programme et que je lis le fichier xml, il y a bcp de mots qui sont recopiés, en gros si dans mon fichier test.txt il y a par exemple : "Ceci est juste un test." il y aura dans mon fichier xml un truc du style : "Ceci estci juste unte test."

Bref, je pense que lorsque j'enregistre les caratères dans mon tableau il enregistre en même temps des trainées en mémoire et je ne comprend pas comment cela se fait, car après chaque mot ecrit, j'utilise la fonction bzero à mon tableau.

Si qqn aurait une idée...

Merci d'avance

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
void liremot(FILE *fichier,FILE *fichier2,char *motlu,int *finfichier,char base_donnee[][5]);
 
int main (void) {
 
  FILE *fichier=NULL;
  FILE *fichier2=NULL;
 
  char *motlu;
  char base_donnee[18][5]={"je","tu","il","elle","on","nous","vous","ils","elles"};
  int finfichier=0;
 
  motlu=(char *)malloc(30*sizeof(char));
 
  fichier=fopen("test.txt","r+");
  fichier2=fopen("hey.xml","w+");
 
  if(fichier2==NULL)
    {
      printf("Erreur lors de la creation du fichier\n");
      exit(0);
    }
 
  if(fichier==NULL) 
    {
      printf("Erreur lors de l'ouverture du fichier\n");
      exit(0);
    }
  else
    {
      while(!finfichier)
	{
	  liremot(fichier,fichier2,motlu,&finfichier,base_donnee);
	  bzero(motlu,sizeof(motlu));
	}
    }
 
  fclose(fichier);
  fclose(fichier2);
 
  return 0;
}
 
void liremot(FILE *fichier,FILE *fichier2,char *motlu,int *finfichier,char base_donnee[][5]) {
 
  char car_lu=' ';
  int i=0,ok=0;
  char *temp;
 
  temp=(char *)malloc(30*sizeof(char));
 
  while((car_lu=getc(fichier))!=' ' && car_lu!='\n') 
    {
      if(car_lu==EOF)
	{
	  *finfichier=1;
	  return;
	}
      else
	{
	  motlu[i]=car_lu;
	  i++;
	}
    }
 
  for(i=0;i<30;i++)
    {
      temp[i]=motlu[i];
      if(isalpha(temp[i]))
	temp[i]=tolower(temp[i]);
    }
 
  for(i=0;i<18;i++)
    {
      if(strcmp(temp,base_donnee[i])==0)
	{
	  fputs("<pp>",fichier2);
	  fprintf(fichier2,"%s",motlu);
	  fputs("</pp> ",fichier2);
	  ok=1; /* ok vaut 1 lorsque le mot a été balisé, si il vaut 0, on ecrit le mot directement sans le baliser*/
	  break;
	}
    }
  if(!ok)
    fprintf(fichier2,"%s ",motlu);
}