我对Arduino业务很陌生。如何从SD卡读取最后一行?使用以下代码片段,我可以读取第一行(“ \ n”之前的所有字符)。现在,我想添加一个“向后”声明(或其他内容)。
到目前为止,我的代码:
xml
非常感谢您的帮助。
答案 0 :(得分:0)
从技术上来说,由于您正在打开文本文件,因此可以按照此answer中的说明使用seekg跳到文件末尾并读取最后一行。
如果这没有帮助,添加更多上下文和示例文件将帮助我们更好地理解您的问题。
答案 1 :(得分:0)
我不确定我是否理解你的问题。
seekg
?” 没有seekg
。但是,有一个seek
。File
类方法的列表(seek
等)。SD_File.seek( SD_File.size() );
如果要阅读最后一行,最简单的方法是编写一个getline
函数并逐行读取整个文件直到结束。假设MAX_LINE
足够大,并且getline
成功返回零:
//...
char s[ MAX_LINE ];
while ( getline( f, s, MAX_LINE , '\n' ) == 0 )
;
// when reaching this point, s contains the last line
Serial.print( "This is the last line: " );
Serial.print( s );
这是一个getline
的想法(不作保证-未测试):
/*
s - destination
count - maximum number of characters to write to s, including the null terminator. If
the limit is reached, it returns -2.
delim - delimiting character ('\n' in your case)
returns:
0 - no error
-1 - eof reached
-2 - full buffer
*/
int getline( File& f, char* s, int count, char delim )
{
int ccount = 0;
int result = 0;
if ( 0 < count )
while ( 1 )
{
char c = f.peek();
if ( c == -1 )
{
f.read(); // extract
result = -1;
break; // eof reached
}
else if ( c == delim )
{
f.read(); // extract
++ccount;
break; // eol reached
}
else if ( --count <= 0 )
{
result = -2;
break; // end of buffer reached
}
else
{
f.read(); // extract
*s++ = c;
++ccount;
}
}
*s = '\0'; // end of string
return ccount == 0 ? -1 : result;
}