Zeilen auslesen geht vielleicht am besten mit der SdFat Lib und der fgets() Methode der File Klasse:
Get a string from a file.
fgets() reads bytes from a file into the array pointed to by str, until num - 1 bytes are read, or a delimiter is read and transferred to str, or end-of-file is encountered. The string is then terminated with a null byte.
fgets() deletes CR, '\r', from the string. This insures only a '\n' terminates the string for Windows text files which use CRLF for newline.
Da ist auch ein Beispiel dazu dabei:
http://code.google.com/p/sdfatlib/
Man nicht direkt angeben eine bestimmte Zeile auszulesen, aber man einfach mitzählen wie oft man fgets() schon aufgerufen hat.
z.B. so:
bool getLine(const char* filename, int line)
{
if(sd.begin())
{
if(file.open(filename, O_READ))
{
int count = 1;
while(file.fgets(stringBuffer, STRING_BUFFER_SIZE) > 0)
{
if(count == line)
break;
count++;
}
file.close();
if(count != line)
return false;
return true;
}
}
return false;
}
stringBuffer ist hierbei ein globales Array. Man kann aber genauso eines als Parameter übergeben
Oder das hier um die Zeile zu überschreiben:
void writeLine(const char* filename, int line, const char* string)
{
if(sd.begin())
{
if(file.open(filename, O_RDWR))
{
int count = 1;
unsigned long pos;
int size;
while(true)
{
pos = file.curPosition();
size = file.fgets(stringBuffer, STRING_BUFFER_SIZE);
if(count == line || size <= 0)
break;
count++;
}
if(size > 0)
{
file.seekSet(pos);
file.println(string);
}
file.close();
}
}
}
Das macht auch erst mal fgets() bis man die Zeilennummer hat. Dann merkt man sich die Position in der Datei (in Bytes) mit curPosition() und setzt den Cursor dann wieder mit seekSet() dahin.