readStringUntil('\r\n')

Hallo
Habe eine lange Arduino-Pause hinter mir. Und auch die IDE ist erneuert. Seit dem geht \r\n als Suchstring in einer Textdatei von CD nicht mehr. Aber ich benötige das Zeilenende um den Beginn einer neuen Zeile zu erkennen und auch die Zeichenkette davor. Wie muss die Suche richtig lauten in Arduino-Version 1.8.13. Vielen Dank.

Du kannst nur ein Zeichen als Delimiter verwenden.

‘\r\n’ sollte unabhängig der verwendeten Methode eine Warnung produzieren:

warning: overflow in implicit constant conversion [-Woverflow]

Ja, das ist korrekt. Aber mache ich das korrekt.
Die Txt-Datei enthält diverse Zeilen mit z.B. 7 kommagetrennte Daten und am Ende halt CR und LF.
Wie suche ich korrekt nach den 6 kommagetrennten Daten das Ende der 7. Daten und das Zeilenende? Mit fällt partout nicht die korrekte Formulierung ein. Muss ich erst nach CR und dann nach LF suchen oder geht das besser. Denn die Kombination kann ja auch wichtig sein.

Am besten machst man das per Hand. Bis zum LF einlesen und einfach das CR ignorieren.

const unsigned int READ_BUFFER_SIZE = 11;    //Platz für 10 Zeichen + Terminator

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

void loop()
{
  char* str = readLine(Serial);
  if (str != nullptr)      //ist wahr wenn das LF eingelesen wurde
  {
    Serial.print("Eingelesen: ");
    Serial.println(str);
  }
}

char* readLine(Stream& stream)
{
  static byte index;
  static char buffer[READ_BUFFER_SIZE];

  while (stream.available())
  {
    char c = stream.read();

    if (c == '\n')              //wenn LF eingelesen
    {
      buffer[index] = '\0';     //String terminieren
      index = 0;
      return buffer;            //melden dass String fertig eingelesen wurde
    }
    else if (c >= 32 && index < READ_BUFFER_SIZE - 1)   //solange noch Platz im Puffer ist
    {
      buffer[index++] = c;    //Zeichen abspeichern und Index inkrementieren
    }
  }
  return nullptr;                //noch nicht fertig
}

Das ist mit Serial. Aber man kann der Methode auch andere Objekte übergeben die von Stream abgeleitet sind, also z.B. ein Datei-Objekt

In diesem Fall eigentlich nicht. Da sollte sonst kein einzelnes CR oder LF vorkommen

You can also check out my Arduino Software Solutions for various way to read from Serial.
If you use Strings or SafeStrings you can easily trim() to remove \r
If you use SafeStringReader you can read with “\r\n” delimiters.

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