Pages: [1]   Go Down
Author Topic: int aus String extrahieren.  (Read 621 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 2
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: February 05, 2013, 03:32:47 pm by mcGeorge » Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 136
Posts: 2866
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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!
« Last Edit: February 05, 2013, 03:52:37 pm by jurs » Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Genial!
Logged

Pages: [1]   Go Up
Jump to: