Compter un nombre de données..

Résolu
Zappam Messages postés 8 Date d'inscription dimanche 9 avril 2006 Statut Membre Dernière intervention 18 octobre 2007 - 20 mai 2006 à 11:22
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 21 mai 2006 à 12:26
Si j'ai bonjour comme string qui contient "zm10gsalut6nv02nsalut12nvfksalut", comme dois-je faire pour compter le nombre de "salut" dedans?

Merci.

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2006 à 12:25
interessante, ta méthode ^^
elle a l'avantage de ne pas avoir de boucle...

tu pourrais l'accélerer en faisant :

NB_OCCURENCES = (LenB(vsInput) - LenB(Replace(vsInput, vsPattern, vbNullString, Compare:=veCompare))) / LenB(vsPattern)


tout ce qu'il faut considérer, c'est le coût du Replace (qui alloue une
nouvelle chaine de taille au maximum égale a celle de la chaine
d'entrée)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2006 à 11:39
Dim i As Long

Dim sInput as String

Dim nCount as long

    sInput = "zm10gsalut6nv02nsalut12nvfksalut"


    i = InStr(1, sInput, "salut")

    Do Until i = 0

        nCount = nCount + 1

        i = InStr(i + 1, sInput, "salut")

    Loop


    MsgBox nCount

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mai 2006 à 11:50
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
20 mai 2006 à 12:18
Bonjour
Voici une autre méthode :

Private Sub Command1_Click()
MsgBox NB_OCCURENCES("zm10gsalut6nv02nsalut12nvfksalut", "salut")
End Sub

Function NB_OCCURENCES(Chaine As String, MotCherche As String) As Integer
NB_OCCURENCES = (Len(Chaine) - Len(Replace(Chaine, MotCherche, ""))) / Len(MotCherche)
End Function
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 mai 2006 à 02:52
Salut,

Je pense que la correction de Renfield sur le code de Dolphin Boy ferait accélérer la vitesse de traitement de 3 fois.

A tester avec un compteur...

++
mortalino
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
21 mai 2006 à 11:15
Salut mortalino, j'ai fait des tests et finalement c'est la solution avec instr de Renfield qui est la plus rapide.
LenB n'accélère pas du tout ma méthode, bien au contraire, ça ralenti de presque 2 fois.
Et plus la chaine est longue, plus on voit la différences.
Personnellement, je vais adopter le instr.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mai 2006 à 12:26
le replace est interessant......

il ya un seuil critique a partir duquel ma fonction devient plus rapide....


tout dépend de la taille de l'entrée

"tout ce qu'il faut considérer, c'est le coût du Replace (qui alloue une
nouvelle chaine de taille au maximum égale a celle de la chaine
d'entrée)"

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Rejoignez-nous