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

Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 30 nov. 2010 à 14:55 - Dernière réponse : Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention
- 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
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 30 nov. 2010 à 16:04
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);

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de nhervagault
Meilleure réponse
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 30 nov. 2010 à 21:01
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

Merci Duke49 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Duke49
Meilleure réponse
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 30 nov. 2010 à 22:17
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")


Merci cs_ShayW 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_ShayW
Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 1 déc. 2010 à 08:05
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


++

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de PCPT
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 30 nov. 2010 à 15:23
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 30 nov. 2010 à 15:28
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 nov. 2010 à 22:43
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
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 30 nov. 2010 à 23:49
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
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 1 déc. 2010 à 00:20
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
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 1 déc. 2010 à 11:51
0
Merci
Super PCPT !!!!!
Commenter la réponse de Duke49
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 2 déc. 2010 à 00:44
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 2 déc. 2010 à 07:33
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
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 2 déc. 2010 à 08:13
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.