2011-06-30 3 views
-2

Ci-dessous est ma chaînecomment puis-je analyser une chaîne en utilisant c

char test[1000]="$GPGSA,A,3,14,20,22,25,31,32,,,,,,,2.4,1.4,1.9*3A 
    $GPGSV,4,1,16,31,76,060,35,14,28,070,34,20,32,309,32,32,61,309,32*72\n 
    $GPGSV,4,2,16,25,21,053,29,24,37,258,29,23,14,277,27,12,,,21*44\n 
    $GPGSV,4,3,16,22,13,133,20,11,20,272,,16,11,161,,30,,,*4F\ 
    n$GPGSV,4,4,16,29,,,,28,,,,27,,,,26,,,*7E\n 
    $GPGGA,150427.8,4001.022852,N,10505.269674,W,1,06,1.4,1559.6,M,-21.0,M,,*53\n 
    $PQXFI,150427.8,4001.022852,N,10505.269674,W,1559.6,35.12,25.46,2.05*4A\n 
    $GPVTG,nan,T,nan,M,0.0,N,0.0,K,A*23\n 
    $GPRMC,150427.8,A,4001.022852,N,10505.269674,W,0.0,,280611,,,A*50"; 

Je veux obtenir chaîne

"$GPGGA,150427.8,4001.022852,N,10505.269674,W,1,06,1.4,1559.6,M,-21.0,M,,*53\n" 

d'en haut grande chaîne à l'aide du langage C.

S'il vous plaît aidez-moi.

+3

Essayez ['strstr()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/strstr.html). – pmg

+0

Est-ce que toutes vos chaînes sont formatées de cette façon, pouvez-vous simplement indexer dans la chaîne ou avez-vous affaire à différentes longueurs de chaînes avec des nombres de lignes différents, etc.? Comme l'a demandé @Chris Lutz, qu'avez-vous essayé, où êtes-vous coincé? J'ajouterais, y a-t-il plus de chaînes comme celle-ci et vous voulez quelque chose qui correspond à un format particulier? Nous avons besoin de plus d'informations. Ajouter plus d'informations et je vais supprimer mon downvote de la question. – pstrjds

Répondre

2

Vous dites quelle ligne vous voulez, mais vous n'avez pas dit pourquoi. Si vous dites ce qu'il en est de cette ligne qui en fait la ligne que vous cherchez, alors je pourrais commenter comment vous la trouverez.

Mais, fondamentalement, vous voudrez probablement séparer la chaîne en lignes. Vous pouvez utiliser strtok() pour rompre \n. Vous pouvez ensuite examiner les lignes, une à la fois.

1

La commande strstr(), qui fait partie de la bibliothèque C standard, peut être utilisée pour rechercher une sous-chaîne dans une chaîne.

0

Voici un analyseur NMEA hautement optimisé à l'origine pour microcontrôleurs: https://code.google.com/p/avr-nmea-gps-library/

Les données GPS NMEA est gérée dans nmea.cpp et nmea.h, facile à personnaliser/ajouter à votre projet que les classes semble résumer tout ce dont vous avez besoin. Ce qui est intéressant ici, c'est que ce code a été écrit pour les microcontrôleurs, avec très peu de mémoire et de puissance de traitement, faisant de ce code une alternative très rapide si la performance est également requise.

Questions connexes