我正在使用带有以太网屏蔽的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("Fuck!");
}
}
void loop() // run over and over again
{
// do nothing!
}
1 回答
首先,你不需要在Python中使用分号,除非你在一行上放置多个语句,但这不是你在这里的原因:-)
Python默认以文本模式打开行 . 不幸的是,当你这样做时,你无法寻求 .
即使它们是文本文件,也可以在二进制模式下打开文件 . 我一直这样做 . 它只是意味着你必须认识到行结尾是\ n,\ r,还是\ r \ n . 所以,无论如何,这样做:
然后myFile.seek()将神奇地工作 .