2015-08-05 1 views
0

Я использую XDRduino UNO с Ethernet-экраном. На нем у меня есть карточка micro sd с текстовым файлом. Я хочу прочитать определенную строку текста из файла на основе номера строки. Файл очень большой, поэтому я не могу хранить все в массиве, и я не могу хранить каждую строку в массиве, а затем очищать массив, потому что, например, этот код занимает минуту для строки номера 65000.Arduino: изменить положение, в котором следующий байт читается в файле

Я отформатировал файл с помощью 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 = SD.open("testing.txt", 'rb') 

И тогда myFile.seek() будет волшебным образом работать.

 Смежные вопросы

  • Нет связанных вопросов^_^