Compter le nombre d'une chaîne dans une chaîne ?

Résolu
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 30 nov. 2010 à 14:55
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 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

13 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
30 nov. 2010 à 16:04
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);

3
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
30 nov. 2010 à 21:01
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
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
30 nov. 2010 à 22:17
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")


3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 déc. 2010 à 08:05
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


++
3

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

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
30 nov. 2010 à 15:23
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);
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 nov. 2010 à 15:28
jolie pirouette, on touche le fond des surcouches logicielles, rassurez moi...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 nov. 2010 à 22:43
salut,

on peut utiliser le PREDICATE

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


++
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
30 nov. 2010 à 23:49
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))
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
1 déc. 2010 à 00:20
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
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
1 déc. 2010 à 11:51
Super PCPT !!!!!
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
2 déc. 2010 à 00:44
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 ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 déc. 2010 à 07:33
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
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
2 déc. 2010 à 08:13
Merci !!!

( Mauvaise utilisation effectivement )
0
Rejoignez-nous