Go Down

Topic: utiliser les chaines (Read 1 time) previous topic - next topic

KiliYaBB

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 !

}

Vincent

#1
Jul 05, 2009, 09:41 pm Last Edit: Jul 05, 2009, 09:41 pm by Vincent Reason: 1
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.

Luj06

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


KiliYaBB

Ok, merci pour les infos !

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

Luj06

#4
Jul 06, 2009, 08:25 am Last Edit: Jul 06, 2009, 08:27 am by julien@pobot.org Reason: 1
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: [Select]

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;

KiliYaBB

Merci Luj06, tu es toujours de bon conseil ;)

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
}

Luj06

#6
Jul 06, 2009, 11:12 pm Last Edit: Jul 06, 2009, 11:13 pm by julien@pobot.org Reason: 1
Ah oui bien vu, mes deux messages sont en contradiction :) car je n'avais pas vu que TextString avait recréé un objet String.

Donc cela devrait donner :

Code: [Select]

#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 = "";
}



KiliYaBB

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

KiliYaBB

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 !

Go Up