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

Delphi Discussion :

Supprimer la fin d'une string


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Par défaut Supprimer la fin d'une string
    Coucou, je sais, c'est une question de newvie, mais y'a des fois, on doute de tout, même du plus simple!!

    Alors la question du jour est toute bête:

    J'ai un treeview avec des noeuds nommé ainsi:
    - Un mot ou une chaine (ex: 'root', 'Mon système',...)
    - Un mot ou chaine suivie d'un nombre entre parenthèses (ex: 'Musique (0)', Test (10563)',...

    J'aimerais, lorsque je lis le Txt d'un noeud isoler uniquement le nom, et pas les parenthèses avec ce qu'il y a dedans:
    - 'root' -> 'root'
    - 'test (5000)' -> 'test'
    - etc...

    Comment s'y prendre pour faire ça le + proprement possible ??

    Parce que les boucles à gogo pour lire la position du caractère '(', c'est pas cool, d'autant plus que si le caractère '(' n'existe pas, la copie foire (StrLcopy(Dest,Source,Position_( - 1) )

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Regarde dans l'aide la fonction POS

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Par défaut
    Pos + Delete = solution!

    Aller, le code pour les fénants ou les débutants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure machin;
    var
      s:string;
      i: integer;
    begin
      s := 'test (10)';
      i := Pos(s,'(');
     
      if (i>0) then
        Delete(s,i-1,50); // 50 pour être sur de tout effacer!
    end;

  4. #4
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Tu peux utiliser LeftStr à la place du Delete...

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Pour les fainéants, les débutants et surtout pour moi qui suis les deux...

    @Gradeek
    Ta solution ne peut pas fonctionner car POS doit être renseignée différemment. En effet, on indique en premier la sous-chaîne que l'on recherche et ensuite la chaîne dans laquelle on recherche.

    D'autre part si ta chaîne fait plus de 100 caractères et que '(' se trouve en 3ème position alors ta procédure échouera.
    Utilise length pour être certain d'effacer le restant de ta chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      s := 'test (10)';
      i := Pos('(',s);
      if i > 0
        then Delete(s,i-1,length(s));

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Par défaut
    Plutot que de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Delete(s,i-1,length(s));
    utilise plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      i := Pos('(',s);
      if i > 0 then 
      begin
        Delete(s,i,length(s));
        s:=trim(s);
      end;
    sinon :
    'test (10)'->'test' mais 'test(10)'->'tes'
    et si ton string commence par '(' rien ne sera supprimer.

    If count specifies more characters than remain starting at the index, Delete removes the rest of the string. If count is less than or equal to 0, no characters are deleted

Discussions similaires

  1. Supprimer les '\0' à la fin d'une string
    Par melleb dans le forum C#
    Réponses: 3
    Dernier message: 08/07/2008, 11h56
  2. Réponses: 2
    Dernier message: 26/06/2007, 16h04
  3. [C#][NET1.1]Supprimer les doublons d'une string[]
    Par Cervantes dans le forum C#
    Réponses: 2
    Dernier message: 19/04/2007, 11h08
  4. [regexp] supprimer la fin d'une chaine
    Par novices dans le forum Langage
    Réponses: 3
    Dernier message: 22/08/2006, 22h23
  5. [langage] supprimer le "/" à la fin d'une chaîne
    Par sommerset dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2005, 14h41

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