Запутался с сишным синтаксисом, не могу найти подстроку в строке. В строках вида: Код (Text): <speed value="2" name="Light breeze"/> <direction value="0" code="N" name="North"/> <lastupdate value="2014-08-19T11:00:00"/> и т.п. Как найти что это строка speed, direction и т.д. ?
Спрошу еще, если ответите... При чтении с SD карты в примере используется код: Код (Text): int data; while ((data = File.read()) > 0) { Serial.write(data); } При чтении файла, считывается все его содержимое за раз? Я правильно понимаю? Не пойму как правильно объявить массив char[], чтобы подставить в File.read(), если я не знаю размер файла. А в библиотеке SdFat функцию Size() я не нашел.
А при написании следующего получается фигня: Код (Text): long n = dataFile.fileSize(); char c[n]; dataFile.read(c,sizeof(c)); Serial.println(c);
File.read() считывает очередной один байт из потока, связанного с файлом. Другой формы данной функции вроде как нет. File.size() вернет размер файла, если нужен. Чтобы узнать остались ли еще данные в файле, есть File.available(). Еще есть функции для позиционирования в файле и получения текущей позиции. Короче говоря:http://arduino.cc/en/Reference/SD И есть еще один нюанс. File - это имя класса, а потому надо сначала определить переменную, например, File myFile; А потом что-то вроде: Код (Text): myFile = SD.open("test.txt"); if (myFile) { while (myFile.available()) { Serial.write(myFile.read()); } myFile.close(); } else { Serial.println("error opening test.txt"); } Короче говоря в простом случае читаем файл байт за байтом и делаем что-то с этими байтами (в примере сплавляем в последовательный порт). Можно и в массив загнать, но читать все равно по одному байту.
geher, я слегка заблудился в используемых библиотеках для работы с SD. По ссылке, на arduino.cc показано как работать используя SD.h, а в примерах для iBoard (именно с ней я сейчас и работаю) используется SdFat.h. Свойства и методы у этих библиотек отличаются. Не совсем понятно, если я хочу считать файл в массив, то как указать размерность массива при объявлении, если я не знаю какой нужен размер.
В описании библиотеки SdFile Class Reference сказано: Код (Text): int16_t SdFile::read (void) [inline] Read the next byte from a file. Returns: For success read returns the next byte in the file as an int. If an error occurs or end of file is reached -1 is returned Это значит что read возвращает очередной байт? Т.е. его можно положить в массив или добавить к строке?