Kurze Frage zum einlesen einer Datei von einer SD Karte.

Hallo Zusammen:

Eine kurze Frage, ich lese verschiedene Dateien von einer SD Karte ein.
Die Daten sind wie folgt, als Beispiel hinterlegt:

100 // speed_max0
95 // speed_max1
100 // speed_max2
98 // speed_max3
100 // speed_max4

Die Zahl wird eingelesen, hinter // stehst die zugehörige Variable.
Das mache ich wie folgt:

  char linebuf[40]; // 40 reicht für Zeilen bis 37 Zeichen Länge + CR+LF+\0
  int counter1=0;
  memset(linebuf,0,sizeof(linebuf)); // ausnullen des Zeilenspeichers
  while (myFile.available()) 
  {
    linebuf[counter1]=myFile.read();
    if (linebuf[counter1]=='\n') break; // Zeilenende, Schleife verlassen
    if (counter1<sizeof(linebuf)-1) counter1++;
  }

  if (strstr(linebuf,"speed_max0")) speed_max[0]=atoi(linebuf);
  else if (strstr(linebuf,"speed_max1")) speed_max[1]=atoi(linebuf);
  else if (strstr(linebuf,"speed_max2")) speed_max[2]=atoi(linebuf);
  else if (strstr(linebuf,"speed_max3")) speed_max[3]=atoi(linebuf);
  else if (strstr(linebuf,"speed_max4")) speed_max[4]=atoi(linebuf);

Funktioniert einwandfrei.

Nun aber habe ich das Problem, dass ich aus einer anderen Datei 4 Chars in gleicher Weise einlesen will.

Datei schaut wie folgt aus:

char1 // intertxt1
char2 // intertxt2
char3 // intertxt3
char4 // intertxt4

Dabei soll "char1" oder was auch immer da steht in das char intertxt1 usw... reinkopiert werden.

Versucht habe ich das nun wie folgt:

 char linebuf[40]; // 40 reicht für Zeilen bis 37 Zeichen Länge + CR+LF+\0
  int counter1=0;
  memset(linebuf,0,sizeof(linebuf)); // ausnullen des Zeilenspeichers
  while (myFile.available()) 
  {
    linebuf[counter1]=myFile.read();
    if (linebuf[counter1]=='\n') break; // Zeilenende, Schleife verlassen
    if (counter1<sizeof(linebuf)-1) counter1++;
  }
  
     if    (strstr(linebuf,"inter1")) memcpy (intertxt1,linebuf, sizeof(linebuf));
   else if (strstr(linebuf,"inter2")) memcpy (intertxt2,linebuf, sizeof(linebuf));
   else if (strstr(linebuf,"inter3")) memcpy (intertxt3,linebuf, sizeof(linebuf));
   else if (strstr(linebuf,"inter4")) memcpy (intertxt4,linebuf, sizeof(linebuf));

Logischerweise, so wie ich es jetzt da gemacht habe, schreibt er aber jetzt nicht nur
"char1" in die intertxt sondern "char1 // intertxt1".

Meine Frage:

Wie bringe ich jetzt meinen Code dazu, dass er ab // aufhört und nur eben char1 in die intertxt einließt?
Ich möchte noch dazu anmerken, dass die Zeichenlänge, dessen, was vor dem // steht nicht fix ist.

Vielen Dank!!

   char* cp; 
   if    ( (cp = strstr(linebuf,"// inter1") != 0) {*cp= 0; strcpy (intertxt1,linebuf); }
   else if ....

Nachtrag: dein Datentyp Char ist in Wirklichkeit ein ausreichend großes char Array, richtig ?

Vielen Dank, für Deine Antwort.

Deine Frage ist mir jetzt nicht ganz klar, Du meinst, wie ich intertxt definiert habe?

So: char intertxt1[40];

Leider funktioniert Dein Code nicht, Fehler ist

cannot convert 'bool' to 'char*' in assignment

Habe immer noch so meine Probleme mit der Verwendung von Pointern, daher verstehe ich den Fehler nicht wirklich...

Sorry, ich hatte eine Klammer vergessen. (Inzwischen auch im vorigen Post repariert) Ist aber auch eine blöde Fehlermeldung.

Extra um zu zeigen dass das einzelne = Absicht ist, hatte ich noch einen expliziten Vergleich hinzugefügt, den man heutzutage sogar so schreiben sollte:

  if  ( (cp = strstr(linebuf,"// inter1")) != nullptr) { ...


Tschuldigung ausserdem für das Geraunze um deinen Ausdruck " Char ". War nicht wirklich eine Frage.

Den Datentyp Char gibt es in C / C++ nicht.
Ein char ist etwas ganz anderes als ein char*.

Super, hat funktioniert!

Vielen Dank!

Dürft ich Dich noch kurz, in ein paar Stichpunkten fragen, was Dein Code macht, bzw, wie das funktioniert?

Danke!

Lass die Kommentare auf der SD Karte weg. Dann wird es einfacher. Das atoi() funktioniert so nur weil es abbricht wenn das Leerzeichen kommt. Wenn man das weiß ist das auch kein Problem, aber da wird eine ganz bestimmte Eigenschaft der Funktion ausgenutzt. Das muss dir klar sein.

Guckt du strstr nach und siehst, dass das nicht true/false liefert, sondern ...

Nichts gegen Kommentare, aber einer, der erklärt, dass = eine Wertzuweisung ist, sollte sehr bald überflüssig sein. Das vergisst man nie mehr.

Na gut, weil du's bist:

*cp = 0; // Endekennung einfügen