Problem mit currtentLine.replace

Hallo zusammen,

mein Arduino bekommt übers WLAN folgende Zeichenkette:

%2219%22,%20%222%22,%20%2216%22,%20%224%22,%20%2236%22,%20%2249%22,%20%226%22,%20%2228%22,%20%2240%22,%20%2229%22,%20%2211%22,%20%22[]%22

und soll mit den Befehlen:

currentLine.replace("%22", "");
currentLine.replace("%20", "");
currentLine.replace(",[]", "");

folgendes daraus machen:

19,2,16,4,36,49,6,28,40,29,11

Heraus kommt aber:

%2219%22,%222%22,%2216%22,%224%22,%2236%22,%2249%22,%226%22,%2228%22,%2240%22,%2229%22,%2211%22,%22[]%22

Das verstehe ich nicht. Was soll denn hier falsch sein?
Grüße

Was sehen Sie, wenn Sie diesen Code ausführen?

String currentLine = "%2219%22,%20%222%22,%20%2216%22,%20%224%22,%20%2236%22,%20%2249%22,%20%226%22,%20%2228%22,%20%2240%22,%20%2229%22,%20%2211%22,%20%22[]%22";

void setup() {
  Serial.begin(115200);
  Serial.println();

  Serial.println(currentLine);
  currentLine.replace("%22", "");
  Serial.println(currentLine);
  currentLine.replace("%20", "");
  Serial.println(currentLine);
  currentLine.replace(",[]", "");
  Serial.println(currentLine);
}

void loop() {}

Auf meinem Arduino UNO sehe ich

%2219%22,%20%222%22,%20%2216%22,%20%224%22,%20%2236%22,%20%2249%22,%20%226%22,%20%2228%22,%20%2240%22,%20%2229%22,%20%2211%22,%20%22[]%22
19,%202,%2016,%204,%2036,%2049,%206,%2028,%2040,%2029,%2011,%20[]
19,2,16,4,36,49,6,28,40,29,11,[]
19,2,16,4,36,49,6,28,40,29,11

Dann wäre es vielleicht angebracht das zu debuggen.
Das habe ich mal für Dich gemacht.
Zeile1: Das Original
Zeile2: Dein "das kommt heraus".

%2219%22,%20%222%22,%20%2216%22,%20%224%22,%20%2236%22,%20%2249%22,%20%226%22,%20%2228%22,%20%2240%22,%20%2229%22,%20%2211%22,%20%22[]%22
%2219%22,---%222%22,---%2216%22,---%224%22,---%2236%22,---%2249%22,---%226%22,---%2228%22,---%2240%22,---%2229%22,---%2211%22,---%22[]%22

Nu schau: in der zweiten Zeile habe ich Dir die Ersetzung mit --- markiert.

Was fällt auf?

Hm ja, er ersetzt nur die %20, nicht aber die %22.

Wäre es jetzt informativ vollständigen Code zu zeigen?

...aber der Befehl zum rausstreichen der "%22" ist ja eindeutig vorhanden... Das verstehe ich halt nicht.

  Serial.println(F("\nProgrammstart"));
  Serial.println(currentLine.indexOf('['));
  Serial.println(currentLine.lastIndexOf(']'));
  Serial.println(currentLine);
  currentLine = currentLine.substring(1 + currentLine.indexOf("["), currentLine.lastIndexOf(']'));
  Serial.println(currentLine);
  currentLine.replace("%22", "");
  currentLine.replace("%20", "");
  currentLine.replace(",[]", "");

Und das ist die Ausgabe dazu (jetzt mit anderen Zahlen als oben, aber das ist ja egal):

Programmstart
6
167
GET /M[%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22] HTTP/1.1
%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22
%225%22,%2215%22,%229%22,%2230%22,%2219%22,%2235%22,%2214%22,%227%22,%2232%22,%2229%22,%2231%22,%2241%22,%226%22,%22[]%22


Drucken Sie das Endergebnis nicht aus?

String currentLine = "GET /M[%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22] HTTP/1.1%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22%225%22,%2215%22,%229%22,%2230%22,%2219%22,%2235%22,%2214%22,%227%22,%2232%22,%2229%22,%2231%22,%2241%22,%226%22,%22[]%22";

