Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable vergleichen

Gast #4525127
Hallo,

ich habe folgendes Problem und suche schon seit Stunden nach einer 
Lösung:
ich habe einen RFID Adapter MFRC522 mit dem ich die Chipkarten auslese 
und mit fogendem Code in einen Dezimalwert umwandle:

long code=0;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
code=((code+mfrc522.uid.uidByte[i])*10);
}

Klappt super.

Jetzt möchte ich eine Funktion schreiben, die eine Textdatei auf einer 
SD Karte ausliest, die im Prinziep wie eine CSV Datei aufgebaut ist:

2485790;Herr Zufall;ET-13
2501230;Frau Mustermann;ET-15

Soweit auch kein Thema. Im Folgenden Code übergebe ich den RFID-Code und 
möchte die ausgelesene Zeile aus der Datei mit strstr prüfen, ob der 
Code in der Zeile vorhanden ist. Das Problem ist, dass er beim 
Comilpieren immer in der Zeile strstr anhält und folgenden Fehler 
bringt:

invalid conversion from 'long int' to 'const char*' [-fpermissive]

Ich finde keine Möglichkeit den RFID-Code (long int) mit der Variable 
line (char) zu vergleichen. Ich möchte lediglich wissen, ob der Code in 
der Datei existiert, und wenn ja, die Zeile auslesen und in Arrays 
aufsplitten.
Ein konvertieren der Long INT in einen Char verändert den Inhalt.
Vielleicht hat jemand eine IDEE wie man das noch machen könnte??

Hier die (noch nicht ganz fertige) Funktion:

void pupil(long codepup){

  char line[40];
  int c;
  uint32_t pos;
  int i = 0;

  // open test file
  SdFile rdfile("pupil.csv", O_RDWR);

  if (!rdfile.isOpen()) {
    Serial.println("Couldn't find pupil.csv");
    Serial.println("");
  }
  else
  {
    rdfile.rewind();
    while ((c = rdfile.read()) >= 0)
    {Serial.write(c);}

    rdfile.rewind();
    while(1){
    if (rdfile.fgets(line, sizeof(line)) < 0) {
    Serial.println("Line not found");
    break;
    }

    Serial.write("line=");
    Serial.write(line);

    if (strstr(line,codepup)) {
    Serial.println("***Karte gefunden***");
    }

    i++;
    if (i>=3) break;
    }
 }
    // close
    rdfile.close();

}
Gast
Super Danke, das hat Funktioniert...!!!!!

Kannst du mir noch einen Tipp geben, wie ich den ausgelesenen Inalt von 
line nach ; getrennt in Arrays auslesen kann?

Vielen Dank.
strtok()

Beispiel:
1
   char *p;
2
    char tmp[100];
3
    strncpy(tmp, cmdBuffer, 100);
4
    strtok(tmp,",");
5
    p=strtok(NULL,",");
6
// mach was mit p
7
    p=strtok(NULL,",");
8
...

Bei jedem Aufruf zeigt der Zeiger p auf den nächsten Wert, hier mit "," 
getrennt.
Gast
Funktioniert wieder, danke.

Im String line steht z.B. 2501230;Frau Mustermann;ET-15

Das erste p ist allerdings schon der Name "Frau Mustermann"

Brauche ich zwar hier nicht aber könnte ich die Zahl 2501230 auch noch 
auslesen?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.