Aller au contenu


Photo
- - - - -

Problème avec la librairie TextFinder


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 Paqane

Paqane

    Nouveau membre

  • Membres
  • 6 messages

Posté 16 avril 2017 - 12:51

Bonjour,

Après avoir récupéré le fichier xml d'un site de météo, j'utilise TextFinder pour en extraire les données dont j'ai besoin. La réponse obtenue pour les données sans décimales (int) sont correctes. Par contre, lorsque les données à récupérer comportent des décimales, et que j'utilise float, je n'obtiens correctement que les unités suivies de double zéro (ex: 5.00) alors que les données xml sont, par exemple, 5.47. 

 

... extrait du fichier xml...

 

<temperature unitType="metric" units="C">3.2</temperature>
<dewpoint unitType="metric" units="C">2.8</dewpoint>
<pressure unitType="metric" units="kPa" change="0.14" tendency="à la baisse">100.6</pressure>
<visibility unitType="metric" units="km">3.2</visibility>
<relativeHumidity units="%">97</relativeHumidity>
 
Dans mon code, j'ai défini mes variables comme suit:
 
  int RH; //Humidité relative
  float TC; //Température en Celsius
  float VIS; //Visibilité
 
Et le code de récupération de ces données...
 
if(finder_rh.find("<temperature unitType=\"metric\" units=\"C\">"))  
{
      float TC=finder_rh.getValue(TC);
      Serial.print("TC : ");Serial.println(TC);
}
if(finder_rh.find("<visibility unitType=\"metric\" units=\"km\">"))  
{
      float VIS=finder_rh.getValue(TC);
      Serial.print("VIS : ");Serial.println(VIS);
}
if(finder_rh.find("<relativeHumidity units=\"%\">"))  
{
      int RH=finder_rh.getValue();
      Serial.print("RH : ");Serial.println(RH);
}
 
La réponse obtenue est la suivante:
 
helloconnecting...
connected
TC : 3.00
VIS : 3.00
RH : 97
 
Pourquoi et comment obtenir les résultats complets, c'est-à-dire dans le cas suivant 3.2 pour la température et la visibilité? Merci de m'aider!
 
 
 


#2 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 429 messages
  • Gender:Male
  • Location:Paris

Posté 16 avril 2017 - 12:59

On dirait qu'il s'arrête de lire la valeur quand il rencontre un point.

Il faudrait qu'il lise jusqu'à la balise fermante. </temperature> par exemple.

 

Et tu as essayé le getFloat() ?

 

Je suis curieux, tu obtient ton xml comment sur arduino ?


Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 


#3 arobasseb

arobasseb

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 690 messages
  • Gender:Male
  • Location:BORDEAUX (33)
  • Interests:Informatique, robotique et sciences technique en générale.

Posté 16 avril 2017 - 01:45

Je suis du même avis que Path, tu devrais utiliser getFloat. D'après la documentation, getValue retourne un entier long.

#4 Jan

Jan

    Webmaster

  • Membres
  • PipPipPipPipPip
  • 4 747 messages
  • Gender:Male
  • Location:Rhône Alpes

Posté 16 avril 2017 - 05:19

j'ai reçu les réponses de Paqane par e-mail je vous les mets ici . A mon avis ayant vu un e-mail indiquant qu'une réponse était présente sur le fil il a répondu à l'e-mail :

 

à 14h12

 

Bonjour Path

 
Mon fichier source xml provient de ce site...
 
 
effectivement, il refuse d'acquérir les données décimales...
J'espère que ça peut t'aider.

 

à 15h10 :

 

Merci a vous deux.

 
Mon problème est résolu. Lorsque j'écris finder_TC.getFloat(' ');
j'obtiens alors pour mes deux variables TC=3.0 et VIS=8.10 lesquelles sont les bonnes valeurs lorsque je consulte le fichier xml mis à jour.
 
Encore merci!


#5 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 429 messages
  • Gender:Male
  • Location:Paris

Posté 16 avril 2017 - 06:08

Merci Jan :)


  • Jan aime ceci

Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users