Разбор строки с помощью strtok или sscanf и присвоение полученных значений переменным
- Войдите на сайт для отправки комментариев
Помогите разобрать приходящие по serial-у строки на подстроки и присвоить полученные значения неким переменным для дальнейше обработки.
В serial приходят строки вида
XXXXX: '\t' yy.y '\t' zz.z
где XXXX: - буквы, уу.у и zz.z - числа (могут быть целочисленными или с плавающей запятой), значения разделены символами табуляции.
Мне нужно разобрать эти строки и присвоить полученные значения переменным, например a=XXXX: b=yy.y c=zz.z С помощью strtok получилось это сделать
char *pch; pch = strtok (buffer,"\t"); while (pch != NULL) { mySerial.println(pch); pch = strtok (NULL, "\t"); delay(10);}
но как присвоить значения переменным незнаю. Вычитал что умные люди делают это с помощью sscanf, но опять же поскольку я себя пока к таковым не отношу сделать ничего не получается. Поэтому прошу помощи - подскажите каким образом это сделать или дайте хотя бы ссылку на полноценные примеры.
да, забыл сказать что делал разбор также с помощью substring, но этот вариант тоже не подходит, т.к. приходящие значения время от времени могут быть разной длины и соответственно будут искажаться.
Ищи по форуму, этот вопрос уже разбирался, я там тоже приводил в пример два метода.
Естественно что перед тем как задать вопрос перелопатил форум. Из всего что удалось найти или не подходит к моим хотелкам или так и осталось неотвеченным.
Вот стандартные функции для ардуино из которых можно собрать парсер данных пришедших по serial.
Ну и какую из этих функций применить чтобы из принятой строки
XXXX: yy.y zz.z
получить a=XXXX: b=yy.y c=zz.z ?
Ну и какую из этих функций применить чтобы из принятой строки
XXXX: yy.y zz.z
получить a=XXXX: b=yy.y c=zz.z ?
Например вот так:
Переменная String конечно много памяти кушает, если что используйте readBytesUntil() например.
Увы, но этот вариант мне не подходит. Строки из интересующей меня информации я собираю несколько иначе. Я уже смирился с "задержками", главное что получаю то что мне нужно. Осталось только разбить строки на подстроки и обработать их дальше. Кстати пробовал собирать строки с помощью Serial.readStringUnti() и Serial.readBytesUntil() - вообще ничего не получилось. Думал использовать что-то типа
sscanf(buffer, "{здесь должно быть каое-то форматирование}", &a,&b,&c);
но не знаю как правильно указать форматирование в скобках
Нигде не могу найти примеров sscanf чтобы все было разжевано на пальцах
На просторах сети когда-то достал такую функцию, попробуйте её доработать под свои нужды:
На просторах сети когда-то достал такую функцию, попробуйте её доработать под свои нужды:
Спасибо конечно, но я тут кагбэ со тсандартной "простой" функцией разобраться не могу, а вы мне предлагаете адаптировать написанную кем-то и еще без всяких пояснений. Мне бы че-нить попроще, а то я "смотрю в книгу и вижу фигу"
Итак, прошерстив найденные примеры и используя метод научного тыка добился кое-каких результатов
К надфилю переходить конечно рановато, но сменить рашпиль на напильник думаю уже можно