Pages: [1]   Go Down
Author Topic: Comparer string  (Read 698 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Je souhaiterais comparer deux chaines pour cela j'effectue cela:

Code:
String  inData="";
         if (Serial.available() > 0) {
             int h=Serial.available();   
       
    for (int i=0;i<h;i++){
                 inData += (char)Serial.read();
             }
   if (String(inData) == "this") {
    Serial.println("StringOne == \"this\"");
  }
        }

Mais cela ne fonctionne pas, quelqu'un aurait une solution?
Par la suite je souhaiterais pouvoir spliter une chaine par exemple "allume la radio : on"  recuperer ce qu'il y a devant et derriere les ":".
Merci d'avance
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

tu peux essayer quelque chose du style ;

Code:
if (inData.equals("this")) {
...
}
Logged

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

Bonjour,

N'utilise pas String, utilise un simple tableau de char.
Traite un char à la fois, tu test, si == ':' tu regardes le contenu du tableau avec strcmp(), sinon tu le stocke dans le tableau et tu incrémentes une variable d'index.
Logged

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

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

Apres plusieurs tentative, je n'ai pas réussi à comparer correctement mes deux chaines.
quelqu'un pourrait-il m'aider?
merci d'avance
Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3026
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Apres plusieurs tentative
Quelles tentatives.
Bernardino t'avais proposé une solution.

Maintenant est-ce que le problème c'est la comparaison de chaines ou est-ce autre chose?
Parce que le bout de code que tu montres donnes à penser que tu ne gères peut être pas bien la réception de ta chaine.
As-tu fait imprimer la chaine reçue pour voir si tu stockes et compares bien la chaine complète?

En plus comme le fait remarquer skywodd il faut se méfier de String qui n'est pas très économe en ressources et peut jouer des tours en bouffant ta mémoire.
Logged

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

Bonjour,
voilà ce que j'ai essayé:

Code:
String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
}

void loop() {
  // print the string when a newline arrives:
  if (stringComplete) {
if (inputString == "this")
{
Serial.println(inputString);
}
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}
Logged

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

Personne n'a de solution?
Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3026
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voir là: http://arduino.cc/en/Tutorial/StringComparisonOperators
et là : http://arduino.cc/en/Reference/StringObject

La petite phrase suivante, extraite du lien ci-dessus, peut expliquer ton problème:
Quote
Note that constant strings, specified in "double quotes" are treated as char arrays, not instances of the String class
Les chaines entre quotes ne sont pas considérées comme des instances de String, donc la comparaison ne fonctionne pas.
== ou .equals ne fonctionnent qu'avec des instances de String voir l'exemple cité au début de ma réponse.
Logged

Pages: [1]   Go Up
Jump to: