cirtey
Messages postés30Date d'inscriptionlundi 29 janvier 2007StatutMembreDernière intervention 8 mai 2009
-
7 mai 2007 à 13:49
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
7 mai 2007 à 19:54
Bonjour;
Je cherche à créer un petit programme sous vb6 pour calculer le nombre d'occurences d'un mot dans une phrase.
Lorsque je tente d'exécuter mon programme, j'ai le message suivant:
"Erreur de compilation, qualificateur incorrect."
L'objet phrase dans la boucle for est alors pointé par le débogeur (phrase.length).
Pouvez-vous m'aider à déterminer la source d'erreur? Merci d'avance.
Voici le code:
Private Sub cmdRechercher_Click()
Dim motrecherche As String
Dim phraseorigine As String
Dim phrase() As String
Dim nbrmotrecherche As Integer
Dim i As Integer
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 7 mai 2007 à 19:54
Ouh là, là tu vas sérieusement compliquer les choses. Il ne s'agit plus seulement d'un simple découpage de mots. Ca devient un véritable analyser syntaxique.
La fonction Split tel que tu l'utilise actuellement ne te permet pas de découper une phrase en mots tel qu'on les définis dans la langue française, elle te découpe la chaine de caractère en entités en utilisant le caractère espace comme séparateur. Alors si la plupart du temps ces entités correspondent aux mots de la langue française, ce n'est plus le cas dans certains cas, comme la présence d'apostrophe, de signe de ponctuation, ....
Ex : Si tu découpe la phrase "Le mouton, la chêvre et l'éléphant ...." et que tu recherche le mot "mouton", il ne sera pas trouvé car losrque tu fait If phrase(i) = motrecherche Then avec phrase(i)="mouton , " et motrecherche = "mouton", phrase(i)<>motrecherche.
Il te faudrait découper la phrase selon plusieurs critères, espace, virgule, point, apostrophe, ....
Tu peux regarde les sources, je crois que quelqu'un à fait un équivalent de Split mais multicritères.
Quant aux autres problèmes, oui InStr peut t'aider, mais pas completement. Si tu recherche "effraie" dans la chaine "m'effraie." alors oui InStr la trouvera, de même si tu recherche "silence" dans "silences", par contre si tu recherche "silences" dans "silence" alors là non elle ne la trouvera pas.
Je pense que tu vois maintenant le vaste travail qu'il y a à faire pour ce que tu demande, surtout qu'il faudrait que tu tienne compte des subtilités de la langue française. ex pour la recherche de singulier/puriel avec des mots comme cheval/chevaux ou autre scénario/scénarii, ....
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
cirtey
Messages postés30Date d'inscriptionlundi 29 janvier 2007StatutMembreDernière intervention 8 mai 2009 7 mai 2007 à 15:27
Salut;
j'ai retouché un peu le code, cela marche. Mais maintenant je souhaite que des mots rentrent dans l'occurence même s'ils ne sont pas à la forme correcte (pluriel / singulier, ' ou pas).
La phrase "Le silence de ces espaces infinis m'effraie." est en caption du label (lblTexte.Caption).
Ex:
Lorsque je demande effraie j'ai 0. Hors je souhaite avoir 1
Lorsque je fais silences j'ai 0. Hors je souhaite avoir 1
Je pense que la fonction inStr peut résoudre le problème. Je vais tester.
Private Sub cmdRechercher_Click()
Dim motrecherche As String
Dim phraseorigine As String
Dim phrase() As String
Dim nbrmotrecherche As Integer
Dim i As Integer
motrecherche = txtRecherche.Text
phraseorigine = lblTexte.Caption ' "Le silence de ces espaces infinis m'effraie."
phrase() = Split(phraseorigine)
nbrmotrecherche = 0
If motrecherche <> "" Then
For i = 0 To (UBound(phrase))
If phrase(i) = motrecherche Then
nbrmotrecherche = nbrmotrecherche + 1
End If
Next i
txtOccurence = CStr(nbrmotrecherche)
Else
MsgBox "La chaîne ne peut être vide.", vbInformation, "Comptage des mots."
End If
End Sub