C/C++ Aus XML-String Kommazahlen extrahieren?
-
Boah! Danke Erst mal! Das muss ich mir erst mal in aller Ruhe anschauen.
Aber ... Ich habs eben mal mit Dev-C++ kompiliert und er spuckt mir nur '12.6' aus, naja ok. Nur - der XML-Rahmen enthält ja, wenn empfangen wird, "echte"
Anfürhungszeichen ("). Im Code wurden diese durch (backslash") ersetzt und dann funktioniert es ja auch einigermaßen.Frage: Wird der Backslash automatisch generiert, wenn die Daten vom Netzwerk in den Buffer, Variable geschrieben werden? Ich glaub ja nich, mmmmhh .... Wenn nicht, dann werd ich wohl nich um die RegEx drumrumkommen, oder?
-
die backslashes braucht man nur, wenn man "'s in stringkonstanten im code hat. im speicher sind sie nicht mehr vorhanden.
char *cp = "12\\34\"56\""; // <-- im speicher steht dann [b]12\34"56"[/b] die beiden äusseren "'s sind die begrenzungen des string-literalsder code^^ reagiert übrigens auf "'s und nicht auf \'s. funktioniert er unverändert bei dir?

-
Nein, ich hab noch char in int umgeschrieben, so wie feuerteufel-Fan es schrieb. Aber dann spuckt er mir auch nur 12.6 aus. Ich finde den Code von ihm ein weinig zu überdimensioniert. Da hab ich selbst mal was probiert ...
/* sscanf example */ #include <stdio.h> int main () { char sentence []="<FTC Fx=\"1.234\" Fy=\"54.75\""; float x, y; sscanf (sentence,"<FTC Fx=\"%f\" Fy=\"%f\"",&x, &y); printf ("%f, %f\n",x,y); getchar(); return 0; }Ausgabe: 1.234000, 54.750000
Und das ist auch genau was ich erstmal möchte nur das mir die Anführungszeichen in der Quelle (sentence) noch Sorgen machen.
Also Du meinst, dass was im Spiecher liegt (sentence) sind ganz normale ("). Ich muss nur noch wissen, was genau in sentence drinne steht und dann kann ich mit
sscanf(sentence, "XML-Rahmen mit Kommazahlen in Anführungszeichen", &x, &y);die Kommazahlen auslesen, oder? Ich muss nur die Anführungszeichen im XML-Code bei sscanf als (backlash") eingeben und dann liest sscanf die Kommazahlen korrekt aus dem NetzwerkEmpfangspuffer aus, oder?
-
matze77 schrieb:
Nein, ich hab noch char in int umgeschrieben, so wie feuerteufel-Fan es schrieb. Aber dann spuckt er mir auch nur 12.6 aus.
du musst nur den 'static char idx;' in 'static int idx;' ändern, dann sollte es gehen. bei mir ist die ausgabe:
12.600000 234.456000 645.790000 2.400000 456.814000 65.330000 1.234000 54.750000 345.760000 2346.600000 0.000000 3546.000000und von wegen überdimensioniert: eine vollwertiger XML-parser wäre überdimensioniert.

-
matze77 schrieb:
oder? Ich muss nur die Anführungszeichen im XML-Code bei sscanf als (backlash") eingeben und dann liest sscanf die Kommazahlen korrekt aus dem NetzwerkEmpfangspuffer aus, oder?
stell fragen zu 'sscanf' am besten im ansi-c forum

-
Tja, und mit TinyXML wäre es bestimmt nicht schneller gegangen.

-
Habt Dank, Leute!
Also, der Code von Feuerteufel funktioniert doch einwandfrei! Ich Dämlack hab getchar(); mit in die Schleife genommen, damit das ConsolenFenster offen bleibt, hehe. Deswegen nur ein Wert.
Nochmal Danke an Feuerteufel!
-
matze77 schrieb:
Nochmal Danke an Feuerteufel!
gern geschehen. vergiss aber nicht, dass der code einfach nur strings aus anführungszeichen extrahiert. sollte wider erwarten dein XML doch dynamisch sein, dann nimm bitte einen echten XML parser, z.b expat oder das, was artchi vorgeschlagen hat.
- und - fehlerteufel bitte.

-
matze77 schrieb:
Verzeihung! Ich meine dann C++. Und wie siehts damit aus?
Jetzt hast du aber C

Grüssli
-
Hehe!
Hauptsache irgendwatt!
-
Dravere schrieb:
Jetzt hast du aber C
ist doch nicht schlimm. ich wette, der code geht unverändert durch 'nen c++ compiler.
