probleme avec regsub
#1
Bonjour a tous,

Je reviens demander de l'aide car j'ai un petit soucis avec regsub.
J'ai dans ma base de donnée matériel, un colonne id, réf, articles, etc...
dans la colonne articles j'ai des données écrite comme ca : voici.un.nouvel.article ou aussi comme ca voici-un-nouvel-article

ma colonne est un varchar(255) la base de donnée est sous interclassement utf8_general_ci et moteur MyISAM.

J'espère avoir tout mis Smile

ce que je cherche a faire :
- commande !search sous la forme : !search chaine_de_caracteres chaine_de_caracteres chaine_de_caracteres (bref plusieur nom)
- recherche dans la colonne articles les correspondances
- affichage sous forme de listes.

Ce qui me pose un problème:
La recherche avec la commande !search nouvel article n'abouti pas, il ne trouve rien. Par contre si je rentre !search voici.un.nouvel.article la il trouve une correspondance et me l'affiche.

Je pense que cela viens de la façon que j'ai d'avoir écrite le regsub.
--> regsub -all {\*} $arg {%} arg

merci pour vos réponses.

Nos...
Répondre Avertir
#2
Comment se fait ta recherche, du moins quelle est la requête ?
Si tu fais:
Code :
select * from table where article='la chaine'
, il faut que tu doubles ta condition where de la manière suivante:
tcl
regsub -all {_} $arg {\.} expdot
regsub -all {_} $arg {\-} expdash
set where "(article='$expdot' or article='$expdash')"


Si tu fonctionnes avec un like (ce qui semble être le cas), utilises plutôt:
tcl
regsub -all {[\.\-]} $arg {_} arg


Note que j'utilise '_' plutôt que '%' car en mysql, il remplace un seul caractère alors que % remplace un ou plusieurs caractères.
Répondre
#3
Bonjour,

alors pour mon select comme tu dis j'utilise un like,

SELECT reference, articles FROM db WHERE articles LIKE '%$args%' ORDER BY articles DESC LIMIT 5

Mais en faite j'ai abandonnée la solution du global et comme lorsque je faisais:

!search %chaine_de_carateres%chaine_de_carateres%

ça fonctionnait aussi, j'ai rajouter dans ma proc à la place de global:

set args [string map [list "*" "%" " " "%"] $arg]; (récupéré sur divers posts sur le net)

et maintenant ca fonctionne, mais je testerai avec ta solution Smile...

Mon but est d'arriver à écrire mon code en moins de ligne possible Smile mais beaucoup de chose au niveau du langage tcl n'est pas expliquer d'où une recherche très très longue pour finir par comprendre ce qu'il faut faire Smile...

Merci pour ta réponse,

Nos...
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté