Problem mit currtentLine.replace

Das scheint es aber auch nicht zu sein mit dem unsichtbaren Zeichen^^

Also der Code ist:

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()
{
}

Das Ergebnis ist:

Start...

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

Der "Fehler" beim Hochladen des Codes ist:

Der Sketch verwendet 6301 Bytes (12%) des Programmspeicherplatzes. Das Maximum sind 48640 Bytes.
Globale Variablen verwenden 193 Bytes (3%) des dynamischen Speichers, 5951 Bytes für lokale Variablen verbleiben. Das Maximum sind 6144 Bytes.
avrdude: WARNING: invalid value for unused bits in fuse "fuse5", should be set to 1 according to datasheet
This behaviour is deprecated and will result in an error in future version
You probably want to use 0xcd instead of 0xc9 (double check with your datasheet first).

Hallo,
was ist das denn eigentlich noch für eine Fehlermeldung in rot die da im IDE Fenster kommt ? kann man nicht lesen weil das Monitor Fenster drüber liegt.
Heinz

Hallo,
also ich hab Deinen Code aus #41 auf einen UNO und einen ESP8266 Node MCU geladen läuft auf beiden.
lade mal den Blink Sketch drauf siehe Avrdude: WARNING: invalid value for unused bits in fuse "fuse5"
Heinz

Hallo,
fang mal bei Adam und Eva an . Versuch mal den hier und berichte

String a="%221,%222,%223,%224,%225";
String b=a;
String c=a;
String d=a;
void setup() {
  // put your setup code here, to run once:

Serial.begin(115200);
Serial.println(a);
a.replace("%",""); Serial.println(a);
b.replace("%2",""); Serial.println(b);
c.replace("%22",""); Serial.println(c);



}

void loop() {
  // put your main code here, to run repeatedly:

}

Danke für die Unterstützung!

Heraus kommt bei deinem Code die korrekte Lösung:

%221,%222,%223,%224,%225
221,222,223,224,225
21,22,23,24,25
1,2,3,4,5

hier wird auch gesagt, dass die Warnung invalid value for unused bits in fuse "fuse5" zu ignorieren ist und bedeutungslos ist. Das Problem muss woanders liegen.

Also ich habe das Problem gefunden. Folgender Code läuft korrekt, denn

String a="%221,%222,%223,%224,%225";
String b=a;
String c=a;
String d=a;
void setup() {
  // put your setup code here, to run once:

Serial.begin(115200);
Serial.println(a);
a.replace("%",""); Serial.println(a);
b.replace("%2",""); Serial.println(b);
c.replace("%22",""); Serial.println(c);



}

void loop() {
  // put your main code here, to run repeatedly:

}

liefert korrekter Weise:

%221,%222,%223,%224,%225
221,222,223,224,225
21,22,23,24,25
1,2,3,4,5

ABER!!!
Dieser Code mit einer eingefügten %20 statt %22

String a="%221,%202,%223,%224,%225";
String b=a;
String c=a;
String d=a;
void setup() {
  // put your setup code here, to run once:

Serial.begin(115200);
Serial.println(a);
a.replace("%",""); Serial.println(a);
b.replace("%2",""); Serial.println(b);
c.replace("%22",""); Serial.println(c);



}

void loop() {
  // put your main code here, to run repeatedly:

}

liefert Bullshit:

%221,%202,%223,%224,%225
221,202,223,224,225
21,02,23,24,25
%221,%202,%223,%224,%225

Er kann irgendwie die %22 nicht mehr sauber ersetzen, sobald da eine %20 im String steht. Keine Ahnung was das soll.

Dazu sei gesagt, dass ich mir heute ein neues Arduino Uni Wifi Rev2 geholt habe und auf dem alten gestern gab es ja dieselben Probleme. Kann es dann irgendwie an dem USB vom Notebook liegen? Zu wenig Spannung beim hochladen. Oder Windows 10? Oder mir fehlt eine Bibliothek? Aber das Problem ist so trivial, das kann ja nicht an Paketen liegen.

Ganz dumme Idee :
mach mall %202,%221,%223,%224,%225

Hallo,
auch das läuft auf einem Uno richtig.
Frage an die Runde : kann es denn sein das der Uno Wifi Rev2 einen Bug für die String Objekte hat. Da wird doch sicher der gleiche Code verwendet.
ich hab da keine Idee mehr
Heinz

Muss nicht...
Ist ja schließlich eine gänzlich andere Boarddefinition.

Übigens:

Dein Problem ist das zurückwandeln einer URL.
Zumindest den Teil, welcher im GET Header ankommt.

Eigentlich wurden solche Zwecke urlencode() und urldecode() erfunden.
Die findest du sicherlich schon vorgefertigt für Arduino.

Hallo,
Muss man das jetzt unter der Überschrift "String Objekte sind Mist" ablegen
Du konntest auf die String-Objekte verzichten und C Zeichenketten verwenden.

https://de.wikibooks.org/wiki/C-Programmierung:_Zeichenkettenfunktionen#strstr
Heinz

Nachtrag : oder auf eine ESP umsteigen :wink:

String ist eh nicht schick. Aber auf einem MEGA läuft der Code. Tata! Also muss es kein ESP sein.
Das habe ich in #16 vorgelegt.

Hm, aber da muss es doch irgendeine einfache Lösung geben, um so einen codierten String auszulesen^^

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.