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 :

[C#] - Appliquer un masque à une string


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut [C#] - Appliquer un masque à une string
    Bonjour à tous,

    Ma question est simple, j'ai une string "12345678T9" par exemple et j'aimerai la formaté selon un masque saisi par l'utilisateur.
    Par exemple si le masque est "##### #####" cela donnerait "12345 678T9".

    J'ai essayé avec la fonction string.format mais sans succès il semblerait qu'il ne soit pas possible d'appliquer un masque de la sorte à une string (source http://idunno.org/archive/2004/14/01/122.aspx).

    Comment puis-je faire dans ce cas là ?

    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Par défaut
    Penche toi sur Regex
    Dans System.Text.RegularExpression

  3. #3
    Membre confirmé Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Bonjour et merci de ta réponse rapide !

    Le problème c'est que les utilisateurs du programme ne sont pas des informaticiens je ne peux donc pas leur demander de saisir des expressions régulières .

    Je souhaiterai vraiment que l'utilisateur saisisse un masque simple "##### #####" et que je puisse me débrouiller ensuite avec ça...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Un petit 'split' sur le masque et tu insères un espace au bon endroit avec une boucle.
    Il te faudra juste connaitre le séparateur (l'espace dans ton exemple).

    En gros ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          string val = "123456789T";
          string mask = "## ## #### # #";
          string[] str_array = mask.Split( ' ' );
     
          int count = -1;
          for( int i = 0; i < str_array.Length-1; i++ ) {
            count += str_array[i].Length + 1;
            val = val.Insert( count, " " );
          }

  5. #5
    Membre émérite 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
    Par défaut
    Si le texte est systématiquement un nombre, tu peux le convertir en nombre et le formater avec String.Format("{0:## #### ###}", number);

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonjour,

    Le problème c'est que tu ne peux pas convertir ça :

    En double vu que la chaine contient une lettre.

  7. #7
    Membre émérite 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
    Par défaut
    Je pense qu'il faudra soit utiliser une expréssion régulière un implémenter un ICustomFormatter

  8. #8
    Membre confirmé Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Merci pour vos réponses, j'aurais aimé utiliser une classe du Framework mais il semblerait que ce ne soit pas si simple.

    J'ai donc prit la solution de Binoo, avec une petite variante :

    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
     
                string maskedString = String.Empty;
                int index = 0;
     
                //On parcourt le masque
                foreach (char caract in mask)
                {
                    //Il y a un # donc on insère un caractère de la valeur à masquer.
                    if (caract == '#')
                    {
                        maskedString += value.Substring(index, 1);
                        index++;
                    }
                    else
                    {
                        //Insertion d'un caractère du masque.
                        maskedString += caract;
                    }
                }
    Avec ce code je peux appliquer un masque "##### #####" mais aussi "#####-#####' ainsi de suite...

    Il y a peut être plus simple ou plus propre, si quelqu'un à une suggestion je suis preneur !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/04/2012, 10h25
  2. appliquer un masque à une image
    Par dadou846 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 13/05/2009, 11h37
  3. Appliquer un masque a une image
    Par cyrillece dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/01/2008, 17h50
  4. appliquer des tags à une string
    Par exhortae dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 15/01/2008, 18h27
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

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