首页 文章

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

提问于
浏览
0

我正在使用带有以太网屏蔽的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 回答

  • 1

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

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

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

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

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

相关问题