Compter le nombre d'une chaîne dans une chaîne ? [Résolu]

Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
- - Dernière réponse : Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
- 2 déc. 2010 à 08:13
Salut !!

Au lieu de jouer avec Instr et une boucle... comme au temps du vb6.

Comment résoudre simplement ce problème en VB.NET ?:

Dim sChaine as String = "000A000B000C000D"
Dim sFilter as String = "0"
Dim rt as Integer

'Fonction miracle qui me compte le nombre de zéro contenu dans sChaine
rt = sChaine.CountEx?(sChaine, sFilter) '?

'rt est égale à 12
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
3
Merci
OK
moins haut niveau
C'est pas sorcier

   
char filter = '0';
string sChaine = "000A000B000C000D";
            
int len = sChaine.Length;
int nb = 0;
for(int i = 0; i<len;i++)
{
     if (sChaine[i] == filter) nb++;
}
Debug.WriteLine( " NB caractere filter --> " + nb);

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de nhervagault
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
3
Merci
Merci pour vos idées !!!

    Public Function CountEx(ByVal Any As String, ByVal Find As String) As Integer
        Dim i As Integer = 0
        Dim i As Integer = Any.IndexOf(Find, 0)
        Do While i > -1
            i += 1
            i = Any.IndexOf(Find, i + Find.Length)
        Loop
        Return i
    End Function

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Duke49
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
3
Merci
Bonsoir

Une autre méthode
 Private Function countchar(ByVal thestring As String, ByVal delimiter As Char) As Integer
        Dim strs() As String
        strs = thestring.Split(delimiter)
        Return strs.Count - 1
    End Function
Dim x As Integer
x = countchar("000A000B000C000D", "0")


Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_ShayW
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
va pour un petit mélange des différentes propositions :

    Public Function CountOccurrences(ByVal Expression As String, ByVal Find As String) As Integer
        If Expression.Length 0 Or Find.Length 0 Then
            Return 0
        ElseIf Find.Length = 1 Then
            Return Convert.ToInt32(Expression.LongCount(Function(fx) fx = Find.ToCharArray))
        Else
            Return Regex.Matches(Expression, Find).Count
        End If
    End Function


++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
0
Merci
Salut,

Une ptit requete linq (désolé c'est en c#) mais facile à mettre en vb.net

            char filter = '0';
            string sChaine = "000A000B000C000D";
            int nb = (from c in sChaine.ToCharArray()
                      where c == filter
                      select c).Count();
            Debug.WriteLine( " NB caractere filter --> " + nb);
Commenter la réponse de nhervagault
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
jolie pirouette, on touche le fond des surcouches logicielles, rassurez moi...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
salut,

on peut utiliser le PREDICATE

MessageBox.Show(("000A000B000C000D".ToCharArray.Count(Function(fx) fx = "0"c)).ToString)


++
Commenter la réponse de PCPT
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Sa fonctionne aussi ^^ en char mais sa fonctionne !

Je tente de changer ou deleger un nouveau parametre a COUNT mais j'y arrive pas.

Delegate Function Count(ByVal predicate As System.Linq.Expressions.Expression(Of Func(Of String, Boolean)))

    'CountEx(ByVal MaChaine As String, ByVal Pattern As String) As Action(Of String)

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim MaChaine As String = "000A000B000C000D"
        Dim Pattern As String = "000"
        Dim MonPredicat As System.Predicate(Of Func(Of String, AssemblyLoadEventArgs))
        MonPredicat(AddressOf Count.CreateDelegate(System.Type.Delimiter, Reflection.MemberInfo))
Commenter la réponse de Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Je sais pas c'que j'baragouine mais c'est sympa comme structure...
Objectif rêvé, ajouter une fonction à la convertion ToString.

Exemple:

Dim MaChaine As String = "000A000B000C000D"
Msgbox(MaChaine.ToString.CountEx("000")) 'renvoie 4

     _
    Public Class Compare
        Custom Event Count As Action(Of String, String)
            AddHandler(ByVal value As Action(Of String, String))

            End AddHandler

            RemoveHandler(ByVal value As Action(Of String, String))

            End RemoveHandler

            RaiseEvent()

            End RaiseEvent
        End Event
    End Class
Commenter la réponse de Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Super PCPT !!!!!
Commenter la réponse de Duke49
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
PCPT !
Une petite chose étrange !
Dans ton code:
    Public Function CountOccurrences(ByVal Expression As String, ByVal Find As String) As Integer
        If Expression.Length 0 Or Find.Length 0 Then
            Return 0
        ElseIf Find.Length = 1 Then
            Return Convert.ToInt32(Expression.LongCount(Function(fx) fx = Find.ToCharArray))
        Else
            Return Regex.Matches(Expression, Find).Count
        End If
    End Function


Lorsque je récupère une page internet, exemple:
http://www.youtube.com/watch?v=P0_OL5sf7H8&feature=rec-exp_fresh+div-1r-3-HM

Le MaPageInternet.Contains fonctionne bien !
Sous notepad aussi !
Par contre, ton code me renvoi 0 ??????

Regex.Matches ne fait pas le même travail que Contains ?
Pourquoi ?
Commenter la réponse de Duke49
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
tu l'as correctement utilisé ?

j'ai mis la source de la page dans une richtextbox...

MessageBox.Show(CountOccurrences(RichTextBox1.Text, "000").ToString)


affiche 9
Commenter la réponse de PCPT
Messages postés
553
Date d'inscription
jeudi 12 octobre 2006
Dernière intervention
6 juin 2015
0
Merci
Merci !!!

( Mauvaise utilisation effectivement )
Commenter la réponse de Duke49

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.