INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ESP8266 SD CSV Datei Zeilen rückwärtz
14.02.2021, 00:30
Beitrag #1
ESP8266 SD CSV Datei Zeilen rückwärtz
ESP8266 SD CSV Datei Zeilen Rückwärts
Hallo ich habe an meinem ESP eine SD Speicherkarte dran gehängt und kann auch daten Speichern in einem CSV Format mit ; als Trennzeichen.

Die Datei hat 1000de Zeilen die so aussehen:
10:44:14;19,88;19,56;19,56;15,31;44,69;17,19;20,94;1;1;1
10:54:14;19,88;19,56;19,56;15,31;44,63;17,06;20,87;1;1;1
11:04:14;19,88;19,56;19,56;15,31;44,5;16,62;20,44;1;1;1

vorn an die Uhrzeit dann Temperaturwerte bis zum Schluss 3 Boolean.
Wie kann ich die letzten Zeilen dieser Datei mit SD.open oder ähnliches Rückwärts Zeile für Zeile wert für wert auswerten?
Hat da jemand eine Idee? Huh
Danke
Schon mal
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2021, 10:41
Beitrag #2
RE: ESP8266 SD CSV Datei Zeilen rückwärtz
Da die Zeilen unterschiedlich lang sind, kannst Du das überhaupt nicht.
Das wäre nur möglich, wenn alle Zeilen gleich lang sind.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2021, 11:08
Beitrag #3
RE: ESP8266 SD CSV Datei Zeilen rückwärtz
(14.02.2021 10:41)Tommy56 schrieb:  Da die Zeilen unterschiedlich lang sind, kannst Du das überhaupt nicht.
Das wäre nur möglich, wenn alle Zeilen gleich lang sind.

Gruß Tommy

Selbst Excel schafft das die Zeilenumbrüche und die Variablen durch das Trennzeichen zuzuordnen.Confused
Meine Hoffnung lag darin das es irged ein read line (n) Befehl gibt der mir den Inhalt in einer Variable übergibt worin ich dann nach dem Trennzeichen "Suchen" kann um die Variablen anschließend auszuwerten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2021, 11:15
Beitrag #4
RE: ESP8266 SD CSV Datei Zeilen rückwärtz
(14.02.2021 11:08)RobertHQ schrieb:  Selbst Excel schafft das die Zeilenumbrüche und die Variablen durch das Trennzeichen zuzuordnen.

Da vergleichst du aber Äpfel mit Birnen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2021, 12:00
Beitrag #5
RE: ESP8266 SD CSV Datei Zeilen rückwärtz
(14.02.2021 11:08)RobertHQ schrieb:  Selbst Excel schafft das die Zeilenumbrüche und die Variablen durch das Trennzeichen zuzuordnen.Confused
Das war nicht Deine formulierte Frage aus dem Ursprungsposting.
Überlege nochmal, was Du wirklich willst.
Das Zeilenendezeichen kannst Du erfassen ('\n'), aber nur vom Anfang an, nicht von hinten. Suche nach readBytesUntil.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2021, 15:25 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2021 15:29 von Corvus.)
Beitrag #6
RE: ESP8266 SD CSV Datei Zeilen rückwärtz
Damit kannst du den Anfang der Vorherigen Zeile herausfinden:
Code:
int getPrevLinePos(File file, int fromPos) {
  for (int pos = fromPos; pos > 0; pos--) {
    file.seek(pos - 1);
    if ( file.read() == '\n') {
      return pos;
    }
  }
  return 0;
}

Zeilenweise rückwärts einlesen könntest du die Zeilen dann so:
Code:
int linePos = file.size() - 1;
  while (linePos) {
    int lineEnd = linePos - 1;
    linePos = getPrevLinePos(file, linePos);
    int lineLen= lineEnd - linePos;
    file.seek(linePos);
    //Hier kannst du dann jede Zeile verarbeiten.
    //z.B. Auf die Serielle Schnittstelle Schreiben:
    char lineBuf[128];
    file.read(lineBuf, lineLen);
    Serial.write(lineBuf, lineLen);
  }
(ungetestet)
Ist aber erheblich langsamer, als eine Lösung welche durch eine feste Zeilenlänge in der Datei ermöglicht werden würde.
gruß lorenz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2021, 19:26
Beitrag #7
RE: ESP8266 SD CSV Datei Zeilen rückwärtz
(14.02.2021 15:25)Corvus schrieb:  Damit kannst du den Anfang der Vorherigen Zeile herausfinden:
Code:
int getPrevLinePos(File file, int fromPos) {
  for (int pos = fromPos; pos > 0; pos--) {
    file.seek(pos - 1);
    if ( file.read() == '\n') {
      return pos;
    }
  }
  return 0;
}

Zeilenweise rückwärts einlesen könntest du die Zeilen dann so:
Code:
int linePos = file.size() - 1;
  while (linePos) {
    int lineEnd = linePos - 1;
    linePos = getPrevLinePos(file, linePos);
    int lineLen= lineEnd - linePos;
    file.seek(linePos);
    //Hier kannst du dann jede Zeile verarbeiten.
    //z.B. Auf die Serielle Schnittstelle Schreiben:
    char lineBuf[128];
    file.read(lineBuf, lineLen);
    Serial.write(lineBuf, lineLen);
  }
(ungetestet)
Ist aber erheblich langsamer, als eine Lösung welche durch eine feste Zeilenlänge in der Datei ermöglicht werden würde.
gruß lorenz


Ja wie Cool das läuft DANKE
Kurz knapp und konstruktiv!
Speed ist mir dabei nicht so wichtig, muß die Datei nur 1x beim Start auslesen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2021, 19:29 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2021 19:32 von Corvus.)
Beitrag #8
RE: ESP8266 SD CSV Datei Zeilen rückwärtz
Freut mich, dass es läuft und danke fürs Feedback!

gruß lorenz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 SPIFF Daten schreiben und zeilenweise lesen? foto2004 10 138 Gestern 14:26
Letzter Beitrag: hotsystems
  Problem Upload einer html Datei per littleFS mat-sche 5 191 09.04.2021 13:17
Letzter Beitrag: Tommy56
  ESP8266 OTA - ich bin am Ende meiner Ideen miq19 11 642 02.04.2021 10:13
Letzter Beitrag: Tommy56
  Libraries für ESP8266 wonk 9 776 24.03.2021 20:18
Letzter Beitrag: wonk
  Wie Zeitstempel einer auf SD Karte geschriebenen Datei setzen? Triax16 64 9.723 22.03.2021 11:58
Letzter Beitrag: michar
  vom MEGA zum ESP8266 uk1408 24 1.873 19.03.2021 13:56
Letzter Beitrag: hotsystems
  ESP8266 Zeit vom NTP Server verändert sich Kupferwurm 18 1.809 11.03.2021 11:03
Letzter Beitrag: Tommy56
  ESP8266 NTP fadeValue bob 2 478 10.03.2021 18:29
Letzter Beitrag: Tommy56
  HTML-Ausgabe von ESP8266 D1 Mini + DHT 11 Temperatursensor auf Webseite Bobo83600 3 676 10.03.2021 09:42
Letzter Beitrag: Bobo83600
  [Gelöst] ESP8266 OTA bleibt ohne Wirkung miq19 5 759 07.03.2021 18:35
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste