разбор строки по разделителю
- Войдите на сайт для отправки комментариев
Втр, 25/04/2017 - 15:37
Приветствую!!! Прошу помощи!
Столкнулся с проблемой при разборе строки. собираю теплицу
******* gprs.readSMS(message, phone); // читаю сообщение и номер отправителя delay(300); gprs.deleteSMS(messageIndex); // удаляю смс delay(300); char * text = message; // текстовое сообщение в массив char * part1 = text; // первая часть до разделителя ":" char * part2 = strchr(text, ':'); // вторая часть после разделителя до конца строки *part2++ = '\0';
Вот часть кода. В нем всё раскладывается на две части норм
Например приходит сообщение "Poliv:20" далее в первой части "Poliv" а во второй части "20" т.е длительность полива, а вот как разбить сообщение "Poliv:18.15" для настройки и записи времени полива, теперь надо разбить на три части 1 - "Poliv" 2 - "18" 3 - "15", а как это сделать не могу
1е действие - разбить на две части
2е действие - взять вторую часть и повторить действие первое
Пропробовал потому как удивился что part1 выводит "Poliv". Хотя явно указано что "part1 = text" а "text = message" а message у нас равен "Poliv:18.15". Ну и непонятно почему нельзя сразу "part1 message", результат будет тот же.
выводит это
То есть : это какойто волшебный разделитель для char?
Только что давал коллеге пример подобного разбора. Посмотрите в посте №2 - http://arduino.ru/forum/programmirovanie/eshche-raz-pro-strtok
у меня выводит это
в сериал порт при входящем смс "poliv:15" всё раскладывается и далее присваиваю переменной значение 15 и записываю в память контроллера, так что тут без волшебства всё ОК!
1 строка со старым значением 28, 4 строка присваиваю значение 15, 5 строка проверяю (обновилось ли)
получилось сделать!!!может и не так презентабельно)
при входящем смс тексте "Poliv:15"
расклад
при входящем смс тексте "Time_poliv:17.34"
расклад
для такой задачи больше подходит функция strtok
первый раз вызываем ее указывая первый разделитель, второй раз второй
обратите внимание, что второй и последующий разы вместо строки надо передавать NULL, функция внутри сама помнит указатель на следующую часть текста
Да я попробовал через strtok, работает. В принципе можно массив параметров сделать а не отдельные переменные, и в цикле тогда разбирать строку.
Да работает!!! Отправляю "Time:17.34" в порту расклад
проверено в железе и работает, спасибо! Теперь можно усложнить задачу разбора строки, попробую в строке - "время(RTC) установить, продолжительность полива (в ручном режиме), продолжительность полива при определенной влажности почвы в авторежиме - их 3, время полива в авто режиме, температура отрывания форточек, температура закрывания форточек. Отправлять настройки дуньке буду через андроид приложение посредством смс сообщений.