Pages: [1]   Go Down
Author Topic: Peut on extraire une partie uniquement d'une chaine de caracter  (Read 662 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J0'ai aussi essayé de comparé comme ceci

Quote
dirw4 rrrrrrr eee

Mon but étant d'extraire "rrrrrrr"

   
Code:

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"
« Last Edit: July 18, 2013, 10:21:13 am by pierrot10 » Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Orleans
Offline Offline
Jr. Member
**
Karma: 1
Posts: 88
Macbidouilleur
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/****************************************************/
/*         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
 
« Last Edit: July 18, 2013, 12:03:03 pm by MiGaNuTs » Logged


Offline Offline
Full Member
***
Karma: 4
Posts: 158
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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()
 smiley-wink
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

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

Code:
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 smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1]   Go Up
Jump to: