splitten eines GPS streams... bitte um hilfe!(habe schon einigen code)


iMarcG5

Mitglied
guten Tag erstmal... Ok es ist (!)feiertag(!).. trotzdem wollt ich bissl was machen :)
nun denn jetyt zu meinem Problem...
ich les mit .NET1.1 einen virtuellen COMPort ein!.. benutze dazu die Win API! also
kommt das, was die GPS/Maus sendet als Stream (als w[rde man es in eine Datei schreiben wollen)... jetzt kommts...
Yeilen vom GPs sehen ungef'hr so aus:

$GPRMC,133626,A,5336.432,N,00957.436,E,000.0,035.0,040897,000.3,W*6C
$GPGLL,5336.432,N,00957.436,E,133627,A*24

und noch viele Zeilen mehr
ich wollte eigentlich mit der Split funktion erstmal trennen ...
bei mir kommt eigentlich sowas rein :

$GPRMC,133626,A,5336.432,N,00957.436,E,000.0,035.0,040897,000.3,W*6C <CR><LF>
$GPGLL,5336.432,N,00957.436,E,133627,A*24 <CR><LF>

also dachte ich , l'sst es sich ja wundersch;n an dem <CR><LF> trennen .. natuerlich erstmal replacen sonst gehts net (jetzt net lachen... sieht kompliyiert aus, wollte aber nicht anders funktionieren :p )
PS: s ist der stream, den ich [ber den Konstruktor bekomme
Code:
 			string ss = s.Replace("<CR>" , "\n"); // dass es auch in meiner Textbox richtig angezeigt wird
    			string sss = ss.Replace("<LF>" , ";");
    			string [] ssss = sss.Split(';');
so... jetzt m[sste ja eigentlich jede neue Zeile in ssss ueber den index aufgerufen werden koennen
also hier im Beispiel:
ssss[0] waere --> $GPRMC,133626,A,5336.432,N,00957.436,E,000.0,035.0,040897,000.3,W*6C
ssss[1] waere -->$GPGLL,5336.432,N,00957.436,E,133627,A*24

u.s.w. .. das geht aber net... liegt das am Stream oder woran__... ich verstehs net richtig!

auf jeden fall scheint bei mir nur
ssss[0] beschrieben zu werden

waere nett, wenn ihr mir helfen koenntet, byw. anstoesse wie ihr es vielleicht eher machen wuerdet
ich will eben schoene uebersichtliche strings haben, damit ich sie speater in der Split - Klasse trennen kann also nach den Kommas und so!
das sollte ja dann kein grosses Problem mehr sein aber dass ich die einyelnen Zeilen schoen als einyelne Strings hab, auf die ich zugreifen kann...

danke auf jeden Fall fuer die Hilfe;)
 

Caracho

Mitglied
Deine Replace-Strategie ist durchaus verbesserungsfähig ;) (nicht bös gemeint)

Ich würds so machen:

Code:
string[] lines = System.Text.RegularExpressions.Regex.Split(s, "<CR><LF>");
string[] werte;

for(int i = 0; i < lines.Length; ++i)
{
 werte = lines[i].Split(','); // Kommas splitten
 
 // die werte der Zeile verarbeiten
}
 

iMarcG5

Mitglied
sind mehrere Klassen ... das alles zu posten wäre zu viel, aber ich hab sie von hier:
serial Port

da hab ich das ganze einfach ein wenig verschlankt und alles rausgeschmissen was nicht nötig war
auf jeden Fall läufts ... das war ein Kampf :rolleyes:

PS: alles 100% verstehen was er macht tu ich leider auch nicht... habs aber auch nicht genau angeschaut... auf jeden Fall läufts

PS: danke für die antwort... ist wirklich besser...
aber da ich erst seit 5 Tagen C# mache is klar dass ich ja noch nicht alle kniffs kenne ;)

"System.Text.RegularExpressions.Regex.Split(s, "<CR><LF>");"
kannte ich einfach nicht .. kannst du kurz beschreiben was das macht
oder lass .. ich schau in der MSDN nach
Thnx :)
...
 

jccTeq

Erfahrenes Mitglied
Beschäftige dich beim Thema "parsen" mal intensiv mit regulären Ausdrücken! Die helfen ungemein.