Rechercher un mot

cs_adeline93 Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005 - 24 mai 2005 à 14:45
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009 - 31 mai 2005 à 19:32
bonjour
je débute en langage c et j'ai un projet à rendre pouvez vous m'aider ???
voici mon sujet:
rechercher un mot dans une page html (hors balise) par exemple sur google et le mettre en gras ou en couleur lorsqu'il est trouvé
merci d'avance

7 réponses

cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
24 mai 2005 à 20:23
Salut !

Essais d'être plus précis(e) dans la déscription de ton problème : est-ce que les données se trouvent dans un fichier, est-ce que tu doit créer un fichier pour le résultat, si oui dans quel format ? ...

@+ Neria
0
cs_adeline93 Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005
24 mai 2005 à 21:47
en fait je doi faire la recherche sur une page google


je ne doi rien créer de plus

l'utilisteur recherche un mot sur google et ce mot doi safficher en gras ou italique ou couleur ... dans les réponses trouvées c'est tout
merci beaucoup
0
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
25 mai 2005 à 08:47
Tu utilises quel contrôle pour faire ça ? Parce que sinon il y a toujours moyen de récupérer la page affichée et de la modifier. Sinon, je n'ai pas vraiment de solutions...
0
cs_adeline93 Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005
30 mai 2005 à 22:03
pourriez vous voir si avec ce programme ca peu marcher ou sil manque des choses ??
merci beaucoup

#include <stdio.h>
#include <string.h>

main() {
int x=0;
int lgmot;
int lghtml;
int testmot=0;
char html[1200]; // c'est la chaine de caractère dans laquelle on
copie le fichier lu dans l'entrée standart
char temp[300]="";
char rouge[40]="contentait"; // chaîne qui va
copier
char mot[]="contentait"; // mot sert de référence pour la
comparaison des chaines
int i;
int test=0;
lgmot=strlen(mot); // récupère dans lgmot la longueur de la chaine
mot
*html=getchar(); // permet d'initialiser la première valeur de la
chaine html[0]
while ((*(html+x)) != EOF) { // cette boucle permet de lire le
fichier en entrée standart EOF signifis End Of File.
x=x+1;
*(html+x)=getchar();

}
*(html+x)='\0'; // rajoute '\0' Ã la fin de la chaine html: une
chaine se finit tjrs par le caractère \0 qui signifie la fin
x=0;
lghtml=strlen(html); // récupère ds lghtml la longueur de la chaîne
html
while (test == 0) {
if ((strncmp(mot,html+x,lgmot))==0) { // compare les chaînes de
caractères à la longueur de lgmot
test=1; // lorsqu'un mot est trouvé: la boucle s'arrête
testmot=1;
strcat(temp,html+x+lgmot); // copie toute la chaine html apres le mot
trouvé dans la chaine temp
strcpy(html+x,rouge); // met la chaine rouge à la position x dans la
chaine html
strcpy(html+x+20+lgmot,temp); // copie temp à html
}
if (x == lghtml) {
test=1;
printf("Pas de mot dans la page html\n");
}
x=x+1;
}

if (testmot==1) printf("%s\n",html);
//printf("%s\n",html);

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
31 mai 2005 à 15:37
Salut !


Ton algorithme semble correct, bien que la saise de la page html soit un peu bizarre (tout saisir à la main...). Enfin il y a quand même un problème, c'est que la recherche s'arrête lorsque tu trouve la première occurence, hors je pense qu'il peut y en avoir plusieurs dans la page.
Je te propose un algo qui devrait fonctionner (il n'y a que la partie recherche) :


void main() {
int i, precedent=0, precedent2=0 ;
char html2[2000] ;


// Initialise tous html2 à 0
FillMemory(html2, 2000, 0) ;

// Parcours toute la chaine html
for (i=0; i<lghtml; i++) {
// Si un mot est trouvé
if (!strncmp((html+i), mot, lgmot))
{
// Copie tous les bloc qui précède ce mot depuis la dernière copie
memcpy((html2+precedent2), html+i, (i-precedent)) ;
// Copie le mot entouré des balises
memcpy((html2+precedent2+i), "", 21) ;
memcpy((html2+precedent2+i+21), mot, lgmot) ;
memcpy((html2+precedent2+i+21+lgmot, "", 8) ;
// Met à jour la dernière copie
precedent=i ; // Pointeur dans html
precedent2+= 29 + lgmot ; // Pointeur dans html2
}
}


// Il faut répéter la dernière opération
memcpy((html2+precedent2), html+precedent, (i-precedent)) ;


// Si on a trouvé une occurence
if (!precedent)
printf("Pas d'occurence de %s trouvée dans la page\n", mot) ;
}


Bien sur il peut être encore améliorer, il faudrait enlever cet affreux char html2[2000] et faire un tableau dynamique qui se redimensionne à chaque ajout.
on pourrait aussi utiliser une classe CSS2 dans la balise FONT afin que l'on puisse modifier dynamiquement l'affichage des mots trouvés sans avoir besoin de tout re coder.
Un autre conseil : quand tu déclare une chaine évite de faire :
char rouge[40]="contentait";
et fait plutot :
char rouge[]="contentait";
ça t'évite 1) de déclarer un espace mémoire alors que ce n'est pas nécessaire et de 2) avoir à compter tous les caractères de la chaîne. Amuses toi bien ;)


@+ Neria



PS : Sais tu lire les données à partir d'un fichier ?
0
cs_adeline93 Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005
31 mai 2005 à 19:22
merci bcp pour ton aide mais je pense ke je vais m'arrèter à ca surtout ke je dois le rendre très prochainement ...
c'est trop compliké pour moi le c ;)
merci encore et petet à bientot
Adeline
0
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
31 mai 2005 à 19:32
Salut !

De rien, mais c'est domage de s'arrêter si tôt, alors que l'on peut faire plein de choses avec le C (plus que tu ne l'imagines) et encore plus avec le C++. En tout cas je te souhaites bonne chance pour la suite ;)

@+ Neria
0
Rejoignez-nous