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

Langage Delphi Discussion :

Récupérer une chaine dans une autre en tenant compte des espaces


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Récupérer une chaine dans une autre en tenant compte des espaces
    Bonjour,
    J’ai besoin de vos lumières. Dans un TEdit, sont enregistrées les informations suivantes :
    (n°1 n°15 n°18 et n°24) cette chaine est délimitée par des espaces entre chaque numéro. Je souhaite compter le nombre de chiffre (1) dans la chaine ou le nombre de (n°1).
    J’ai utilisé la fonction ci-dessous. Le problème de cette fonction, c’est qu’elle récupère tous les chiffres (1) même ceux qui appartiennent au (15) et au (18).



    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
    function CountString(const S, StrToCount : string) : integer;
    var N : integer;
    begin
    result := 0;
    N      := Posex(StrToCount,S,1);
    while N <> 0 do begin
    inc(result);
    N := Posex(StrToCount,S,N+Length(StrToCount));
    end;
    end;
     
    Exemple d’utilisation :
     
    Prcedure NB_Chiffre ;
    Var
    I :Integer ;
    Begin
    I :=StrtoInt( CountString(Edit1.text, ‘1) ;
    End ;

    J’obtiens au total 3 puisque la fonction ne fait pas la différence entre le chiffre 1 et le chiffre 1 de 15
    Merci infiniment pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    ... espaces entre chaque numéro ... Je souhaite compter le nombre de chiffre (1) dans la chaine ou le nombre de (n°1).
    Puisque les informations sont séparées par des espaces y'a qu'à chercher les occurrences de la subString '1 ' (le 1 suivi d'un espace).

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Bonjour,


    Puisque les informations sont séparées par des espaces y'a qu'à chercher les occurrences de la subString '1 ' (le 1 suivi d'un espace).

    A+.
    Problème s'il y a un nombre avec n°31 il sera compté lui aussi.

    Pour ma part, je collerai ces données dans TStringList, puis je transformerai les n° par des #13#10 et je parcourrai la liste en lisant les lignes afin de vérifier les valeurs numérique de chacun.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Bonjour,


    Puisque les informations sont séparées par des espaces y'a qu'à chercher les occurrences de la subString '1 ' (le 1 suivi d'un espace).

    A+.
    j'aurais dit substring de 'n°1 '
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Re chaine à rechercher
    Merci pour vos réponses. Cependant j'ai déjà tenté (substring de 'n°1 ') en laissant un espace dans la chaine à rechercher, mais ça na pas fonctionné.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-bonjour,

    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
    function CountSubString(const S, SubString: string): integer;
    var po,L: integer; Sc : string;
    begin
      result := 0; L:=length(SubString); Sc:=S;
      po := Pos(SubString, Sc);
      while po > 0 do begin
        inc(result); Delete(Sc,1,po+L);
        po := Pos(SubString, Sc);
      end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer; S:string;
    begin
      S:='n°1 n°15 n°18 et n°24 n°1 n°31 n°44 n°1 n°55 n°1 ';
      I := CountSubString(S, 'n°1 ');
      showmessage(inttostr(i)); // Affiche 4 : Ok
    end;
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Re extraire une chaine
    Merci Gilbert Geyer
    Ça fonctionne très bien.
    Merci également à tous les intervenants pour leur aide.

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Ça fonctionne très bien.
    Oui, mais ainsi c'est mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function CountSubString(const S, SubString: string): integer;
    var po, L: integer; Sc: string;
    begin
      result := 0; L := length(SubString); Sc := S;
      po := Pos(SubString, Sc);
      while po > 0 do begin
        inc(result); Delete(Sc, 1, po + L - 1); // <= avec -1 c'est mieux
        po := Pos(SubString, Sc);
      end;
    end;
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. [SP-2010] récupérer les terme d'une colonne d'une liste dans une autre liste
    Par Noruk dans le forum SharePoint
    Réponses: 2
    Dernier message: 09/02/2015, 18h15
  2. Réponses: 7
    Dernier message: 25/02/2011, 13h06
  3. Réponses: 1
    Dernier message: 27/10/2009, 21h48
  4. chercher caractére d'une chaine dans une chaine
    Par ulysse031 dans le forum Langage
    Réponses: 25
    Dernier message: 21/03/2007, 18h09
  5. Réponses: 2
    Dernier message: 19/10/2005, 15h38

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