cs_max59000
Messages postés4Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention15 mars 2008
-
14 mars 2008 à 19:37
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDerniè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
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 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