Go Down

Topic: parse string (Read 185 times) previous topic - next topic

Heiner1967

Aug 11, 2018, 06:10 pm Last Edit: Aug 11, 2018, 06:43 pm by Heiner1967
Hi, ich versuche das Beispiel von"Serial Input Basics nachzuvollziehen scheitere aber klaeglich and dem Beispiel 5.


Ich habe einen seriellen Datenstom der so aussieht:

"SP  0.0kW(:SUb 13.5V(:SSCt  27C(:SSMo  24C(:SP  0.0kW(:SP  0.0kW(:SP  0.0kW(...."


Der String beginnt mit dem Character S und endet mit ":"


Ich moechte nun eine Floatingvariable P beschreiben, eine Floating variable Ub, eine Integervariable SMO und eine integer Variable SCt.

Wie kann ich den Datenstring den ich zwischen S und : isoliere, nun zerlegen:

Ich verstehe diese strtokIndx Befehle einfach nicht. Kann mir da jemand helfen?

Vielen Dank schon mal

Heiner



agmue

Schau mal in diesem Thema in der Funktion ausgabe(), ob Dich das inspiriert.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Serenifly

#2
Aug 11, 2018, 07:13 pm Last Edit: Aug 11, 2018, 07:17 pm by Serenifly
strtrok() braucht man da nicht unbedingt. Jeder Wert had einen Identifikations-String davor. Daher ist es sehr viel einfacher mit strstr() nach dem Teil-String zu suchen. strstr() liefert einen Zeiger auf den Anfang des Teil-Strings, also muss man nur dessen Länge addieren um auf das erste Zeichen danach zu kommen

Code: [Select]

const char str[] = "SP  10.0kW(:SUb 13.5V(:SSCt  27C(:SSMo  24C(:";

float P, Ub;
int SMO, Sct;

void setup()
{
  Serial.begin(9600);

  char* ptr = strstr(str, "P");
  if (ptr != NULL)
    P = atof(ptr + 1);

  ptr = strstr(str, "Ub");
  if (ptr != NULL)
    Ub = atof(ptr + 2);

  ptr = strstr(str, "SMo");
  if (ptr != NULL)
    SMO = atoi(ptr + 3);

  ptr = strstr(str, "SCt");
  if (ptr != NULL)
    Sct = atoi(ptr + 3);

  Serial.println(P);
  Serial.println(Ub);
  Serial.println(SMO);
  Serial.println(Sct);
}

void loop()
{
}



Wenn du aus unerfindlichen Gründen ein String Objekt hast, dann verwende c_str() für den Zugriff auf das interne char Array. Auch das ist hier ein Vorteil gegenüber strtrok(). strtok() ginge da nicht weil es den String verändert

Go Up