void setup() {
  Serial.begin(115200);
  Serial.println();

  Serial.println(currentLine);
  
  currentLine = currentLine.substring(1 + currentLine.indexOf("["), currentLine.lastIndexOf(']'));
  Serial.println(currentLine);

  currentLine.replace("%22", "");
  Serial.println(currentLine);
  
  currentLine.replace("%20", "");
  Serial.println(currentLine);
  
  currentLine.replace(",[]", "");
  Serial.println(currentLine);
}

void loop() {}

Wie mache ich das? Hab das noch nie so gemacht mit dem drucken dieses Ergebnisses?

Das ist eine ernst gemeinte Frage. Keine Ahnung wie man so Codeschnipsel debugt.

Öffnen Sie den seriellen Monitor, wählen Sie 115200 Baud im unteren rechten Popup
image

Tut sich nichts

Haben Sie den Code hochgeladen?
ist Com4 der richtige Port für Ihr Arduino?
welchen Arduino verwenden Sie?

Arduino Uni WiFi Rev.2
Ich kann nur COM4 auswählen
Hochladen und Serial Monitor starten liefert:

Das ist Unsinn!
UNSINN!
Wo gibst Du denn die Zeile aus, die Du nach dem replaces hast?
NIRGEND!

String currentLine = "GET /M[%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22] HTTP/1.1";

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  Serial.println(F("\nProgrammstart"));
  Serial.println(currentLine.indexOf('['));
  Serial.println(currentLine.lastIndexOf(']'));
  Serial.println(currentLine);
  currentLine = currentLine.substring(1 + currentLine.indexOf("["), currentLine.lastIndexOf(']'));
  Serial.println(currentLine);
  currentLine.replace("%22", "");
  currentLine.replace("%20", "");
  currentLine.replace(",[]", "");
  Serial.println(currentLine);
}
void loop()
{
}

Ergebnis:

22:47:53.793 -> Start...
22:47:53.793 -> 
22:47:53.793 -> Programmstart
22:47:53.793 -> 6
22:47:53.793 -> 167
22:47:53.793 -> GET /M[%225%22,%20%2215%22,%⸮Start...
22:47:54.687 -> 
22:47:54.687 -> Programmstart
22:47:54.687 -> 6
22:47:54.687 -> 167
22:47:54.687 -> GET /M[%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22] HTTP/1.1
22:47:54.720 -> %225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22
22:47:54.720 -> 5,15,9,30,19,35,14,7,32,29,31,41,6

Ehrlich?
Das will ich nicht beschreiben.

Ich habe kein Arduino Uno WiFi Rev2...
Ich habe es sowohl mit einer UNO als auch mit ESP32 versucht und der Serial Monitor zeigt an

GET /M[%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22] HTTP/1.1%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22%225%22,%2215%22,%229%22,%2230%22,%2219%22,%2235%22,%2214%22,%227%22,%2232%22,%2229%22,%2231%22,%2241%22,%226%22,%22[]%22
%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22] HTTP/1.1%225%22,%20%2215%22,%20%229%22,%20%2230%22,%20%2219%22,%20%2235%22,%20%2214%22,%20%227%22,%20%2232%22,%20%2229%22,%20%2231%22,%20%2241%22,%20%226%22,%20%22[]%22%225%22,%2215%22,%229%22,%2230%22,%2219%22,%2235%22,%2214%22,%227%22,%2232%22,%2229%22,%2231%22,%2241%22,%226%22,%22[
5,%2015,%209,%2030,%2019,%2035,%2014,%207,%2032,%2029,%2031,%2041,%206,%20[]] HTTP/1.15,%2015,%209,%2030,%2019,%2035,%2014,%207,%2032,%2029,%2031,%2041,%206,%20[]5,15,9,30,19,35,14,7,32,29,31,41,6,[
5,15,9,30,19,35,14,7,32,29,31,41,6,[]] HTTP/1.15,15,9,30,19,35,14,7,32,29,31,41,6,[]5,15,9,30,19,35,14,7,32,29,31,41,6,[
5,15,9,30,19,35,14,7,32,29,31,41,6] HTTP/1.15,15,9,30,19,35,14,7,32,29,31,41,65,15,9,30,19,35,14,7,32,29,31,41,6,[

Da kommt nach dem replace keine neue Ausgabe!
Ich habs oben beschrieben.
Nicht ärgern.
:wink:

:wink: nun ja

1 Like

Ja stimmt die letzte Ausgabe fehlt, ändert aber nichts an dem Problem. Ich schaus mir heute Abend an.