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#] Comment délimiter une chaine selon un caractère ?


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 29
    Points
    29
    Par défaut [C#] Comment délimiter une chaine selon un caractère ?
    Bonjour,

    Quelqu'un peut-il me dire comment délimiter une chaîne selon un caractère ? Par exemple à partir de la chaîne :

    -rw-rw-rw- 1 user group 0 May 10 16:15 ex060501.log

    => Je veux obtenir chaque élément dans un tableau ; on aurait par exemple
    => tab[0] = -rw-rw-rw-
    => tab[1] = 1
    => tab[2] = user
    => tab[3] = group
    => tab[4] = 0
    => tab[5] = May
    => tab[6] = 10
    => tab[7] = 16:15
    => tab[8] = ex060501.log

    Merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Tu peux utiliser

    string.split(' ');

    qui va te créer un tableau de string en utilisant l'espace comme élément séparateur (ou tout autre caractère se trouvant entre les côtes).

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Merci b0uba2 mais en fait, ce qui n'apparaît pas dans mon copié/collé c'est que parfois il y a plusieurs espaces :

    -rw-rw-rw- (5 espaces) 1 (1 espace) user (3 espaces) group

    du coup les espaces seront eux même considérés comme des éléments

    En fait il faudrait d'abord que j'arrive à n'avoir qu'un espace entre chaque élément comme ce qu'on voit dans mon 1er message ; une idée ... ?

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Si le nombre d'espace est tjrs le mm, tu peux utiliser Replace...
    Replace(' ',' ');
    Replace(' ',' ');

    Autant de fois qu'il y a d'espace différent. Bon ok, ça fait un peu rafistolage...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Si je résume le probleme tu as une chaine de caractères. tu voudrais récupérer les mots de cette phrase sans pour autant récupérer les espaces.
    Ces espaces peuvent etre plusieurs à la suite.

    Et bien je ne vois qu'une solution à ton problème : les expressions régulières.


    Il doit y avoir des cours sur les expressions régulière ici, je te donne juste celle qui correspond à "un espace ou plus"
    " +" Le + permet de dire que tu veux le caractère devant une fois ou plus.



    Tu utilise ensuite la méthode Split() de la classe Regex et non la méthode Split de la classe String.
    La différence c'est que celle de la classe String utilise des délimiteurs fixes, celle de Regex utilise une expression régulière, et donc un délimiteur dont on ne connait pas la taille mais dont on connait la structure (ici un ou plusieurs espaces).

    (C#)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    using System.Text.RegularExpressions;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    string [] tab;  //Tableau de chaines de caractères
     
    string RgXpDelimiteur = @" +"; //Le délimiteur dont je parlais, avec un @ car parfois les expressions régulières sont mal interprétées par le compilateur.
     
    tab =  Regex.Split("taphrase", RgXpDelimiteur)   
    //ici l'expression regulière dont je te parlais
    et normalement, tu obtiendras les tab[0], tab[1] etc que tu veux.


    Voila voila,
    si je me suis trompé veuillez accepter mes humbles excuses^^

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    Sinon tu peux faire un split(' '); et apres tu test avec un Trim(); (ce qui fait que si la case de ton tableau ne contient qu'un espace, le trim rendra vide..)

    Bonne continuation
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup les gars de m'avoir répondu ça fait plaisir

    J'ai retenu la solution de Misdrhaal : je viens de la tester et elle marche impec c'est exactement ce que je voulais ... rien à dire il a mis le code clairement, avec des commentaires c'est super j'ai tout compris ! Merci beaucoup !

    b0uba2 le nombre d'espaces entre les éléments n'était pas fixe en fait ; c'était un coup 7 par exemple, puis 2 après, 5,etc ...

    notalp je ne suis pas sûr d'avoir compris ta proposition si je ne me trompe pas le Trim() supprime les espaces donc si la case ne contient qu'un espace ca renverra du vide et moi en fait je voulais supprimer tous les espaces et mettre chaque élément dans un tableau comme ca :
    => tab[0] = -rw-rw-rw-
    => tab[1] = 1
    => tab[2] = user
    => tab[3] = group
    => tab[4] = 0
    => tab[5] = May
    => tab[6] = 10
    => tab[7] = 16:15
    => tab[8] = ex060501.log
    Ainsi je n'v pas "au pti bonheur la chance" pour tomber sur un élément et non un espace : tout est bien rangé à sa place.

    Bonne soirée à vous ! J'espère pouvoir vous rendre cette aide un jour ! @ bientôt

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

Discussions similaires

  1. Comment récupérer une chaine de caractère selon son début et sa fin?
    Par neo62matrix dans le forum Général Python
    Réponses: 3
    Dernier message: 21/03/2012, 10h08
  2. [C#] Comment inverser une chaine de caractères ?
    Par just1980 dans le forum Contribuez
    Réponses: 6
    Dernier message: 01/05/2011, 20h35
  3. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  4. Réponses: 2
    Dernier message: 14/01/2005, 15h40
  5. comment vider une chaine de caractère
    Par gaut dans le forum C
    Réponses: 13
    Dernier message: 12/09/2003, 11h30

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