Go Down

Topic: int aus String extrahieren. (Read 724 times) previous topic - next topic

mcGeorge

Feb 05, 2013, 09:22 pm Last Edit: Feb 05, 2013, 09:32 pm by mcGeorge Reason: 1
Hallo @all,
ich brauche mal eure Programmiererfahrungen. Ich programmiere normalerweise nur unter Windows. Das Stringhandling ist unter Arduino echt "schwer":

Folgendes Beispiel:

// aus der Variable cZeile...
char cZeile[] = "GET //231=25,77 HTTP/1.1";

//Sollen folgende Werte extrahiert werden:
int iPosition = 231;
float fWert = 25.77;

Hat hier jemand ein Beispielcode, womit ich aus der obigen Zeile die Werte extrahieren kann und den Variablen zuweisen kann.

Vielleicht zum Hintergrund: Ich versuche eine Webschnittstelle zu programmieren, über die ich verschiedene Parameter meines Prorgammes anpassen kann. Diese Parameter speichere ich in einem i2c-eeprom und lese Sie wärend des Programmablaufes aus. Zum Beispiel die Wiederholfrequenz in meinem Programm in Sekunden. Ich möchte die Parameter wie folgt übergeben:
http://<ip-arduino>/231=25,77.
Die 231 ist die Startadresse im eeprom und die 25,77 ist der Wert, der ab dort geschrieben werden soll.

Vielen Dank im Voraus

jurs

#1
Feb 05, 2013, 09:45 pm Last Edit: Feb 05, 2013, 09:52 pm by jurs Reason: 1

Hallo @all,
// aus der Variable cZeile...
char cZeile[] = "GET //231=25,77 HTTP/1.1";

//Sollen folgende Werte extrahiert werden:
int iPosition = 231;
float fWert = 25.77;

Hat hier jemand ein Beispielcode, womit ich aus der obigen Zeile die Werte extrahieren kann und den Variablen zuweisen kann.


Ich poste einfach nochmal meine genialistische getIntFromString-Funktion, die ich mal zu dem Zweck gecodet habe, Integer-Zahlen aus einem String zu ziehen:
Code: [Select]

int getIntFromString (char *stringWithInt, byte num)
// input: pointer to a char array
// returns an integer number from the string (positive numbers only!)
// num=1, returns 1st number from the string
// num=2, returns 2nd number from the string, and so on
{
 char *tail;
 while (num>0)
 {
   num--;
   // skip non-digits
   while ((!isdigit (*stringWithInt))&&(*stringWithInt!=0)) stringWithInt++;
   tail=stringWithInt;
   // find digits
   while ((isdigit(*tail))&&(*tail!=0)) tail++;
   if (num>0) stringWithInt=tail; // new search string is the string after that number
 }  
 return(strtol(stringWithInt, &tail, 0));
}  


Damit kannst Du aus Deinem String "GET //231=25,77 HTTP/1.1" mit fünf verschiedenen Aufrufen die Integer-Zahlen:
231 25 77 1 1
herausziehen.

Beispielaufruf:
i=getIntFromString (cZeile, 1);
würde die 231 zurückliefern.

Wenn Du Gleitkommazahlen mit Dezimalpunkt und/oder Dezimalkomma rausziehen möchtest, oder Zahlen die den Integer-Wertebereich überschreiten, müßtest Du die Funktion natürlich in geeigneter Weise umschreiben. Oder ggf. mich fragen.

Wobei Du Dir natürlich auch Deine float Zahl selbst aus zwei Integers (Vorkommawert, Nachkommawert) zusammenbasteln kannst, wenn es sichergestellt ist, dass die Zahl garantiert mit zwei Nachkommastellen angegeben ist.

Viel Spaß damit!

mcGeorge

Vielen Dank jurs für deine Hilfe. Das ist es, was ich gesucht habe.

Genial!

Go Up