Arduino:更改文件中下一个字节读取位置

时间:2015-08-05 19:58:11

标签: text position sd-card arduino-uno

我使用带有以太网盾的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!
}

1 个答案:

答案 0 :(得分:1)

首先,你不需要在Python中使用分号,除非你在一行中添加多个语句,但这并不是你在这里的原因: - )

Python默认以文本模式打开行。不幸的是,当你这样做时,你无法寻求。

即使它们是文本文件,也可以在二进制模式中打开文件。我一直这样做。它只是意味着你必须认识到行结尾是\ n,\ r,还是\ r \ n。所以,无论如何,这样做:

myFile = SD.open("testing.txt", 'rb')

然后myFile.seek()会神奇地工作。