Go Down

Topic: Peut on extraire une partie uniquement d'une chaine de caracter (Read 863 times) previous topic - next topic

pierrot10

Bonjour,

J'arrive recupérer cette valeur

Quote

char test[20];
char = "dirw3 +2209876789"


Y a t il une fonction qui me permets de me récupérer tout ce qu'il y a apres l'espace, soit
Quote
+2209876789


et s'il y avait un espace apres le 9, il ne prend rien de plsu que jusqu'au 9?

En PHP, il y a la fonction explode() en passant comme delilioteur l'espace. Et il me place toutes les valeurs dans un array.
Peut on faire une truc du genre aussi, avec Arduino?
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

pierrot10

#1
Jul 18, 2013, 04:40 pm Last Edit: Jul 18, 2013, 05:21 pm by pierrot10 Reason: 1
J0'ai aussi essayé de comparé comme ceci

Quote
dirw4 rrrrrrr eee


Mon but étant d'extraire "rrrrrrr"

   
Code: [Select]

char inSerial[]="dirw4 rrrrrrr eee"
char nu[20];
for(int i=0; i<20; i--){
         
          if(i > 4){ // Je commance à la position 5 (l'expace)
            Serial.print(inSerial[i]); // J'affiche les caracter
           
strcat(nu,inSerial[i]);  // Ca ca ne marche pas nom plus PORTANT c est deux char?
         
            if(inSerial[i] == " " || inSerial[i] == "\0"){ // Des que je rencontre un espace, je sors de ma boucle, mais il n'accèpte pas la comparaison???
              break;
            }
         
        }
}
Serial.println(nu); /Ca devrait afficher "rrrrrrrr"
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

MiGaNuTs

#2
Jul 18, 2013, 06:53 pm Last Edit: Jul 18, 2013, 07:03 pm by MiGaNuTs Reason: 1
tu peut t'en sortir en utilisant les fonctions  strtok() ou sscanf(), ou une combinaison des deux.
La première fonction est vraiment tres chiante a utiliser

Code: [Select]

/****************************************************/
/*         Exemple d'utilisation de strtok          */
/*  Découper une chaine selon un certain séparateur */
/****************************************************/

// dans le code suivant on découpe avec l'espace
// mais on peut remplacer l'espace en lignes 34 et 46
// par n'importe quel autre caractère
// ou même chaine de caractères

#include <stdio.h>
//#include <stdlib.h>
#include <string.h>

const int Taille = 200;

int main (void)
{
   char phrase[Taille + 1] = "toto va a la plage"; // la chaine à découper
        // on découpe selon les espaces
   char tabMots[100][Taille + 1]={""}; // tabMots contient 100 mots vides
      // un tableau d'au plus 100 chaines de taille maxi Taille
      // il va nous servir à recevoir les mots de la chaine découpée
      // à la fin du processus de découpage il aura l'allure suivante :
      // toto
      // va
      // a
      // la
      // plage
   char * p; // un pointeur interne qui va servir à la fonction de découpage
   int i;  
   
     
   p=strtok(phrase," "); // p vaut le premier mot (toto)
   strcpy(tabMots[0],p); // on copie toto dans la première ligne de tabMots
      // le premier appel à strock va chercher le premier mot avant l'espace
      // on copie ce mot (toto) dans le tableau tabMots en première ligne
      // A la fin de l'instruction strtok a laissé en mémoire le pointeur p
      // sur le début du mot suivant (va)
      // Les appels suivants de strtok dans la boucle ci-dessous utilisent
      // ce pointeur interne d'où la présence de NULL dans la ligne 46
   
   i=1;
   while (p!=NULL)
       {
           p=strtok(NULL," ");
               // on cherche un nouveau mot à partir de la position courante
               // de p
           if (p!=NULL) // si on a trouvé un nouveau mot
               {
                   strcpy(tabMots[i],p);
                   // on le copie dans le tableau en i ème ligne
                   i++; // on se prépare pour le mot suivant
               }
       } // fin de while
   
   // affichage
   for (i=0;i<100 && tabMots[i][0]!=0;i++) printf("\nMot %d : %s",i,tabMots[i]);
   
   fflush(stdin);getchar();  
} // fin de main


bricoleau

http://lmgtfy.com/?q=extraire+une+chaine+en+c

juste histoire de dire que des fois tu peux trouver l'info facilement et plus vite

regarde ce qui se dit sur strtok()
;)

skywodd

Bonjour,

Pourquoi sortir les tanks (strtok et sscanf) pour si peu ;)
Deux boucles et un pointeur suffit !

Code: [Select]
char test[] = "abc 123 def"; // La chaine de char d'origine
char *ptr = test; // Le pointeur vers le début de ta sous chaine (si elle existe)

// Avance le pointeur ptr jusqu'au premier espace, puis le saute
while(*ptr != ' ' && *ptr != '\0') ++ptr;
if (*ptr != '\0')
  ++ptr;
else
  return; // Si fin de chaine = pas de sous chaine trouvé -> return

// Cherche l'espace suivant puis le remplace par un \0 (fin de chaine)
while(*ptr != ' ' && *ptr != '\0') ++ptr;
if (*ptr != '\0') *ptr = '\0';

// ptr pointe désormais sur le morceau "123"


J'ai détaillé, mais en réalité ça fait 4 lignes de code ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up