Sélectionner le troisième mot séparé par des espaces dans un champs texte
Le
eoliusone
Bonjour à toutes et tous,
un petit problème pour une grande solution !
j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6 cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète n'afficher que le troisième mots en partant de la gauche.
Petit plus : est-il éventuellement possible, dans un second cas, de spécifier que le mot doit avoir au minimum 5 caractères.
Merci d'avance pour cette info plus qu'utile.
Bien à vous
Eoliusone
un petit problème pour une grande solution !
j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6 cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète n'afficher que le troisième mots en partant de la gauche.
Petit plus : est-il éventuellement possible, dans un second cas, de spécifier que le mot doit avoir au minimum 5 caractères.
Merci d'avance pour cette info plus qu'utile.
Bien à vous
Eoliusone

Poser une question


Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments dans le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function
Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")
@+
merci Fabien,
petit problème, il me signale qu'il y a un erreur de syntaxe dans le module, vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné. (est-ce un erreur de ma part ?)
ps: pourriez-vous faire en sorte que le code prennent d'office le troisième mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui m'interresse ?
Est-il possible d'avoir un requète directe ou on doit toujours passer par le module ?
Encore merci d'avance
Bien à vous
re
J'ai pris le temps de tester ;-) et de commenter
Public Function n_ieme_mot(lachaine As String, Rang_mot As Integer) As
String
'Lachaine : chaine dans laquelle on recherche
'Rang_mot : le rang du mot recherché dans Lachaine
'ex n_ieme_mot("aaaaa bbbbb ccccc",2) retourne bbbbb
Dim vtab As Variant
vtab = Split(lachaine, Chr(32)) ' On converti la chaine en un tableau.
Le Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
If UBound(vtab) < Rang_mot - 1 Then 'S'il y a moins d'éléments dans le
tableau que le rang du mot recherché
n_ieme_mot = "" ' on retourne vide
Else
n_ieme_mot = vtab(Rang_mot - 1) ' sinon on retourne le mot
End If
End Function
et le sql avec une de mes tables
SELECT IIf(Len(n_ieme_mot([entrep],2))>5,n_ieme_mot([entrep],2),"") AS mot
FROM Entreprises;
en français : si la longueur du 2ieme mot du nom d'entreprise est >5
alors on renvoi le 2ieme mot sinon on renvoi "".
@+
Je vais te rendre fou je crois :(
j' ai placer ton "texte" tel quel dans un module 1.
j'ai placer la requète select.... dans ma requète de la table PRODUITS FIN.
J'ai changer entreprises en DEBATISSER, c'est le champ dans lequel le troisième mots doit être "puisé" et Entreprise en PRODUITS FIN.
Dans une colonne (avec expression comme opération) qui s'appelle NEW, je place ta requète, il me dit qu'il manque une parenthèse pour la sous-requète !!!
Cela donne : NEW :SELECT IIf(Len(n_ieme_mot([DEBATISSER],2))>5,n_ieme_mot([DEBATISSER],2),"") AS mot
FROM PRODUITS FIN;
Pour se simplifier la vie (yes), ne tenons plus compte, stp, d'une longueur de mot mais uniquement de la selection du 3ème mots.
La longueur pourrais m'être utile dans le futur mais n'est pas indispensable pour l'instant.
En espèrant ne pas te donner des cheveux gris,
passe une bonne fin de journée
Encore un grand merci pour ton aide.
Ouille :-)
"NEW :SELECT
> IIf(Len(n_ieme_mot([DEBATISSER],2))>5,n_ieme_mot([DEBATISSER],2),"")
AS mot
> FROM PRODUITS FIN;"
A remplacer par
NEW:IIf(Len(n_ieme_mot([DEBATISSER];2))>5;n_ieme_mot([DEBATISSER];2);"")
Ou si tu ne veux plus tenir compte de la longueur du mot :
NEW : n_ieme_mot([DEBATISSER];2)
Ps1 : c'est bien des ; que j'ai mis au lieu des , . Dans les requêtes
c'est le ; qui fait office de séparatif entre les paramètres des
fonctions (idem dans les formulaires et les états)
Ps2 : Evite les mots clefs en nom de champ à NEW préfère Nouv ou Nouveau.
@+