IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Test chaine de caracteres


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 55
    Par défaut Test chaine de caracteres
    Bonjour à tous,

    Je cherche a tester une chaine de caractères, exemple : "Toto / Tata / Titi". Je voudrais savoir si la chaine de caractères contient "Toto", "Tata" ou "Titi" et surtout s'arrêter au premier. Donc pour "Toto / Tata / Titi" on devrait trouvé Toto = 1, Tata = 0 et Titi = 0. J'utilise ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                        if (item.Subject.ToLower().Contains("toto"))
                        {
                            toto++;
                        }
                        if (item.Subject.ToLower().Contains("tata"))
                        {
                            tata++;
                        }
                        if (item.Subject.ToLower().Contains("titi"))
                        {
                            titi++;
                        }
    Mon problème c'est que là forcément il rentre dans chaque condition :/

    Quelqu'un sait-il comment faire? Ou a une piste que je puisse étudier?

    Merci d'avance,
    Foyus

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    je ne connais pas la syntax en c# mais en vb.net c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if condition then
     
    elseif autre condition
     
    elseif autre condition
     
    else ///tout le reste
     
    end if
    si la première condition est remplie, ca ne teste pas les autres
    sinon ca teste le elseif suivant, s'il est vrai ca ne teste pas les autres etc...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    la syntaxe est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if(condition)
    {
    }
    else if(autre condition)
    {
    }
    else if(autre condition)
    {
    }
    else // le reste
    {
    }

    question bete, et si ta chaine contient "toto" et "titi" ?

  4. #4
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Et un switch() case, serais plus propre.
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par Hinault Romaric Voir le message
    Et un switch() case, serais plus propre.

    c'est pas faux ca ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    ce n'est pas possible d'utiliser le case pour son exemple, (contains, startWith....), le switch c'est pour des valeurs exactes.

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par chamamo Voir le message
    ce n'est pas possible d'utiliser le case pour son exemple, (contains, startWith....), le switch c'est pour des valeurs exactes.
    Formulé plus précisément , l'instruction "case" n'admet qu'une constante comme argument.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 55
    Par défaut
    Merci pour vos réponses.

    Le if else elseif ne fonctionne pas car toutes les conditions sont valides :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(item.Subject.ToLower().Contains("toto"))
    {
     VRAI
    }
    else if((item.Subject.ToLower().Contains("tata"))
    {
    VRAI
    }
    else if((item.Subject.ToLower().Contains("tata"))
    {
    VRAI
    }
    Donc la il va bien me retourner : Toto = 1, Tata = 0 et Titi = 0 mais si je lui passe "Tata / Toto / Titi" il va me retourner " Toto = 1, Tata = 1, Titi = 0. C'est vraiment l'ordre qui est important : il ne fait +1 que pour le premier et ensuite il fait une sorte de "break".

    Je ne suis pas sur d'être clair dans mes propos dsl :/

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par Foyus Voir le message
    Merci pour vos réponses.

    Le if else elseif ne fonctionne pas car toutes les conditions sont valides :

    j'y crois pas trop ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Foyus Voir le message
    Je ne suis pas sur d'être clair dans mes propos dsl :/
    Si c'est clair, mais dans ce cas, je ne vois pas bien le reproche que tu fais à ton code initial

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    Se serai peut être plus simple de faire une fonction qui te fait le test et qui te retourne la chaine trouvé ou vide si la chaine n'est pas trouvé ...

    Exemple :

    La je te créé une nouvelle classe contenant une méthode d'extension pour la classe String, ce qui va te créer une nouvelle surcharge de la fonction Contains() pour la classe String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public static class Extension
        {
            public static String Contains(this String maChaine, String[] ElementsToSearch)
            {
                Dictionary<String, int> lesIndex = new Dictionary<string,int>(); // Ici je vais stocker les positions de chacun des éléments à trouver
                int pos = 0;
     
                foreach (String s in ElementsToSearch) // On boucle sur tous les éléments
                {
                    pos = maChaine.ToLower().IndexOf(s); // On récup la position
                    if (pos != -1)                       // Si != -1 ==> Cela veut dire que l'élément est présent dans la chaine 
                        lesIndex.Add(s, pos);            // Je sauvegarde sa position
                }
     
                if (lesIndex.Count <= 0) // Si aucune position n'a été sauvegardée, c'est que personne n'est contenu dans la chaine
                    return String.Empty;
                else
                    return lesIndex.OrderBy(i => i.Value).First().Key; // Sinon, je retourne celui qui apparait le premier dans la chaine
            }
        }
    Ce qui va te permettre de faire sur ta chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String s = "Toto / Tata / Titi";
    String who = s.Contains(new String[] { "toto", "tata", "titi" });
    MessageBox.Show(who);
    Donc la Who = toto, car c'est bien toto la première personne trouvé dans la chaine.

    Mais il faut peut être renommer la fonction ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. test des chaines de caracteres methodes str.is
    Par PyNub dans le forum Général Python
    Réponses: 2
    Dernier message: 17/06/2010, 00h09
  2. Test chaine de caractere
    Par blackmanyo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/10/2008, 10h35
  3. test qui compare un champs et une chaine de caractere
    Par goomie dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/10/2007, 01h42
  4. utiliser test pour vérifier la syntaxe d'une chaine de caractere ?
    Par italiasky dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/04/2007, 15h41
  5. Réponses: 2
    Dernier message: 06/12/2006, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo