Compter le nombre d'occurence d'un caractere en min ou maj

aladin7855 Messages postés 1 Date d'inscription lundi 4 juillet 2022 Statut Membre Dernière intervention 4 juillet 2022 - 4 juil. 2022 à 19:52
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 - 17 juil. 2022 à 13:21
Salut, Je regarde pour compter le nombre d'occurence d'un caractere qu'il soit écrit en minuscule ou avec la première lettre en majuscule (Début de phrase). Je suis bloqué dans mon deuxième if....!

Public Function nboccurence(ByVal phrase As String, ByVal mot As String) As Integer
Dim longueurmot As Integer
Dim caractere As String
Dim i As Integer

longueurmot = Len(mot)

If mot <> "" Then
For i = 1 To Len(phrase)
If (Mid(phrase, i, longueurmot) = mot) Then
nboccurence = nboccurence + 1
End If
If Len(mot) = ???? Then
nboccurence = nboccurence + 1
End If
Next i
End If

End Function

Help! merci !!
A voir également:

11 réponses

Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
5 juil. 2022 à 17:53
Bonjour à tous les 2.
Y'a plus simple (enfin quand on aime) et normalement rapide d'exécution => les regex.
Mais bon, de mon côté je voulais d'abord l'inciter à choisir un autre langage.
Je comprends qu'en tant que vieux de la vieille tu y tiennes.
Mais pour un débutant aujourd'hui, je pense sincèrement que c'est un mauvais choix, ou en tout cas pas un choix d'avenir.
1
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
Modifié le 16 juil. 2022 à 12:43

Bonjour

tu n'as pas compris ce que je voulais dire.

Si tu testes ton code avec cette phrase par exemple

"Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour'"

tu verras que la ponctuation n'est pas prise en compte.


1
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
5 juil. 2022 à 07:16
Bonjour

Je te propose la lecture des 2 premiers paragraphes de cette réponse que j'ai écrite hier
https://codes-sources.commentcamarche.net/forum/affich-10108792-exemple-comment-ecrire-un-programme-qui-calcule-la-somme-n#1


0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
5 juil. 2022 à 12:43
Bonjour
Et en utilisant les balises de code ( voir https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code ) ce serait beaucoup plus lisible et agréable à lire .
Ceci vaut pour tous les langages de programmation supportés par le site .
Un salut à Whis en passant .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 5 juil. 2022 à 14:06
Salut aladin7855, VB95 et Whismeril,

Pour faire vivre ce forum moribond et squatté par des trolls, je propose mon alternative sans avoir vu les autres propositions.

Note:
- Un espace est obligatoire pour un mot. Sans, il cherchera une partie de mot.
- Le but est de réduire la taille de la variable chaîne afin d’accélérer le traitement du BASIC.
Sur une chaîne relativement courte, pas trop de perte en rapidité, mais sur une chaine très longue, le gain de temps est non négligeable.

Amuse-toi bien.

Sub main()
Dim phrase As String
phrase = "La meilleure façon de marcher est encore la nôtre, c'est de mettre un pied devant l'autre... et de recommencer."
Debug.Print nboccurence(phrase, "La ")
Debug.Print nboccurence(phrase, "DE ")
End Sub


Public Function nboccurence(ByVal phrase As String, ByVal mot As String) As Integer

Dim StrTemp As String, StrMot As String

StrTemp = LCase(phrase)
StrMot = LCase(mot)
nboccurence = 0
Do
If InStr(1, StrTemp, StrMot) <> 0 Then
nboccurence = nboccurence + 1
StrTemp = Right(StrTemp, Len(StrTemp) - InStr(1, StrTemp, StrMot) - Len(StrMot) + 1)
Debug.Print StrTemp
End If
Loop While Trim(StrTemp) <> "" And InStr(1, StrTemp, StrMot) <> 0
End Function


"Merci beaucoup, Machin", "Résolu"... et basta !
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
5 juil. 2022 à 14:06
Salutations à toi JeuDuTaquin !
0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
Modifié le 14 juil. 2022 à 14:27

Bonjour,

si tu es en VB6 ce qui est bien dommage en 2022 vue qu'il est de plus en plus difficile, mais pas impossible, de dégoter un vrai IDE VB6 compatible avec les versions Windows 2008 et plus!

Public Function nboccurence(ByVal phrase As String, ByVal mot As String) As Integer
       nboccurence = UBound(Split(UCase(phrase), UCase(mot)))
