我使用带有以太网盾的XDRduino UNO。在它上面我有一个带有文本文件的micro SD卡。我想根据行号从文件中读取特定的文本行。该文件非常大,因此我无法将所有内容存储在数组中,并且我无法将每一行存储在一个数组中,然后清除该数组,因为例如,该代码需要一分钟才能运行号码65000。
我使用Python格式化文件,以便所有行都具有相同的长度。我的想法是使用seek()函数来改变从中读取文件的位置(将行长度乘以行号以查看我想要的行)。问题是seek()和seekSet()函数都没有改变读取下一个字节的位置。我也试过改变position()函数的值,但这也不起作用。
有什么想法吗?
#include <SD.h>
File myFile;
char StringList [50];
int ListIndex = 0;
char character;
void setup() // run once, when the sketch starts
{
Serial.begin(9600); // set up Serial library at 9600 bps
//just added
while (!Serial) {
}
//end of just added
Serial.println("Hello world!"); // prints hello with ending line break
//just added
Serial.print("Initializing...");
pinMode(10, OUTPUT);
if(!SD.begin(4)){
Serial.println("Failure");
return;
}
Serial.println("Initialization done.");
//end of just added
//myFile = SD.open("AverageVoltageOutputspassiveFilterHigherRes.txt");
myFile = SD.open("testing.txt");
if (myFile) {
while (myFile.available()){
//myFile.seek(500); //THIS DOES NOT CHANGE POSITION
if (myFile.position() == 500) {
character = myFile.read();
if (character != 0X0A) {
StringList[ListIndex] = character;
ListIndex++;
}else {
ListIndex++;
Serial.println(StringList);
break;
}
}
else{
Serial.println("File Position Wrong");
break;
}
}
}
else {
Serial.println("Log!");
}
}
void loop() // run over and over again
{
// do nothing!
}
答案 0 :(得分:1)
首先,你不需要在Python中使用分号,除非你在一行中添加多个语句,但这并不是你在这里的原因: - )
Python默认以文本模式打开行。不幸的是,当你这样做时,你无法寻求。
即使它们是文本文件,也可以在二进制模式中打开文件。我一直这样做。它只是意味着你必须认识到行结尾是\ n,\ r,还是\ r \ n。所以,无论如何,这样做:
myFile = SD.open("testing.txt", 'rb')
然后myFile.seek()会神奇地工作。