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(); }
Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable vergleichen
Re: Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable verglei
Codepub in String umwandeln.
Re: Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable verglei
Danke für die Antwort. Wie mache ich das am dümmsten?
Re: Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable verglei
mit itoa() oder sprintf()
1 | char str[12]; |
2 | sprintf(str,"%ld",codepub); |
In str ist deine Zahl jetzt als Text. Wenn die Zahl mehr als 11 Stellen haben kann, dann die Größe von str anpassen.
Re: Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable verglei
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.
Re: Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable verglei
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.
Re: Problem:Zeile aus Textdatei auf einer SDKarte auslesen und per strstr mit einer Vatiable verglei
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.