arduino / ArduinoCore-API

Hardware independent layer of the Arduino cores defining the official API
https://www.arduino.cc/reference/en/
GNU Lesser General Public License v2.1
216 stars 120 forks source link

Arduino String class: features missing (feature request) #152

Open dsyleixa opened 3 years ago

dsyleixa commented 3 years ago

hi, for Arduino C++ Strings some features are missing: .readStringUntil(EOL) or perhaps a new .readln(): to read an entire textline all at once until end of line, discarding any EoL/CR (e.g., text lines may have \n or \r\n at EoL, so readStringUntil('\n') or readStringUntil('\r') may fail or mess it up)

additionally also helpful: .insert(substr, pos, len) .delete(pos, len) and especially .TokenArg(token, delimiter1, delimiter2) // edit: optionally also just named .arg() // returns the value of a token, e.g. for a String containing analog=1234; String myArg = myString.TokenArg("analog", "=", ";") would return 1234 as a String.

OTOH, IMO .compareTo() is ambiguous, it returns +/-/0 for after/before/ident but completely unclear if or what when neither and they are completely different. Better if it returned NAN/-1/0/+1 for notIn/smaller/ident/bigger.

PS, just recalled that the WebServer lib provides a method .arg() which works somehow like the requested String.TokenArg() functionality:

int Analog1=0;
String myArg = webserver.arg("analog");
if (myArg  != "") {
      Analog1 = myArg.toInt();
}

That could be also used as a pattern for a String class TokenArg function.