Problem SDfat - Ende der Datei finden

Gast #4528320
Lesenswert?

Hallo,

ich möchte aus einer Textdatei Zeile für Zeile auslesen und mit einem 
vogegeben Wert code und datum vergleichen. Das klappt ganz gut, da ich 
einfach einen couter i nach jeder ausgelesenen Zeile hochzählen lasse 
und wenn er bei 20 ist, bricht er die schleife ab.
Das Problem ist, dass ich es nicht schaffe, dass er am ende der Datei 
selbst aufhört. Da ich irgendwann mehr als 20 Einträge habe findet wer 
dann die letzten nicht mehr. Stelle ich den Schleifenabbruch i auf 1000, 
dauert es jedesmal ewig....
Wie kann ich die schleife abbrechen wenn er am Ende einer Datei ist?

in der Datei time.csv steht:
// Datum;code;kommen;Uhrzeit
31.03.16;2485790;KOMMEN;16:07
31.03.16;2501230;KOMMEN;16:23



///// Datei früher für eine andere Operation schon mal initialisert und 
wieder geschlossen
...
 SdFile daten("time.csv", O_APPEND | O_WRITE);
...
 daten.close();
...

///// Datei für Verleich neu geöffnet


 daten.open("time.csv", O_READ); 
//**************************************************

  char line[60];
  int i = 0;
  int c;
  uint32_t pos;
  char* datum = date;
  char* zeit = time;
  int gefunden = 0;


   daten.rewind();
 while (1) {
    pos = daten.curPosition();
    if (daten.fgets(line, sizeof(line)) < 0) {
      Serial.println("Line not found");
    }

    char cp[8];
    char dat[8];

    sprintf(cp,"%ld",code);
    Serial.print("i = ");
    Serial.print(i);
    Serial.print(" / ");
    Serial.write("**Line: ");
    Serial.print(line);
    Serial.print(" / ");

 if (strstr(line,datum) && strstr(line,cp))
    {
    Serial.print("**Datum vorhanden: ");
    Serial.print(datum);
    Serial.print(" / ");
    Serial.print("**Code auch voranden: ");
    Serial.print(line);
    Serial.print(cp);
    Serial.print("------Alles OK----- ");
    gefunden = 1;
    break;
    }

    if (strstr(line,datum) && !strstr(line,cp))
    {
    Serial.print(">> Nur Datum in Time.csv vorhanden: ");
    Serial.print(line);
    Serial.print(" / ");
    Serial.print(datum);
    }

if (!strstr(line,datum) && !strstr(line,cp))
    {
    Serial.print(">> Weder Datum noch code vorhanden: ");
    Serial.print(line);
    Serial.print(" / ");
    Serial.print(datum);
    }

    i++;
    if (i>=20) break;
    Serial.print(" / Ende");
    Serial.println();
    }
 daten.close();
Gast #4529042
Lesenswert?

Ich benutze die SDFat.h

habs jetzt so gelöst. Funzt einwandfrei....


    SdFile daten("time.csv", O_READ);
    while ((c = daten.read()) >= 0)
    {
    pos = daten.curPosition();
    daten.seekSet(pos-1);

    if (daten.fgets(line, sizeof(line)) < 0) {
       Serial.print("Line not found");
       }
    Serial.print("Testausgabe");
    Serial.print(line);

    }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren