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 :

Transformer une chaine de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut Transformer une chaine de caractères
    Bonjour

    Je reçois dans une variable des caractères issus d'un port série, ils arrivent comme ceci :

    <CR><LF>HELLO<CR><LF>

    Je voudrai au final, ne récupérer que le contenu qui m'intéresse c'est à dire juste le mot "Hello" et mettre à la fin du mot reçu le caractère de fin "\0"

    Mon but est de supprimer tout les caractères /r/n de début et fin de chaine.

    J'ai fait ceci, mais ça ne fonctionne pas convenablement, pourriez vous m'aider svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    unsigned char buffer_reception[80];
     
    ...
     
    for(i=2;i<80;i++)		// On ne regarde qu'après la 3eme position de la séquence recue.
    if (buffer_reception[i]== '\n')	// Recherche du dernier caractère '\r' 
    {
    buffer_reception[i] = '\0';  // '/r' trouvé ? on le remplace par '\0'		
     
    for (i=2; buffer_reception[i] != '\0'; ++i)  // Ré-écriture de la chaine en décalant -2 à gauche pour supprimer les premiers caractères /r/n
    buffer_reception[i-2] = buffer_reception[i];
    }
    Je vous remercie de votre aide,

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Une question du même style a déjà été posée hier : http://www.developpez.net/forums/d10...ctere-fichier/

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Mon problème est que la taille de ce qui est reçu n'est pas connu à l'avance :
    la seule constante, c'est que chaque chaine reçu commence et finie par /r/n

    J'ai pensé utiliser strstr pour remplacer chaque /r/n par '\0'

    en faisant ainsi, je vais me retrouver avec ceci :

    \0CHAINE RECUE\0

    Le premier '\0' va pose problème pour exploiter le contenu de cette chaine.

    Que me conseilleriez vous , faut il tout décaler d'un caractère vers la gauche ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Bonjour,

    Je me demande quoi vous voulez avoir un '\0' (ou autre) au début.
    Juste un à la fin, indique la fin du message
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Bonjour,

    Si je remplace chaque /r/n par un caractère de fin, je vais forcement me retrouver avec deux \0 en début de chaine.

    Je voudrai éviter cela justement.
    Est ce que la meilleure méthode consiste à tout déplacer : les 80 caractères, 2 rangs vers la gauche pour les 2 premiers \0 ?

    Je pense que tout déplacer prend du temps, je ne suis pas certain que ce soit la meilleure solution ...

    Je vous remercie de votre aide,

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Y a plein de façons de faire. Maintenant, cela dépend à quoi va servir cette chaine, comment elle sera utilisée, sur quoi tu travailles (PC, µc -contrainte d'optimiser taille code/vitesse-, etc), etc. On ne connait pas ce genre d'info, on ne peut pas t'aiguiller vers telle ou telle voie.

    Parmi les méthodes :

    * Soit copier dans un autre buffer, en copiant tout ce qui se trouve entre les deux \r\n.

    * Soit remplacer le dernier \r\n par \0 et utiliser un pointeur qui pointera à l'adresse "buffer_reception+2".

    * Soit tout décaler de deux caractères à gauche et remplacer le dernier \r\n par \0.

    * ...

    Telle méthode peut convenir comme elle peut ne pas convenir, il n'y a pas de solution universelle. C'est l'art de la programmation : coder de telle ou telle manière en fonction du contexte, des contraintes, etc.

Discussions similaires

  1. Transformer une chaine de caractère
    Par Invité dans le forum Django
    Réponses: 3
    Dernier message: 06/03/2009, 09h57
  2. Réponses: 11
    Dernier message: 04/11/2007, 21h32
  3. Réponses: 3
    Dernier message: 12/06/2006, 11h18
  4. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  5. Réponses: 2
    Dernier message: 14/01/2005, 15h40

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