End Function
Sub test()
    Dim phrase As String
    phrase = "La meilleure façon de marcher est encore la nôtre, c'est de mettre un pied devant l'autre... et de recommencer."
   Debug.Print nboccurence(phrase, "La")
   Debug.Print nboccurence(phrase, "DE ")
End Sub

 et en VB.net

    Private Function ConpteMots(txt As String, C As String) As Integer
        Return (From b In txt.ToLower.Split() Where b = C.ToLower Select b).Count
    End Function
    Sub test()
        Dim phrase As String
        phrase = "La meilleure façon de marcher est encore la nôtre, c'est de mettre un pied devant l'autre... et de recommencer."
        Debug.Print(ConpteMots(phrase, "DE"))

    End Sub
0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
14 juil. 2022 à 19:36

Bonsoir

si tu es en VB6 ce qui est bien dommage en 2022

c'est exactement ce que je lui ai donné à lire en détail dès ma première réponse.

Et comme les codes précédents tes propositions ne fonctionnent pas avec la ponctuation.

0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
16 juil. 2022 à 12:32

Bonjour,

comme précédemment je précise que nous somme dans la rubrique VB6 et que la ponctuation que j'utilise est conforme à ce langage!

0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
Modifié le 16 juil. 2022 à 13:13

Oui désolé je n'avais effectivement pas compris,

Je suis repartie du code de JeuDuTaquin et je n'ai pas fait gaffe à cette aspect des choses !

oui pour la ponctuation qu'il faut gérer pour la séparation des mots si je voulais garder l'option du Split {version VB.NET} ce qui après réflexion n'est pas une bonne idée !

0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
16 juil. 2022 à 13:12

Tu n'as pas fait plusieurs fois l'erreur, mais vous l'avez tous faite 1 fois ;)

C'est pour ça que j'ai proposé

  • d'abord et avant tout de passer à un autre langage, peut importe lequel tant que c'est un langage qui a de l'avenir,
  • et dans cet autre langage, de regarder du coté des regex 
1
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 17 juil. 2022 à 10:55

Salut à tous,

Afin de ne pas laisser un code inachevé, pour l'éternité et l’au-delà...

Sur des règles extrapolant la question primaire, issue d'un fantôme moins bavard qu'un troll...

Je propose ceci:

Sub main()
Dim phrase As String
phrase = "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."
Debug.Print nboccurence(phrase, "BONJOUR")
Debug.Print nboccurence(phrase, "de")
End Sub

Public Function nboccurence(ByVal phrase As String, ByVal mot As String) As Long

Dim StrTemp As String, StrMot As String
Dim StrOffset As Long
Dim sHbyte As String * 1, sFbyte As String * 1

StrTemp = LCase(phrase)
StrMot = LCase(mot)
nboccurence = 0

Do
StrOffset = InStr(1, StrTemp, StrMot)
    If StrOffset <> 0 Then
         sHbyte = 0
         sFbyte = 0
         If StrOffset <> 1 Then sHbyte = Mid(StrTemp, StrOffset - 1)
         If StrOffset + Len(StrMot) + 1 < Len(StrTemp) Then sFbyte = Mid(StrTemp, StrOffset + Len(StrMot))
           
        
            nboccurence = nboccurence + IIf(Asc(sHbyte) < &H61 And Asc(sFbyte) < &H61, 1, 0)
            
          '   Debug.Print "!"; sHbyte; "!"; , "!"; sFbyte; "!", nboccurence
            
            StrTemp = Right(StrTemp, Len(StrTemp) - InStr(1, StrTemp, StrMot) - Len(StrMot) + 1)

    End If
Loop While Trim(StrTemp) <> "" And InStr(1, StrTemp, StrMot) <> 0
End Function


Je note que la proposition de dysorthographie est très bien trouvée. Je la mets de coté pour mes futurs projets!

Donc, pour l'occasion, je balise le mot recherché avec une mémorisation d'un caractère 'Header' (en tête) et un 'Footer' (en queue de mot) pour tester les caractères de césure.

Puis je teste leurs valeurs avec "a" = &h61, car toute la ponctuation se trouve en aval de ce code ASCII.

Si une des balise est fausse, le compteur n'est pas incrémenté.

Seule contrainte, la fonction MID qui ne tolère pas les dépassements de chaînes, avant 1 et après sa longueur.

Donc, on attribue d'office une validation en début et en fin de texte.

Voilà,

Amusez-vous bien.

0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
17 juil. 2022 à 10:55

Bonjour JeuDuTaquin.

Pour que la coloration fonctionne, il faut choisir Basic et non VBScript.

J'ai corrigé

0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
17 juil. 2022 à 13:00

D'abord, dès le début la question prête à confusion, en effet aladin dit 

