Skip to content

Простой и быстрый парсер строк в отдельные подстроки и числа для Arduino

License

Notifications You must be signed in to change notification settings

GyverLibs/GParser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Foo Foo Foo

GParser

Простой и быстрый парсер строк в отдельные подстроки и числа для Arduino

  • Работает с указанным буфером (строкой), не создаёт свой
  • Разделяет строку на подстроки по указанному символу
  • Позволяет обращаться к подстрокам, переводить их в числа и сравнивать со строками
  • Доступ к подстрокам через []
  • Может распарсить строку в массив int или byte

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Установка

  • Библиотеку можно найти по названию GParser и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Инициализация

// передать char array строку, можно указать символ разделитель (по умолч ',')
GParser (char* data);
GParser (char* data, char newDiv = ',');

Использование

Класс GParser

void setDiv(char newDiv);       // указать символ разделитель
void clear();                   // освободить буфер
int amount();                   // количество разделённых данных в пакете
int split();                    // разделить строку на подстроки
int16_t getInt(int num);        // получить инт из выбранной подстроки
float getFloat(int num);        // получить float из выбранной подстроки
bool equals(int num, const char* comp); // сравнить подстроку с другой строкой
int parseInts(int* data);       // распарсить на инты
int parseBytes(byte* data);     // распарсить на байты

Отдельные функции парсинга

См. пример testUtils

// количество подстрок в списке list с разделителем div
uint8_t GP_listSize(char* list, char div = ',');

// разделить список list с разделителем div на подстроки (см. пример)
char* GP_splitList(char* list, char div = ',');

// получить номер, под которым name входит в list с разделителем div. -1 если не входит
int8_t GP_inList(char* name, char* list, char div = ',');

// преобразовать int в строку (работает в 3-10 раз быстрее ltoa + основание)
void GP_numToChar(int32_t n, char* buf, uint8_t base);

// преобразовать float в строку
void GP_floatToChar(double f, char *buf, uint8_t decimals);

// преобразовать строку в число
int32_t GP_charToNum(char* buf, uint8_t base);

// преобразовать строку в float
double GP_charToFloat(char* buf);

// получить число под индексом idx в списке list с разделителем div
int GP_numFromList(char* list, int idx, char div = ',');

// переписать список list с разделителем div в массив чисел data размером size
uint8_t GP_listToNum(char* list, int* data, uint8_t size, char div = ',');

// преобразовать текстовый цвет (0x, #) в число
uint32_t GP_decodeColor(char* hex);

Пример

Остальные примеры смотри в examples!

// тест парсера строк
#include <GParser.h>

void setup() {
  Serial.begin(9600);

  // ==================== ПРИМЕР 1 ======================
  // строка для примера
  // данные разделены разделителем, например запятой
  // могут быть получены из Serial/UDP/TCP/MQTT итд
  char str[] = "1234,3.14,hello,4567,lolkek,qwerty";

  // кормим строку парсеру, указываем разделитель (умолч. запятая)
  GParser data(str, ',');

  // разделяем
  // ВНИМАНИЕ! Операция "ломает" строку, заменяя разделители на NULL
  int am = data.split();
  // получаем количество данных

  Serial.println(am); // выводим количество

  // можем обратиться к полученным строкам как data[i] или data.str[i]
  for (byte i = 0; i < am; i++) Serial.println(data[i]);

  // также можно получить их в виде int и float чисел
  // передав индекс строки
  Serial.println(data.getInt(0));
  Serial.println(data.getFloat(1));

  // можно сравнить со строкой (номер парс строки, строка для сравнения)
  if (data.equals(2, "hello")) Serial.println("true");
  else Serial.println("false");
  
  Serial.println();
  
  // ==================== ПРИМЕР 2 ======================
  // быстрый парсинг целочисленных данных с разделителем
  char str2[] = "123,456,789,222,333,444";
  GParser data2(str2);   // кормим строку парсеру

  // создаём массив с количеством ячеек data2.amount() - столько данных в пакете
  int ints[data2.amount()];
  
  int am2 = data2.parseInts(ints);  // раскидает в указанный массив и вернёт количество
  // фактически тут am2 == data2.amount() - количество данных
  // выводим
  for (byte i = 0; i < am; i++) Serial.println(ints[i]);
}

void loop() {
}

Версии

  • v1.0
  • v1.1 - добавлены отдельные инструменты для парсинга
  • v1.2 - добавлены ещё инструменты для парсинга

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

About

Простой и быстрый парсер строк в отдельные подстроки и числа для Arduino

Resources

License

Stars

Watchers

Forks

Packages

No packages published