Character Stream kopieren



  • Folgendes Problem, vielleicht gibt es auch eine andere Lösung:

    ich hab einen Charakter Stream in der Form *balbalblub
    Wenn ich das richtig verstehe ist das ein Zeiger auf das erste Zeichen einer Kette.
    Bsp:

    *blabla = "time=21&freq=21"

    Diesen String will ich nun auseinander parsen. dazu verwende ich strtok. Um zum Bsp. an die Zeit zu kommen muss ich strtok auf "&" verwenden und danach auf "=". wenn ich danach noch an die frequenz möchte geht das nicht, da strtok den string schon komplett zerlegt hat. eigentlich auch logisch.
    Ich habe versucht die länge des Strings zu bestimmen und mit strncopy zu kopieren, da steigt aber das programm aus, der compiler bringt keine fehlermeldung. Charakter Arrays mag strtok leider nicht.

    Ich würde am liebesten den string für jeden parameter den ich brauche komplett kopieren und dann zerlegen (also zeit, freq, blabla). Aber vielleicht gibt es da noch einen anderen ansatz.



  • Wenn der string immer vom Aufbau identisch ist -> sscanf()



  • Inwiefern mit scanf(), wie geht das? Identisch ist der String von der Abfolger der Parameter, wobei die einzelen Parameter unterschieldich groß sein können bzw. Zeichen enthalten...das heißt von 0 - 99999.99 können alle Zeichkombination vorkommen.



  • float f1, f2;
    sscanf(blabla, "time=%f&freq=%f", &f1, &f2);



  • GH_ENT schrieb:

    ...
    *blabla = "time=21&freq=21"
    Diesen String will ich nun auseinander parsen....

    Das sieht verdammt danach aus, als ob Du HTTP-Parameter parsen willst. Da hätte ich zwei Möglichkeiten für Dich:

    (1) Eine C-Funktion, die analog der awk-Funktion "split" arbeitet und den Text, z.B. getrennt durch das '&'-Zeichen in ein char * Array aufsplittet. Dazu eine Funktion, mit der man vorher feststellen kann, wieviel Parameter es werden. Diese Funktion könntest Du ohne inhaltliche Modifikation einsetzen.

    (2) Eine Funktion, die eine Zeichenkette, bestehend aus HTTP-Parametern inkl. Sonderzeichen nach HTTP-Syntax, durchforstet und auswertet. Diese Funktion müßte noch angepasst werden.

    Beide Funktionen sind aus produktiven Systemen, d.h. ausreichend getestet. Wenn Du noch Bedarf hast, gib mir 'ne kurze Mail mit Variante (1) oder (2).



  • Vielen Dank.


Anmelden zum Antworten