Помогите плиз, с синтаксисом

Тема в разделе "Arduino & Shields", создана пользователем AlexVS, 19 авг 2014.

  1. AlexVS

    AlexVS Гик

    Запутался с сишным синтаксисом, не могу найти подстроку в строке.
    В строках вида:
    Код (Text):
    <speed value="2" name="Light breeze"/>
    <direction value="0" code="N" name="North"/>
    <lastupdate value="2014-08-19T11:00:00"/>
    и т.п.
    Как найти что это строка speed, direction и т.д. ?
     
  2. AlexVS

    AlexVS Гик

    Все, нашел:
    Код (Text):
    if( !strncmp(tagStr,"<speed",6)
     
  3. AlexVS

    AlexVS Гик

    Спрошу еще, если ответите...
    При чтении с SD карты в примере используется код:
    Код (Text):
        int data;
        while ((data = File.read()) > 0)
        {
                Serial.write(data);      
        }
    При чтении файла, считывается все его содержимое за раз? Я правильно понимаю?
    Не пойму как правильно объявить массив char[], чтобы подставить в File.read(), если я не знаю размер файла. А в библиотеке SdFat функцию Size() я не нашел.
     
  4. AlexVS

    AlexVS Гик

    А при написании следующего получается фигня:
    Код (Text):
        long n = dataFile.fileSize();
        char c[n];
        dataFile.read(c,sizeof(c));
        Serial.println(c);
     
  5. geher

    geher Гуру

    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");
      }
     
    Короче говоря в простом случае читаем файл байт за байтом и делаем что-то с этими байтами (в примере сплавляем в последовательный порт). Можно и в массив загнать, но читать все равно по одному байту.
     
  6. AlexVS

    AlexVS Гик

    geher, я слегка заблудился в используемых библиотеках для работы с SD.
    По ссылке, на arduino.cc показано как работать используя SD.h, а в примерах для iBoard (именно с ней я сейчас и работаю) используется SdFat.h. Свойства и методы у этих библиотек отличаются.
    Не совсем понятно, если я хочу считать файл в массив, то как указать размерность массива при объявлении, если я не знаю какой нужен размер.
     
  7. AlexVS

    AlexVS Гик

    В описании библиотеки 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 возвращает очередной байт? Т.е. его можно положить в массив или добавить к строке?