Доброго уважаемые форумчане, вопрос по строковым переменным получаемым, ну например через сериал. Предположим ко мне приходит строка var1:10 var2:250.. varN:NN... я читаю её через serial.read(), а как дальше её распарсить? Ну исключаем serial.parseint Второй вопрос из этой же серии, но иной. Получаем данные с GPS, как эту строку разобрать на части?!
Если по простому, то по очереди сравниваете приходящие символы с некоторым шаблоном, и ориентируетесь по результатам сравнения, выделяете подстроки и интерпретируете их как вам нужно. А вообще, поинтересуйтесь такими понятиями как "лексический анализ", "синтаксический анализ", "конечный автомат". Есть совершенно замечательная книга на эту тему. Непосредственно для работы со строками можно пользоваться всеми функциями C/C++, не забывая при этом, что у МК очень немного памяти.
А теперь вернемся к конкретике. Есть ли функции отвечающие за выделение в переменные (можно array) в Arduino IDE. (по типу split в php)
Вы случайно не String::substring(int from, int to) ищете? Готовой функции разбора строки по разделителям или регулярным выражениям в адруиновских классах нет. Доступа к внутреннему буферу класса String нет, но можете сами сделать его в наследнике класса String и отдать сырую char* строку в libc, STL, Boost или что вы предпочитаете. Ну или написать функцию разбора с нуля или класс свой какой-нибудь class SuperString: public String {} если есть желание.
Что то нашел Код (Text): #include <string.h> char sz[] = "Here; is some; sample;100;data;1.414;1020"; void setup() { char *p = sz; char *str; Serial.begin(9600); while ((str = strtok_r(p, ";", &p)) != NULL) // delimiter is the semicolon Serial.println(str); } void loop(){} generates this output: Here is some sample 100 data 1.414 1020
//функция для парсинга массива String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = {0, -1}; int maxIndex = data.length()-1; for(int i=0; i<=maxIndex && found<=index; i++){ if(data.charAt(i)==separator || i==maxIndex){ found++; strIndex[0] = strIndex[1]+1; strIndex[1] = (i == maxIndex) ? i+1 : i; } } return found>index ? data.substring(strIndex[0], strIndex[1]) : ""; } // далее в void loop () String part01 = getValue(SMStxt,';',0); String part02 = getValue(SMStxt,';',1); String part03 = getValue(SMStxt,';',2); //