utiliser les chaines

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 !

}

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.

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 : String() - Arduino Reference

Ok, merci pour les infos !

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

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).

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;

Merci Luj06, tu es toujours de bon conseil :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
}

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

Donc cela devrait donner :

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

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

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 !