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 :

Obtenir une sous-chaine avec Pos


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Obtenir une sous-chaine avec Pos
    Bonjour,

    soit ma variable ValeurRxChar (String) qui contient la valeur suivante :

    AT+GMM
    Nokia E90

    OK


    Je modifie cette variable de façon à ne garder que "Nokia E90" grâce au code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure ConvertValeurRxChar;
    var
      A, B : Integer;
    begin
      A := Pos(Chr(10) , ValeurRxChar) + 1;
      B := Pos('OK' , ValeurRxChar) - 4;
     
      ValeurRxChar := Copy(ValeurRxChar, Pos(Chr(10) , ValeurRxChar) + 1, B - A);
    end;

    Malheureusement, ma variable initiale vaut parfois :

    AT+GMM
    Samsung J600
    OK


    ... et dans ce cas mon code me renvoie "Samsung J60" du fait qu'il n'y ait pas d'espace entre la seconde ligne et le "OK"

    J'aurais donc voulu dans mon code ne prendre que la sous-chaine comprise entre le premier retour chariot (Chr(10)) et le second plutôt qu'entre le premier retour chariot et le "OK"...

    Seulement je ne sais pas comment obtenir la position du second Chr(10) car je n'ai jamais utilisé la fonction Pos avant.

    Pourriez-vous m'aider svp ?

    Merci

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Salut,

    Je pige pas trop, mais en gros, souhaites-tu suivant cet algo :

    Si la ligne numéro trois n'est pas vide = j'insère une ligne entre ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 17
    Points
    17
    Par défaut ...
    Salut, merci pour cette réponse aussi rapide...

    Non, en somme je veux récupérer la seconde ligne...

    (je réalise que mon explication n'était peut-être pas très claire lol)

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par mlepretre Voir le message
    Salut, merci pour cette réponse aussi rapide...

    Non, en somme je veux récupérer la seconde ligne...

    (je réalise que mon explication n'était peut-être pas très claire lol)
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    showmessage(memo1.Lines.Strings[2]);

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Si tu peux te fier au retour chariot alors tu peux procéder comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
     A, B: Integer;
    begin
      // récupérer la position du premier retour chariot
      A := Pos( Char(13), ValeurRxChar );
      B := PosEx( Char(13), ValeurRxChar, A+1 );
      ValeurRxChar := Copy( ValeurRxChar , A+1, B - A + 1 );
    end;
    Bon alors y'a peut-être des problèmes de décalage de 1 caractère à revoir mais en gros l'idée c'est de copier ce qu'il y a entre le premier retour chariot et le second.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 17
    Points
    17
    Par défaut ...
    Excellent !!! C'est exactement ce que je cherchais !

    Merci, à bientôt...

  7. #7
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    Par défaut
    salut

    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure ConvertValeurRxChar(sep:char);
    var P : Integer;
    begin
      P:=Pos(sep , ValeurRxChar);
      delete(ValeurRxChar,1,P);
      P:=Pos(sep , ValeurRxChar);
      delete(ValeurRxChar,P,length(ValeurRxChar));
      ValeurRxChar:=trim(ValeurRxChar);
    end;

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

Discussions similaires

  1. Extraire une sous chaine avec un regex
    Par luminatis dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 26/04/2012, 09h46
  2. Réponses: 5
    Dernier message: 22/11/2011, 16h12
  3. Extraire une sous-chaine avec une REGEXP
    Par EnRadeSurEclipse dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/03/2011, 15h47
  4. Obtenir une sous-chaine dans la maquette
    Par TsCyrille dans le forum Rave
    Réponses: 3
    Dernier message: 28/08/2008, 15h40
  5. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28

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