Erste und letzte Zeile aus einer CSV datei lesen

Hallo,
gibt es eine smarte Funktion wie ich aus einer csv datei die erste und letzte Zeile lesen kann und diese dann in einem array separiert abspeichern kann?

So sieht meine Datei aus

timestamp;value[1]
timestamp;value[2]
timestamp;value[3]
....
timestamp;value[y]

Nun moechte ich die letzte und erste zeile im array speichern.

Danke fuer die Hilfe

Dateien werde generell vom Anfang an gelesen.
Man muss ja nicht alles komplett auswerten.
Außerdem kriegt man die Anzahl an Zeichen raus (komplett/noch zu lesen).
Wenn die Zeilen unterschiedliche Anzahl Zeichen haben können, ist es wohl das smarteste, eine Zeile zwischenzuspeichern und wenn sich rausstellt, dass es die letzte war, diese auszuwerten.

sind alle Zeilen mit "\r\n" Endung?

Fein!
Und wo ist dein Problem dabei?

Wenn du sie schreibst!

0 Datei öffnen
1 erste Zeile lesen --> speichern im array "erste Zeile"
2 nächste Zeile lesen -> speichern im array "letzte Zeile"
3 Wenn nicht am Dateiende - Goto 2
4 ende

Verstehe ich nicht.
erste Zeile liefert einen Zeitstempel und ein "value".
Das sind zwei verschiede Sachen, die also bei C / C++ nicht in ein array passen.

Wenn es Sinn macht, könnte man ein Array mit zwei Elementen erzeugen und im Element [0] den Anfangsdatensatz und im Element [1] den letzten Datensatz speichern.

Array[ersteZeile] gibts bei Python (oder JSON) und so, aber nicht so ohne weiteres bei C++

Man kann ganze Zeilen in ein Array stopfen und später parsen.
Man kann auch beim lesen parsen und ein Array mit Strukturen anlegen.

Man kann auch vom CSV weg gehen und eine feste Datensatzgröße verwenden.
Oder sich merken, wo letztes mal die letzte Zeile anfing.

Tausende von Möglichkeiten.
Aber keine davon ist ein "Spaß"

Beim Lesen aus der CSV-Datei kommt pro Zeile erst mal eine Zeichenkette.
Und die passt in ein Arrayelement.

Gruß Tommy

Danke, @Tommy56 und @combie,
jetzt habe ich's verstanden.
:slight_smile:

Ein guter Mann. Hat ne Frage gestellt und verschwunden auf nimmer wieder sehen.

//SparkFun Pro Micro
#include <SPI.h>
#include <SD.h>
File myFile;
const uint8_t chipSelect = 10;
String sName = "text1.csv";

void setup() {
  Serial.begin(115200);
  while (!Serial) {
    delay(1000);
  }
  if (!SD.begin(chipSelect))Serial.print("No ");;
  Serial.println(" SD");
  if (SD.exists(sName)) {
    Serial.println("Open");
    myFile = SD.open(sName);
    String str1 = "";
    while (myFile.available()) {
      char c = myFile.read();
      if (c == '\r' || c == '\n')break;
      else str1 += c;
    }
    Serial.println(str1);
    str1 = "";
    while (myFile.available()) {
      char c = myFile.read();
      if (c == '\r' || c == '\n')str1 = "";
      else str1 += c;
    }
    myFile.close();
    Serial.println(str1);
  }
}

void loop() {}

Das hier ist immer noch ein Forum und kein Chat-Bereich. Guck mal am Wochenende nach, ob sich die Frage evtl. erledigt hat.

Hat sich erledigt

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.