String umwandeln

Hallo zusammen,

ich möchte einen String der so aussieht :

[8] S:19.00 I:21.00 P:15.00 H:81

(wobei das nach dem Doppelpunkt jeweils variabel ist)

in "8,19.00,21.00,15.00,81" umwandeln.

So wie ich das sehe gibt es verschiedene Herangehensweisen. Ich habe es noch nicht wirklich hinbekommen. Wie seht ihr das. Wie sollte ich hier vorgehen ? Danke im voraus!

:slight_smile:

Kommt darauf an, was danach mit dem umgewandelten Text passiert und welchen Bereich die Zahlen haben können

Danke für die schnelle Antwort. Er wird via serieller Schnittstelle ausgegeben.

Ist das in den [] Klammern immer 8 oder immer einstellig?

Ist die vorhandene Zeichenkette ein char-Array oder ein Vertreter der Klasse String? Wird er manuell eingegeben oder von einem Rechner erzeugt?

Am besten, Du zeigst mal Deinen Sketch, da müssen wir nicht alle Einzelheiten erfragen. Den Sketch bitte in Codetags (</> oben links).

Gruß Tommy

Wenn ich dich richtig verstanden habe, muss man nur ein paar Zeichen weglassen und eins austauschen.
Das Blank oder der Doppelpunkt kann in ein Komma übersetzt werden, ich wählte den Doppelpunkt.

char inText[] = "[8] S:19.00 I:21.00 P:15.00 H:81";
char outText[sizeof(inText)];

void setup() {
  Serial.begin(250000);
  filter(inText, outText);
  Serial.print(F("Ergebnis: '"));
  Serial.print(outText);
  Serial.println(F("'"));
}
void  filter(char* inp, char* outp) {
  for (; *inp; inp++)  {
    if (*inp == ':') {
      *outp++ = ',';
    } else if (*inp == '.' || isdigit(*inp)) {
      *outp++ = *inp;
    }
  }
  *outp = 0;
}
void loop() {}
Ergebnis: '8,19.00,21.00,15.00,81'

Du wolltest das Ergebnis nur ausdrucken, das geht dann einfacher so:

char inText[] = "[8] S:19.00 I:21.00 P:15.00 H:81";

void setup() {
  Serial.begin(250000);
  Serial.print(F("Ergebnis: '"));
  filter(inText);
  Serial.println(F("'"));
}
void  filter(char* inp) {
  for (; *inp; inp++)  {
    if (*inp == ':') {
      Serial.write(',');
    } else if (*inp == '.' || isdigit(*inp)) {
      Serial.write(*inp);
    }
  }
}
void loop() {}
Ergebnis: '8,19.00,21.00,15.00,81'