d'un caractere 

mais sa variable s'appelle "mot" et comme il teste la longueur de "mot" ça sous entends que ce n'est pas un caractère....

Bref, je vous propose un code qui permet de chercher une chaine (plusieurs caractères), un mot entier, une lettre ou un caractère selon ses envies, le tout à base de regex.

Je n'ai pas VB6 sous la main (d'ailleurs, je ne crois plus l'avoir installé quelque part...), mais je me souviens que les regex en VBA et VB6 sont utilisées de façon très similaire. Donc voici une version avec VBA.

Dim rex As RegExp
Dim myMatches As MatchCollection


Sub Occurences(ATrouver As String, Source As String)
    Set rex = New RegExp
    rex.IgnoreCase = True 'on ignore la casse
    rex.Global = True 'on continue même après avoir trouvé une occurence
    rex.Pattern = ATrouver 'le modèle recherché est ATrouver
    
    Set myMatches = rex.Execute(Source) 'on effectue la recherche
    
    'on affiche le résultat
    Debug.Print ("Il y a " & myMatches.Count & " occurence(s) de '" & ATrouver & "' dans '" & Source & "'")
    If myMatches.Count > 0 Then
        For i = 0 To myMatches.Count - 1
            Debug.Print ("Une occurence '" & myMatches.Item(i).Value & "' à l'index " & myMatches.Item(i).FirstIndex)
        Next i
    End If
    
    Debug.Print ("__________________________________________________")
    Debug.Print ("")
End Sub

Que l'on va tester de cette façon

Sub test()
    'on cherche une chaine qui existe
    Occurences "bonJour", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."
    
    'on cherche une chaine qui n'existe pas
    Occurences "coucou", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."

    'on cherche une chaine incluse dans un mot
    Occurences "LE", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."
    
    'on cherche un mot entier (le uniquement)
    Occurences "\ble\b", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."
   
    'on cherche un mot qui commence par "le" (le, les)
    Occurences "\ble\w*\b", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."
  
    'on cherche un mot qui contient par "le" (le, les, exemple, meilleure)
    Occurences "\b\w*le\w*\b", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."

    'on cherche une lettre
    Occurences "b", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."
    
    'on cherche un caractère
    Occurences ",", "Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR."
End Sub

 Ce qui retourne

Il y a 5 occurence(s) de 'bonJour' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
Une occurence 'Bonjour' à l'index 0
Une occurence 'Bonjour' à l'index 129
Une occurence 'Bonjour' à l'index 147
Une occurence 'BONJOUR' à l'index 269
Une occurence 'BONJOUR' à l'index 279
__________________________________________________

Il y a 0 occurence(s) de 'coucou' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
__________________________________________________

Il y a 4 occurence(s) de 'LE' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
Une occurence 'le' à l'index 33
Une occurence 'le' à l'index 95
Une occurence 'le' à l'index 98
Une occurence 'le' à l'index 163
__________________________________________________

Il y a 1 occurence(s) de '\ble\b' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
Une occurence 'le' à l'index 98
__________________________________________________

Il y a 2 occurence(s) de '\ble\w*\b' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
Une occurence 'les' à l'index 33
Une occurence 'le' à l'index 98
__________________________________________________

Il y a 4 occurence(s) de '\b\w*le\w*\b' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
Une occurence 'les' à l'index 33
Une occurence 'exemple' à l'index 90
Une occurence 'le' à l'index 98
Une occurence 'meilleure' à l'index 159
__________________________________________________

Il y a 7 occurence(s) de 'b' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
Une occurence 'B' à l'index 0
Une occurence 'B' à l'index 129
Une occurence 'B' à l'index 147
Une occurence 'b' à l'index 268
Une occurence 'B' à l'index 269
Une occurence 'b' à l'index 276
Une occurence 'B' à l'index 279
__________________________________________________

Il y a 5 occurence(s) de ',' dans 'Bonjour, dans cette phrase, tous les signes de ponctuations seront associés aux mots, par exemple le premier mot retourné sera :'Bonjour,' et non 'Bonjour' La meilleure façon de marcher est encore la notre, c'est de mettre un pied devant l'autre... et de recommencer. bBONJOURb .BONJOUR.'
Une occurence ',' à l'index 7
Une occurence ',' à l'index 26
Une occurence ',' à l'index 84
Une occurence ',' à l'index 136
Une occurence ',' à l'index 205
__________________________________________________



0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
17 juil. 2022 à 13:21

Ha j'ai oublié la capture de la référence à ajouter

0
Rejoignez-nous