Здравствуйте Подскажите, есть ли какие-то библиотеки для работы и "вырезания" текста и слов из строки, приходящей в Serial? или например еще проще - по номеру строки. Например в Serial приходит несколько строк. Каждая строка содержит числовое или текстовое значение, эти значения надо перенести в переменные. Я смог сделать это через substring, но эта функция позволяет вырезать текст из строки, задавая первый и последний символ области вырезания текста. Но данные могут меняться, следовательно и длинна их может быть разной, поэтому substring не совсем правильное решение. А можно ли например сделать свои собственные метки (начала и конца области вырезаемого текста), но не по номеру символа, а скажем по тегам-меткам ? Очень давно на каком-то форуме находил информацию про библиотеку для подобных операций с строками
Если вы хотите расставить в тексте свои метки и вырезать по ним - для этого не нужны никакие библиотеки, все уже есть. пример, вырезаем значение между "#": Код (C++): String stringOne = "temperature de processor#7,55# gradus"; int index1 = stringOne.indexOf('#'); int index2 = stringOne.indexOf('#', index1 +1); String Temp = stringOne.substring(index1,index2) ; И вообще, читайте документацию ардуино, там еще много что есть
Мне удалось по аналогии вашего примера сделать метки и вырезать из строки нужные данные. Постепенно начал вникать в принцип работы со строчками. Но возник вопрос - не совсем понял для чего в значении переменной int index2 нужно index1 +1, поясните если не трудно. В вашем примере вы привели одинаковый символ # в обоих метках. А можно ли вместо одинаковых символов # использовать например уникальные текстовые метки вроде "metka_start" вначале и "metka_konec" в конце?
А вы почитайте описание IndexOf. IndexOf('#') - ищет '#' с начала строки IndexOf('#', x) - ищет '#' с позиции x В моем примере сначала мы ищем первый символ # с начала строки, а потом нам нужно найти второй '#' - поэтому поиск начинается с позиции на 1 больше, чем найденный первый # В качестве меток можно использовать любые строки - можно одинаковые, можно разные. Но лучше, чтобы они были покороче - экономить память, и удобнее, когда они заметнее в строке.
Во, теперь наконец-то разобрался. Решил все-таки прийти к одинаковым меткам. Код (C++): index2 = val.indexOf('#',index1 +1); index3 = val.indexOf('#',index2 +1); index4 = val.indexOf('#',index3 +1); index5 = val.indexOf('#',index4 +1); index6 = val.indexOf('#',index5 +1); index7 = val.indexOf('#',index6 +1); index8 = val.indexOf('#',index7 +1); Правда в substring пришлось у каждого значения вычесть один символ назад (-1), т.к выводило вначале символ # c каждым чтением данных из переменных. Я так понял точка отсчета выводимой области текста начинается именно перед меткой #, следовательно эта метка и сама становиться частью выводимого текста
Ну да. я признаться, точно не помнил - надо вычитать единицу или нет - но решил что вы сами справитесь
А сам как думаешь? Подсказка: чем таким особым отличается пробел или символ новой строки, чтобы его было запрещено использовать в качестве разделителя? Ответь на этот вопрос - и поймёшь - можно или нет.