Log auf SD Karte wieder einlesen

Hallo, ich komme bei meinem etwas größeren Projekt gerade nicht weiter und bräuchte mal programmier Technische hilfe.

Aktueller status:
Ich logge sämtliche Sensordaten im dynamischen speicher. Erst hatte ich nur 5 byte Arrays mit je 110 Werten später wurden es mehr und das programm lief nicht mehr stabil. Da ich ein umgfangreiches Menu im GLobalen Speicher habe war das zu irgendwann zu erwarten. Diese Arrays schiebe ich dann im meine PlotLog() funktion dadurch wird ein Koordinatensystem mit Graph auf dem display angezeigt.

Vorhaben und fortschritt:
Erstmal die geloggten Sensordaten in die SD Karte schreiben. Je Zeile ein Datum und die dazu gehörenden Werte. Das klappt auch schon ganz gut. Eine Zeile sieht dann so aus:

25.6.2017 11:25 0.00 0.00 0.00 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0 1 2 23

Sind keine Sensoren angeschlossen. Habe noch eine zweite Steuerung aufgebaut um experimentell Programmieren zu können, deswegen du nullen. Aber darum gehts auch nicht.

Bin mir nicht sicher ob das elegant Programmiert ist. Ich wollte nicht ein einzigen großen String machen und habe das deshalb in Blöcke unterteilt. Konstruktive Kritik nehme ich dankend an. Sind halt meine ersten Versuche mit Text erzeugen und verarbeiten.

Soweit die Log Funktion:

void logSD(){
  if (millis() >= timeLogSD + logSDinterval){
    

    
    File dataFile = SD.open("datalog.txt", FILE_WRITE);    
    if (dataFile) {    
      dataString += day();
      dataString += ".";
      dataString += month();
      dataString += ".";
      dataString += year();
      dataString += " ";
      dataString += hour();
      dataString += ":";
      dataString += minute();
      dataString += " ";
     // dataString += RTC.temperature()/4;
      
      dataFile.print(dataString);
      Serial.print(dataString);
      dataString = "";

      dataString += phWert;
      dataString += " ";
      dataString += ecWert;
      dataString += " ";
      dataString += wasserTemp;
      dataString += " ";
      dataString += lampenStatus;
      dataString += " ";
      dataString += tempUnten;
      dataString += " ";      
      
      dataFile.print(dataString);
      Serial.print(dataString);
      dataString = "";

      dataString += tempMitte;
      dataString += " ";
      dataString += tempOben;
      dataString += " ";
      dataString += feuchteUnten;
      dataString += " ";
      dataString += feuchteMitte;
      dataString += " ";
      dataString += feuchteOben;
      dataString += " "; 

      dataFile.print(dataString);
      Serial.print(dataString);
      dataString = "";

      dataString += aussenTemp;
      dataString += " ";
      dataString += aussenFeuchte;
      dataString += " ";
      dataString += fuellstandStufe;
      dataString += " ";
      dataString += heizungsStatus;
      dataString += " ";
      dataString += abluftStufe;
      dataString += " "; 

      dataFile.print(dataString);
      Serial.print(dataString);
      dataString = "";

      dataString += RTC.temperature()/4;;
      dataString += " ";

      dataFile.println(dataString);
      Serial.println(dataString);
      dataString = "";
      
      dataFile.close();
      // print to the serial port too:
      //Serial.println(dataString);
    }
    else {
      Serial.println("error opening datalog.txt");
    }  
  
  
  timeLogSD = millis();
  }
}

Jetzt das Problem:
Ich möchte mir aus der Datei ein einziges byte Array bilden ,welches ich an meine PlotLog() funktion übergeben kann. Nehmen wir Beispielhaft den dritten wert nach der Uhrzeit. Ich will die letzten 110 gespeicherten Werte im Array haben. Diese sind am Ende der Datei, also muss ich ans Ende Springen. Wie mache ich das? Geloggte Zeilen mitzählen oder gehts schöner? Dann muss ich zu dem gewünschten Wert springen. Das gelingt mir auch nur bedingt. Ich kann bisher die Werte trennen und in entsprechende Variablen schreiben. Aber ich will nur den gewünschten Wert aus den letzten 110 Zeilen in einen Byte Array.

Bisherige Auslese Funktion:

void sdAuslesen(){
  static unsigned int index;
 if (millis() >= timeLogSD + logSDinterval){
  File dataFile = SD.open("datalog.txt");
  
  if (dataFile) {
    Serial.println("datalog.txt:");
       

  while (dataFile.available())
  {
    char c = dataFile.read();

    if (index < STRING_BUFFER_SIZE - 1)
    {
      string_buffer[index++] = c;
    }
    else if (c == '\n')
     break;
   }  
   index = 0;  
  int value1 = atoi(strtok(string_buffer, ".: "));
  int value2 = atoi(strtok(NULL, ".: "));
  int value3 = atoi(strtok(NULL, ".: "));
  int value4 = atoi(strtok(NULL, ".: "));
  int value5 = atoi(strtok(NULL, ".: "));
  int value6 = atoi(strtok(NULL, ".: "));
  int value7 = atoi(strtok(NULL, ".: "));
  
 // Serial.println(F("\nvalues:"));
 //  Serial.println(string_buffer);
  Serial.println(value1);
  Serial.println(value2);
  Serial.println(value3);
  Serial.println(value4);     
  Serial.println(value5);
  Serial.println(value6);
  Serial.println(value7);

  
 
    /*
    while (dataFile.available()) {
      Serial.write(dataFile.read());
      delay(500);
    }
    // close the file:
    dataFile.close();
    */
  }
  else {
    // if the file didn't open, print an error:
    Serial.println("error opening datalog.txt");
  }
  
  
 timeLogSD = millis();
 } 
}

Komme da gerade nicht weiter. Hoffentlich hat jemand ideen oder Ansätze für mich.