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

ASP.NET Discussion :

Tester si une chaine ne contient que des caractères blanc


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut Tester si une chaine ne contient que des caractères blanc
    Bonjour,

    Voilà, je souhaiterais savoir si il existe une fonction ou une technique en C# pour tester si une chaine ne contien que des caratères "blanc" (espaces, tabulations, saut de lignes...)

    En php, j'utilisait ctype_space, mais je n'arrive pas à trouver l'équivalent en c#

    Merci d'avance pour votre aide !

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Deux possibilités parmis tant d'autres...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    string toTest = "blabla";
    bool result:
     
    // 2.0
    result = Array.TrueForAll(toTest.ToCharArray(), delegate(char c)
    {
        return c == ' ';
    });
     
    // 3.5
    result = toTest.ToCharArray().All(c => c == ' ');

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup pour ta réponse rapide, mais je ne comprend pas ta syntaxe...

    Pourrais tu me l'expliquer STP ?

    Excuse moi, je débute en c# ^^

    Sinon, le C# n'a pas directement une fonction pour faire ça ?

    Et dans la même veine, je cherche aussi un équivalent de la fonction php trim, avec les même fonctionnalité (je sais, j'en demande beaucoup ^^)

    Merci pour ton aide (et d'avance aussi à tout les autres qui pourrais m'aider là dessus ^^)

  4. #4
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Je l'ai un peu fait exprès, à vrai dire. Mon but était de vérifier si tu faisais une recherche un peu par toi même... Ce qui n'est apparement pas le cas.

    http://msdn.microsoft.com/en-us/libr...rs(VS.71).aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    result = Array.TrueForAll(toTest.ToCharArray(), delegate(char c)
    {
        return c == ' ';
    });
    Est l'équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bool result = true;
    foreach (char c in toTest.ToCharArray())
    {
        if (c != ' ')
        {
            result = false;
            break;
        }
    }

  5. #5
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaChaine.Trim() + surcharges éventuelles...
    Avant de te lancer dans le c# est-ce que tu as des notions de programmation orientée objet ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Pongten Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string.Trim() + surcharges éventuelles...
    Avant de te lancer dans le c# est-ce que tu as des notions de programmation orientée objet ?
    Oui, mais seulement des "notion" puisque je n'ai jamais fait de l'OO qu'avec PHP 5 ^^

    Je n'avais pas remarqué que les variables était aussi considéré comme des objet en C#, je te remerci, ça m'aide beaucoup.

    Citation Envoyé par neptune Voir le message
    Je l'ai un peu fait exprès, à vrai dire. Mon but était de vérifier si tu faisais une recherche un peu par toi même... Ce qui n'est apparement pas le cas.
    Personnelement je n'ai jamais fait que du PHP. c'est le seul language de programation que je connais, alors c'est un peut dure pour moi de me mettre au C#, la logique n'a rien a voire, à tel point que j'ai beaucoup de mal à faire des recherche quand j'ai un probleme : le manuel n'est pas organisé, ni rédigé pareil, et certain terme pour des choses identiques difères..

    Résultat, à logique diférentes, techniques de recherche diférentes... En effet, je ne suis pas encore autonome pour ce qui est des recherches quand j'ai un probleme en C#, car la plupart de mes recherches sont innéficaces et tombent à coté.

    Par contre, on ne peut pas vraiment dire que je ne fait pas de recherche par moi même... j'y passe des heure particulièrement frustrantes à cause de mon innéficacité !

    Ca ira mieux quand je cernerais mieux la logique global de ce language.

    Pour finir, je suis un peut perplexe, par ce que je ne voix pas comment là page de man que tu me fournit aurrais put m'aider sur ta syntaxe...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Bon, tu me repproche de pas faire de recherche, mais de 2 choses l'une

    Soit tu n'as pas lu correctement ma question ce qui serait quand même un comble

    Soit je suis vraiment débile et je ne comprend pas ton code.

    Comme je penche pour la deuxieme solution, je vais t'expliquer ce que j'ai compris de ton code, et pourquoi je n'ai pas l'impression que ça correspond à ce que je recherche.

    Comme je le disait dans mon message, je cherche une fonction qui fasse l'équivalent de la fonction php "ctype_space". Comme j'ai donné le lien vers la page de man dans mon sujet, même pas besoin de faire une recheche.

    Cette fonction teste si la chaine n'est composé que de caractère blanc, à savoir, de manière non exaustive, espaces, tabulations, saut de lignes...

    Ce que j'ai compris de ton code, c'est qu'il teste si la chaine contien un espace.

    Personnelement, je me moque que la chaine contienne un espace, ce que je veux c'est être sur que il y a au moin 1 caractere affichable dedans...

    Qu'est-je mal compris ?

    Merci d'avance pour votre aide ^^

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Assimil Voir le message
    Ce que j'ai compris de ton code, c'est qu'il teste si la chaine contien un espace.
    Non non, ça renvoie true si TOUS les caractères de la chaine sont des espaces.
    Sinon tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool onlySpaces = (laChaine.Trim(' ').Length == 0)
    A ma connaissance il n'existe pas de fonction équivalente à ctype_space, qui a d'ailleurs (à mon avis) une utilité assez limitée...

  9. #9
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Est-ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string.IsNullOrEmpty(MaChaineATester);
    correspond mieux à ce que tu cherches ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Grace à Pongten qui m'a dit comment faire un trim, j'ai trouvé une solution qui semble marcher :

    String.IsNullOrEmpty(maChaine.trim())

    En effet, contrairement à ce que dit le manuel, trim() ne supprime pas que les espaces de début et de fin, mais aussi tout les caractère blanc ! (il me semble en tout cas)

    Pensez vous que c'est une bonne solution ?

    J'aimerais aussi savoir ce que je n'ais pas compris dans le code de Neptune

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Pongten Voir le message
    Est-ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string.IsNullOrEmpty(MaChaineATester);
    correspond mieux à ce que tu cherches ?
    Non, justement, c'est le probleme que j'ai avec IsNullOrEmpty (je l'utilise déjà pas mal ^^), il me retrounais true quand il y avait des espaces ou des saut de ligne, mais en le combinant avec le trim, comme je le disait plus haut, ça semble marcher

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Non non, ça renvoie true si TOUS les caractères de la chaine sont des espaces.
    Sinon tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool onlySpaces = (laChaine.Trim(' ').Length == 0)
    A ma connaissance il n'existe pas de fonction équivalente à ctype_space, qui a d'ailleurs (à mon avis) une utilité assez limitée...
    Ok, mais comme je le disait, ce n'est pas un probleme d'espace mais de caractère blanc (dont les espaces font partie, mais pas que).

    Apres, je peut t'assurer que tout les ctype_* me servaient énormément en PHP, dont le ctype space...

    Ce n'est pas parce que tu n'as jamais eu besoin d'une fonction qu'elle est innutile, non ?

  13. #13
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Pour le code de Neptune :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    string toTest = "blabla";
    bool result:
     
    // 2.0
    result = Array.TrueForAll(toTest.ToCharArray(), delegate(char c)
    {
        return c == ' ';
    });
    Array.TrueForAll est une méthode qui vérifie le prédicat (paramètre 2) sur tous les éléments du table passé en paramètre 1.
    Ici, le prédicat est une méthode anonyme qui compare son paramètre avec ' ';

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // 3.5
    result = toTest.ToCharArray().All(c => c == ' ');
    Il s'agit ici de la syntaxe pour le framework 3.5 (mais je ne connais pas encore bien). Je pense qu'il s'agit d'une expression lambda mais qu'on me corrige si je me trompe.

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Assimil Voir le message
    En effet, contrairement à ce que dit le manuel, trim() ne supprime pas que les espaces de début et de fin, mais aussi tout les caractère blanc !
    Si tu l'appelles sans paramètres, ça supprime tous les caractères blancs. Sinon tu peux préciser quels caractères tu veux supprimer.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Pongten Voir le message
    Je pense qu'il s'agit d'une expression lambda mais qu'on me corrige si je me trompe.
    C'est bien ça

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Pongten Voir le message
    Pour le code de Neptune :
    Array.TrueForAll est une méthode qui vérifie le prédicat (paramètre 2) sur tous les éléments du table passé en paramètre 1.
    Ici, le prédicat est une méthode anonyme qui compare son paramètre avec ' ';
    En fait, ce n'est pas la fonction que je ne comprend pas, mais la syntaxe ^^

    Sinon, pensez vous que la solution que j'ai choisis sois bonne ? pourrait-elle poser certain problemes, et si oui, lesquels ?

    Merci beaucoup pour votre aide !

  17. #17
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 54
    Points
    54
    Par défaut
    bon je veux pas m'avancer mais utiliser les expressions régulières ne serait il pas judicieux pour vérifier qu'il n'y a que des caractères d'espacement

    ca donne quelquechose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Regex emptyStringPattern=new Regex("^\s*$");
    string laStringAverifier="    ";
    string uneAutre="  n  ";
     
    emptyStringPattern.IsMatch(laStringAverifier);
    //renvoie true
     
    emptyStringPattern.IsMatch(uneAutre);
    //renvoie false

  18. #18
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Je sort de réunion, désolé de ne plus être intervenu sur ce thread plus tôt. Désolé pour mon agressivité, j'ai peut-être réagit trop violement. Le problème est qu'on voit trop souvent des utilisateurs qui ne cherchent pas assez.

    Si tu veux calquer le comportement de la méthode PHP que tu utilises, le mieux est de créer une fonction Helper, c'est à dire une fonction utilitaire. Pour cela, créer une nouvelle classe statique, par exemple StringUtil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static class StringUtil
    {
    }
    Pour les notions d'OOP, je te laisse compulser la littérature ;-)

    Déclare une nouvelle fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static bool ContainsOnlySpaces(string searchString)
    {
        // Code
    }
    Le code à y insérer peut-être différent. On t'as proposé plusieurs façon de faire et j'ai (évidement) une préférence pour les miennes.

    Personnelement, la méthode utilisant Trim n'est pas la bonne car elle modifie la chaine à tester. Quand à la suggestion des expressions régulières, c'est une excellente idée, mais les regexp sont parfois compliquée à mettre en oeuvre.

    Pongten à bien résumé le bout de code avec la méthode anonyme. Si la syntaxe te parrait étrange, c'est normal, mais ca viendra. Donc, dans un premier temps, je te suggère ceci:

    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
    public static class StringUtil
    {
    	public static bool ContainsOnlySpaces(string searchString)
    	{
    		bool result = true;
     
    		foreach (char c in toTest.ToCharArray())
    		{
    		    if (c != ' ')
    		    {
    		        result = false;
    		        break;
    		    }
    		}
     
    		return result;
    	}
    }
    Tu utiliseras cette méthode, un peu comme en PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if (StringUtil.ContainsOnlySpaces(myString))
    {
    }

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par tatayet_le_felee Voir le message
    bon je veux pas m'avancer mais utiliser les expressions régulières ne serait il pas judicieux pour vérifier qu'il n'y a que des caractères d'espacement
    C'est un peu utiliser un bulldozer pour écraser une mouche... les expressions régulières, c'est pas génial pour les perfs

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup pour toutes ces précisions Neptune ! ^^

    Je comprend ton énervement pour les gens qui ne cherche pas, j'ai un peut le même probleme quand je file un coup de main à des programmeur PHP.

    Mais c'est vraix que chercher, ça s'apprend aussi, mais si ça semble naturel quand on a l'habitude.

    Je me rend d'ailleur bien compte de la dificulté que ça représente quand on cherche des info sur des sujet que l'on ne maitrise pas du tout...

    Quoi qu'il en soit, je ne cherche pas particulièrement à reproduire le comportement de PHP, ça n'aurrait pas grand intéret...

    Je veux surtout vérifier si ma chaine ne contient pas QUE des caractère blanc (pas forcément que des espaces, mais aussi des tab, saut de ligne, tab verticals, et TOUT autre caractere blanc)

    Pour ce qui est des regex, je m'en méfi comme de la peste.
    Outre le fait que je les trouve lourde, elles sont dificile à lire et à manipuler, et ça provoque souvent des erreur... (d'autant plus que je suis particulièrement dyslexique !)

    En plus de ça, elle ont souvent un comportement tres légèrement diférent en fonction des languages, voir même entre diférentes version d'un même language (j'avais eu ce probleme avec PHP)

    Jusqu'a maintenant, j'ai toujours réussi à m'en passer en PHP, en utilisant les ctype_* là ou tout le monde utilisait les regex.

    je suis conscient que le trim modifie la chaine, c'est ce qui fait qu'apres mon test je n'utilise pas la chaine qui a été trimé, et c'étais la solution la plus simple à mettre en oeuvre

    Meme si l'on utilise pas la chaine trimmé apres le test celà pose-t-il un problème ?

    Merci pour le temps que vous me consacrez

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Vérifier qu'une variable ne contient QUE des chiffres ?
    Par Zebulon777 dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 30/09/2010, 12h47
  2. Réponses: 8
    Dernier message: 08/05/2009, 15h54
  3. savoir si une chaine ne comporte que des lettres
    Par kamouminator dans le forum C
    Réponses: 22
    Dernier message: 16/11/2006, 02h19
  4. Réponses: 4
    Dernier message: 20/02/2006, 00h33
  5. Réponses: 20
    Dernier message: 07/12/2005, 15h32

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