begin process at 2008 08 20 21:28:25
1 229 099 membres
455 nouveaux aujourd'hui
14 260 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PETIT MOTEUR DE RECHERCHE PAR MOT(S) CLÉ(S)


Information sur la source

Catégorie :Chaîne de Caractères Classé sous : moteur, recherche, mot, clé Niveau : Initié Date de création : 19/04/2002 Date de mise à jour : 19/04/2002 17:21:45 Vu / téléchargé: 17 440 / 334

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Voici un petit code source sympa.

Il vérifie l'existence de mot(s) clé(s) que vous aurez saisi dans une chaîne de caractères et retourne la même chaîne de caractère avec les mot(s) clé(s) mis en valeur (ils seront soulignés et en italique).

NB : Dans mon exemple les mots clés doivent être séparés par des virgules.

Je vous mets à disposition le fichier Zip !

Source

  • <cfparam name="form.critere" default="va, Ceci, est">
  • <cfparam name="form.chaine" default="Ceci est la chaîne de caractères qui va servir de test">
  • <cfset ListeCritere = "#form.critere#">
  • <cfset chaine = "#form.chaine#">
  • <cfset newchaine = chaine>
  • <cfloop index="indice" list="#ListeCritere#" delimiters=",">
  • <cfset critere = "#indice#">
  • <cfset newpos = 1>
  • <cfif Len(newchaine) is not 0>
  • <cfset chaine = newchaine>
  • </cfif>
  • <cfset PosCritere = FindNoCase(#critere#, #chaine#,#newpos#)>
  • <cfif PosCritere GT 0>
  • <cfset newchaine =''>
  • </cfif>
  • <cfloop CONDITION = "(#PosCritere# GT 0)">
  • <cfset newchaine = newchaine & #Mid(chaine,newpos,PosCritere-newpos)#
  • & "<i><u>" & #Mid(chaine,PosCritere,len(critere))# & "</u></i>">
  • <cfset newpos = Poscritere + len(critere)>
  • <cfif PosCritere GT 0>
  • <cfset AntPosCritere = PosCritere>
  • </cfif>
  • <cfset PosCritere = FindNoCase(#critere#, #chaine#,PosCritere+1)>
  • <cfif PosCritere IS 0>
  • <cfif PosCritere LT len(critere)>
  • <cfset newchaine = newchaine & #Mid(chaine,AntPosCritere + len(critere),len
  • (chaine))#>
  • </cfif>
  • </cfif>
  • </cfloop>
  • </cfloop>
  • <br><br>
  • La chaine retournée est : <cfoutput>#newchaine#</cfoutput>
<cfparam name="form.critere" default="va, Ceci, est">
<cfparam name="form.chaine" default="Ceci est la chaîne de caractères qui va servir de test">


<cfset ListeCritere = "#form.critere#">
<cfset chaine = "#form.chaine#">
<cfset newchaine = chaine>

<cfloop index="indice" list="#ListeCritere#" delimiters=",">	
     <cfset critere = "#indice#">
     <cfset newpos = 1>
	
     <cfif Len(newchaine) is not 0>
	<cfset  chaine = newchaine>	
     </cfif>
	
     <cfset PosCritere = FindNoCase(#critere#, #chaine#,#newpos#)>
	
     <cfif PosCritere GT 0>
	<cfset newchaine =''>	
     </cfif>

     <cfloop CONDITION = "(#PosCritere# GT 0)">
          <cfset newchaine = newchaine & #Mid(chaine,newpos,PosCritere-newpos)# 
               & "<i><u>" & #Mid(chaine,PosCritere,len(critere))# & "</u></i>">
          <cfset newpos = Poscritere + len(critere)>
	
          <cfif PosCritere GT 0>
	<cfset AntPosCritere = PosCritere>
           </cfif>
		
           <cfset PosCritere = FindNoCase(#critere#, #chaine#,PosCritere+1)>

           <cfif PosCritere IS 0>
	<cfif PosCritere LT len(critere)>
	     <cfset newchaine = newchaine & #Mid(chaine,AntPosCritere + len(critere),len
                            (chaine))#>
	</cfif>			
            </cfif>
     </cfloop>
</cfloop>
<br><br>
La chaine retournée est : <cfoutput>#newchaine#</cfoutput> 

Conclusion

Bon si vous avez des soucis avec le code, tenez moi au courant.

Par contre si vous avez des suggestions ou corrections à apporter à mon code, n'hesitez pas, je suis à votre écoute...

Bon courage
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de bastoun le 21/04/2002 01:13:54

    Ton code fonctionne correctement, mais si il s'agit de renvoyer ton texte avec tes expressions mises en valeur, il te suffit d'utiliser REReplace avec les RegExp

    Je donne le code au cas où

    &lt;cfparam name="form.critere" default="va, Ceci, est"&gt;
    &lt;cfparam name="form.chaine" default="Ceci est la chaîne de caractères qui va servir de test"&gt;

    &lt;cfset newChaine=REReplaceNoCase( form.chaine,  "(#ListChangeDelims(form.critere, '|' )#)",  "&lt;i&gt;&lt;u&gt;1&lt;/u&gt;&lt;/i&gt;" ,  "ALL" ) &gt;

    &lt;cfoutput&gt;#newChaine#&lt;/cfoutput&gt;

    Petites Explications :
    Le premier argument de la fonction Rereplace est la chaine dans laquelle on recherche les expressions
    Le deuxième contient les expressions recherchées
    Le troisième indique par quoi remplacer l'expression trouvée
    Le quatrieme est la portée ("ALL" pour toutes les occurences, "ONE" pour une seule)

    Explication de l'expression recherché :
    les () indiquent que l'on va rechercher un suite de caractères, et nous permet d'utiliser les backreferences.
    le #ListChangeDelims(form.critere, '|' )# sert juste à transformer la chaine "va, Ceci, est" en "va| Ceci| est" , le | signifiant OU dans les regexp...
    cela nous permet donc de rechercher les trois expressions en une seule opération

    Le 1 (contenu dans ce qui doit remplacer la chaine trouvée) est une backreference, permettant de récupérer la chaine trouvée dans l'expression de recherche et contenue dans le premier bloc de parenthèse (ça tombe bien ici il n'y en a qu'un, si il y avait plusieurs blocs de parenthèses à la suite on pourrait utiliser 2 pour le deuxième, 3 pour le troisième etc)

    Voilà, pour toute remarque, n'hésitez pas...

  • signaler à un administrateur
    Commentaire de bastoun le 21/04/2002 01:17:17

    /1

  • signaler à un administrateur
    Commentaire de bastoun le 21/04/2002 01:20:18

    Bon je recommence.. les backslashs ne sont pas passés... petit conseil n'oubliez pas de mettre un slash avant tout backslash avant insertion d'un code sinon ça ne passe pas ;-)

    &lt;cfparam name="form.critere" default="va, Ceci, est"&gt;
    &lt;cfparam name="form.chaine" default="Ceci est la chaîne de caractères qui va servir de test"&gt;

    &lt;cfset newChaine=REReplaceNoCase( form.chaine,  "(#ListChangeDelims(form.critere, '|' )#)",  "&lt;i&gt;&lt;u&gt;/1&lt;/u&gt;&lt;/i&gt;" ,  "ALL" ) &gt;

    &lt;cfoutput&gt;#newChaine#&lt;/cfoutput&gt;

    Petites Explications :
    Le premier argument de la fonction Rereplace est la chaine dans laquelle on recherche les expressions
    Le deuxième contient les expressions recherchées
    Le troisième indique par quoi remplacer l'expression trouvée
    Le quatrieme est la portée ("ALL" pour toutes les occurences, "ONE" pour une seule)

    Explication de l'expression recherché :
    les () indiquent que l'on va rechercher un suite de caractères, et nous permet d'utiliser les backreferences.
    le #ListChangeDelims(form.critere, '|' )# sert juste à transformer la chaine "va, Ceci, est" en "va| Ceci| est" , le | signifiant OU dans les regexp...
    cela nous permet donc de rechercher les trois expressions en une seule opération

    Le /1 (contenu dans ce qui doit remplacer la chaine trouvée) est une backreference, permettant de récupérer la chaine trouvée dans l'expression de recherche et contenue dans le premier bloc de parenthèse (ça tombe bien ici il n'y en a qu'un, si il y avait plusieurs blocs de parenthèses à la suite on pourrait utiliser /2 pour le deuxième, /3 pour le troisième etc)

    Voilà, pour toute remarque, n'hésitez pas...

  • signaler à un administrateur
    Commentaire de bastoun le 21/04/2002 01:22:17

    bon.. encore raté... lisez backslash au lieu de slash avant tous les chiffres où il y a un slash ( / )

    \ et là les backslashs sont passés ???

  • signaler à un administrateur
    Commentaire de bastoun le 21/04/2002 01:23:55

    &lt;cfset newChaine=REReplaceNoCase( form.chaine,  "(#ListChangeDelims(form.critere, '|' )#)",  "&lt;i&gt;&lt;u&gt;\1&lt;/u&gt;&lt;/i&gt;" ,  "ALL" ) &gt;

    Là, c mieux... donc c'est double backslashs pour insérer un backslah...

  • signaler à un administrateur
    Commentaire de Skyride le 14/07/2002 17:32:46

    Merci Bastoun pour ton aide concernant la manipulation des expressions régulières...

    A+

    SkyRide

  • signaler à un administrateur
    Commentaire de carresse le 27/07/2006 19:56:11

    merci

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
extraction dinformatio...
Budget : 300€
campagne Adwords
Budget : 5 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS