Pages: [1]   Go Down
Author Topic: utiliser les chaines  (Read 837 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

J'utiliser lethernet board.

Dans mon programme je souhaite lire la reponse du serveur.

pour ce faire je mets :

char c = client.read();

ce qui lit la reponse du serveur

je voudrais mettre une fonction disant :

si la réponse (donc "c") ne contient pas "connection ok" alors je recommence

sans doute quelque chose dans le genre :

if (c ne contient pas "connection ok"){

je recommence

}

pour le if pas de soucis je sais faire, par contre je ne maitrise pas du tout les fonctions concernant les chaines de caractères

et "c" contient plus que "connection ok", ca contient aussi "user agent..."

donc en fait il faut que je regarde si parmi la chaine "c" il y a bien la sous chaine "connection ok"

Pouvez vous me mettre sur la piste svp.

Merci d'avance !

}
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Une chaîne de caractères est en fait comme un tableau. Si tu veux comparer la première lettre de la chaîne, tu dois faire un if avec nom_chaîne[0] etc.
« Last Edit: July 05, 2009, 02:41:58 pm by Vincent » Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il me semble que pour l'instant il n'y a pas encore de chaine à traiter, car "char c" ne contient qu'un seul caractère. Donc il faut d'abord accumuler tout ce que tu peux recevoir dans une chaine de caractère.

Ensuite pour tester s'il y a "connection ok", utilise simplement la librairie TextString : http://www.arduino.cc/en/Tutorial/TextString

Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, merci pour les infos !

Comment puis je faire pour accumuler tous les "c" recus ? et quel serait le type de cette variable
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Une chaine de caractère ('string' en anglais) peut se représenter par un tableau de caractère. Il est prudent de déterminer une taille maximale à ce que tu reçois (j'ai choisi dans l'exemple arbitrairement 255, par habitude, mais on aurait pu mettre une valeur plus petite ou plus grande).

Code:
char msg[255];
int index = 0;

while (client.available() && index < 255) {
  msg[index++] = client.read();
}

// traitement, index contenant le nombre total de caractères reçus

// ne pas oublier de remettre à zéro l'index avant de faire la prochaine lecture
index = 0;
« Last Edit: July 06, 2009, 01:27:44 am by julien@pobot.org » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci Luj06, tu es toujours de bon conseil smiley-wink

donc en fait cest sur msg que je travaille après, cest ca ?

seulement msg est un tableau, cest ca ?

Du coup ce nest pas une string mais un tableau donc le code suivant ne va pas marcher ?

if(strstr(msg, "connection ok")
{
action a realiser
}
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah oui bien vu, mes deux messages sont en contradiction smiley car je n'avais pas vu que TextString avait recréé un objet String.

Donc cela devrait donner :

Code:
#include <WString.h>

String msg = String(255);

void loop()
{
   while (client.available() && msg.length() < 255) {
      msg.append(client.read());  
   }

   // traitement de msg

   if (msg.contains("connection ok"))
   {
        // la fête !
    }

    // ne pas oublier de remettre à zéro la chaine avant de recommencer
    msg = "";
}

« Last Edit: July 06, 2009, 04:13:36 pm by julien@pobot.org » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok merci Luj06, je teste et vous tiens au courant !
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec un peu de retard je vous l'accorde je voulais tester le code fourni par Luj06.

Mais ou puis je trouver la library Wstring.h ?

Merci !
Logged

Pages: [1]   Go Up
Jump to: