FONCTION POUR SÉPARER ET SÉLECTIONNER LES MOTS VOULUS DANS UNE PHRASE

stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 - 11 mai 2003 à 23:47
cs_HeXoR Messages postés 165 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 15 avril 2010 - 29 juin 2004 à 16:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/7068-fonction-pour-separer-et-selectionner-les-mots-voulus-dans-une-phrase

cs_HeXoR Messages postés 165 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 15 avril 2010
29 juin 2004 à 16:18
Salut all, bon c'était juste pour dire que j'ai fait un truc bien plus complet et largement plus interessant. A voir : http://www.vbfrance.com/code.aspx?ID=20972
(titre : Gestion de chaîne de caractères - "Tokens")
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2003 à 22:33
voici ma version de cette fonction qui suscite tant de polémiques

' Projet > References > Microsoft VbScript Regular Expressions 5.5

Public Function MidMots(Str As String, lngStart As Long, Optional lngEnd As Long 0, Optional SeparChar As String " ") As String
' Start : mot par lequel on commence (min = 1 )
' End : Nombre de mots a recuperer
' Separchar : caractere de separation a utiliser en sortie

Dim REG As New RegExp ' objets necessaires au parsing
Dim Matches As MatchCollection

REG.Global = True ' effectuer des recherches multiples
'expresion reguliere , non parfaite et certainement perfectionnable , liste les caracteres de separation
REG.Pattern = "[^ ,.;%:!?+-=/\([)]}{|&<>* ""']+"

'decoupe les mots
Set Matches = REG.Execute(Str)
If Matches.Count = 0 Then Exit Function 'sort si aucun mot trouvé

'on coupe tout , pour et on les recolle comme il faut
For a lngStart - 1 To IIf(lngEnd 0, Matches.Count - 1, lngEnd - 1)
MidMots = IIf(MidMots <> vbNullString, MidMots & SeparChar, vbNullString) & Matches.Item(a)
Next a
End Function
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mai 2003 à 22:04
et si je separe mes mot par d'avantage d'espaces , ca coince ?? ou les marque de ponctuations ??

"bonjour, martin" , ca fait pas trois mots !!!
dpouliot Messages postés 50 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 4 novembre 2008
13 mai 2003 à 19:49
Un Bugue. Si le texte débute par un blanc (chr(32)) les mots extraits sont décalés. Faire un ltrim avant tout tratiement.
stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 1
12 mai 2003 à 11:51
Je ne suis pas sur du SP . je ne pense pas qou j'ai fais un update . Ou est-ce-que je peux retrouver quelle SP est installer ? Quand meme, il le fait chez moi ;-)
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
12 mai 2003 à 11:35
aurais-tu installé un sp au dela du 4 ?
stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 1
12 mai 2003 à 11:27
chez moi il le fait => VB6

sauf lngStart -1 et lngEnd -1 . Que 1 détail =>

Ca marche pas comme ca ?

Private Sub Command1_Click()

MsgBox Mot("aa bb cc dd ee", 2, 3)

End Sub

Public Function Mot(str As String, lngStart As Long, Optional lngEnd As Long = 0)

Dim Phrase() As String
Dim Ret As String
Dim PosMot As Integer

Phrase = Split(str)
If lngEnd 0 Then lngEnd UBound(Phrase)
For PosMot = lngStart To lngEnd
Ret = Ret & Phrase(PosMot) & " "
Next
Mot = Trim(Ret)

End Function
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
12 mai 2003 à 11:22
Warny -> stevebelgium
Ca ne marche pas, la fonction Split renvoi un Array() qui est incompatible avec les tableaux standards du vb.
Si je l'ai ecrit comme ça, c'est pas j'avais envie !
stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 1
12 mai 2003 à 11:18
Pour dimensioner le variable Phrase dans le code de Warny :

Dim Phrase() As String

> Ca utilese moins de mémoire que Dim Phrase < Type Variant

C'es que un détail ;-)

stevebelgium
cs_HeXoR Messages postés 165 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 15 avril 2010
12 mai 2003 à 10:49
Je vais tout de même mettre mon zip (qd j'aurai le temps) permettant de tester la fonction pour ceux qui n'ont pas le courage de le faire eux même :)
cs_HeXoR Messages postés 165 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 15 avril 2010
12 mai 2003 à 10:36
Hello stevebelgium & Warny, merci pour vos commantaires bien utiles ;)
++
stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 1
12 mai 2003 à 09:02
Yo , warny !

Cool ta fonction ! Encore plus facile :-) !
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
12 mai 2003 à 08:41
Si vous avez vb 6 vous pouvez auusi utiliser la fonction split et faire ça

Dim Phrase
Dim Ret as String
Dim PosMot as Integer
Phrase = Split(str)
If lngEnd 0 then lngEnd ubound(Phrase)
For PosMot = lngStart to lngEnd
Ret = Ret & Phrase(PosMot) & " "
Next
Mot = Trim(Ret)
stevebelgium Messages postés 180 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 7 juin 2003 1
11 mai 2003 à 23:47
Yo , hexor !

Pas mal ton code mais j'ai fais la meme chose avec la function instr (Instring). Mais quand meme un bon effort.
J'ai ajouter ca aussi :
> Optional lngEnd As Long 0 'comme ca on est pas obliger de mettre le parametre

Sorry pour les fautes d'orthographe . (Je suis encore en train d'apprendre la langue française).

Public Function Mot(str As String, lngStart As Long, Optional lngEnd As Long = 0)

Dim temp_start, temp_end As Long
Dim x As Integer

temp_start = 1
For x = 1 To lngStart - 1
temp_start = InStr(temp_start + 1, str, " ")
Next x

temp_end = 1
For x = 1 To lngEnd
temp_end = InStr(temp_end + 1, str, " ") + 1
Next x

If temp_end - temp_start > 0 Then
Mot = Mid(str, temp_start, temp_end - temp_start)
Else
Mot = Mid(str, temp_start)
End If

End Function
Rejoignez-nous