Decoupage de trame NMEA

cs_max59000
Messages postés
4
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
15 mars 2008
- 14 mars 2008 à 19:37
cs_jfrancois
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
- 15 mars 2008 à 11:31
Bonjours,
je souhaite decouper une trame MNEA du type:
$IIMWV,R,000.30,N,A<CR><LF>
$WIXDR,C,020.0,C,<CR><LF>
$IIVHW, , , , ,7.2,N, ,<CR><LF>
$IIMTW,9,C<CR><LF>

et pour cela j'ai fais cette fonction qui devrai decouper la trame separer par les virgules, les ranger dans un tableau pour ensuite mettre a jours une autre classes mais elle ne fonctionne pas pouriez vous m'aider svp.

voila ce que j'ai fais:
DecoderTrame();
{
 istringstream iss=Text;
 AnsiString mot[20];
 i=0;
 
 do
 {
  std::getline(iss,mot[i],',');
  i=i+1;
 }
 while (i!=15);


 switch(mot[0])
 {
  
  case '$IIMWV':
   if(mot[5]!="N<CR><LF>")
   {
    SetAngleVent(mot[1]);                // angle du vent en degré
    SetDirRelat(mot[2]);                 // direction relative par rapport au cv3f
    SetVitVent(mot[3]);       // vitesse du vent
    SetUnitVitVent(mot[4]);              //unité de la vitesse du vent (en noeud)
   }
   else
   break;
  
  case '$WIXDR':
   if(mot[5]="<CR><LF>")
   {
    
    SetTempAir(mot[2]);      // temperature de l'air
    SetUnitTempEau(mot[3]);             //identique a l'unite de temperature de l'air
    
   }
   else
   break; 


  case '$IIVHW':
   if(mot[8]="<CR><LF>")
   {
    
    SetVitVent(mot[5]);      //vitesse du vent
    SetUnitVitVent(mot[6]);             //unité de vitesse du vent identique a celle de la vitesse du bateau
    
   }
   else
   break;


  case '$IIMTW' :
   if(mot[3]="C<CR><LF>")
   {
    
    SetTempEau(mot[1]);       //vitesse du vent
        
   }
   else
   break;
 }

3 réponses

cs_juju12
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
15 mars 2008 à 00:03
avec un switch on ne peut utiliser que des entiers...
là tu compares des adresses mémoires et sûrement pas les chaîne donc ça ne peut pas marcher...
0
cs_max59000
Messages postés
4
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
15 mars 2008

15 mars 2008 à 08:38
il faudrai donc que je fasse des "if"?? mais il y a aussi un probleme avec getline ...
merci
0
cs_jfrancois
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
2
15 mars 2008 à 11:31
Fonction strcmp(chaîne1,chaîne2) pour comparer 2 chaînes de caractères, retourne 0 si les chaînes sont égales (stricmp() si la casse des caractères ne doit pas être prise en compte).

Ce qui peut donner :

DecoderTrame()
{
   // --- Séparer les mots de la phrase NMEA
   istringstream iss = Text;
   AnsiString mot[20];
   int i = 0;
   do
   {
      std::getline(iss,mot[i],',');
      ++i;
   }
   while (i != 15);





   // --- Traiter en fonction du premier mot
   if (strcmp(mot[0],"$IIMWV") == 0) // 1er mot = $IIMWV
   {
      if (strcmp(mot[5],"N\r\n") != 0) // 6ème mot != N<CR><LF>
      {
         SetAngleVent(mot[1]);   // angle du vent en degrés

         SetDirRelat(mot[2]);    // direction relative par rapport au cv3f

         SetVitVent(mot[3]);     // vitesse du vent

         SetUnitVitVent(mot[4]); // unité de la vitesse du vent (en noeud)

      }
   }
   else if (strcmp(mot[0],"$WIXDR") == 0) // 1er mot = $WIXDR
   {
      if (strcmp(mot[5],"\r\n") == 0) // 6ème mot = <CR><LF>
      {
         SetTempAir(mot[2]);     // température de l'air

         SetUnitTempEau(mot[3]); // identique à l'unité de température de l'air

      }
   }
   else if (strcmp(mot[0],"$IIVHW") == 0) // 1er mot = $IIVHW
   {
      if (strcmp(mot[8],"\r\n") == 0) // 9ème mot = <CR><LF>
      {
         SetVitVent(mot[5]);     // vitesse du vent

         SetUnitVitVent(mot[6]); // unité de vitesse du vent identique à celle de la vitesse du bateau

   
      }
   }
   else if (strcmp(mot[0],"$IIMTW") == 0) // 1er mot = $IIMTW
   {
      if (strcmp(mot[3],"C\r\n") == 0) // 4ème mot = C<CR><LF>
      {
         SetTempEau(mot[1]); // vitesse du vent

      }
   }
}



Jean-François
0