Библиотека для работы со строками

Тема в разделе "Arduino & Shields", создана пользователем kt315where, 11 фев 2018.

  1. kt315where

    kt315where Гик

    Здравствуйте

    Подскажите, есть ли какие-то библиотеки для работы и "вырезания" текста и слов из строки, приходящей в Serial? или например еще проще - по номеру строки.

    Например в Serial приходит несколько строк. Каждая строка содержит числовое или текстовое значение, эти значения надо перенести в переменные. Я смог сделать это через substring, но эта функция позволяет вырезать текст из строки, задавая первый и последний символ области вырезания текста. Но данные могут меняться, следовательно и длинна их может быть разной, поэтому substring не совсем правильное решение.

    А можно ли например сделать свои собственные метки (начала и конца области вырезаемого текста), но не по номеру символа, а скажем по тегам-меткам ? Очень давно на каком-то форуме находил информацию про библиотеку для подобных операций с строками
     
  2. b707

    b707 Гуру

    Если вы хотите расставить в тексте свои метки и вырезать по ним - для этого не нужны никакие библиотеки, все уже есть.
    пример, вырезаем значение между "#":
    Код (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) ;
     
    И вообще, читайте документацию ардуино, там еще много что есть
     
    kt315where нравится это.
  3. kt315where

    kt315where Гик

    Благодарю, попробую этот способ!
     
  4. kt315where

    kt315where Гик

    Мне удалось по аналогии вашего примера сделать метки и вырезать из строки нужные данные.
    Постепенно начал вникать в принцип работы со строчками. Но возник вопрос - не совсем понял для чего в значении переменной int index2 нужно index1 +1, поясните если не трудно.

    В вашем примере вы привели одинаковый символ # в обоих метках. А можно ли вместо одинаковых символов # использовать например уникальные текстовые метки вроде "metka_start" вначале и "metka_konec" в конце?
     
  5. b707

    b707 Гуру

    А вы почитайте описание IndexOf.
    IndexOf('#') - ищет '#' с начала строки
    IndexOf('#', x) - ищет '#' с позиции x
    В моем примере сначала мы ищем первый символ # с начала строки, а потом нам нужно найти второй '#' - поэтому поиск начинается с позиции на 1 больше, чем найденный первый #

    В качестве меток можно использовать любые строки - можно одинаковые, можно разные. Но лучше, чтобы они были покороче - экономить память, и удобнее, когда они заметнее в строке.
     
    kt315where и DetSimen нравится это.
  6. kt315where

    kt315where Гик

    Во, теперь наконец-то разобрался. Решил все-таки прийти к одинаковым меткам.

    Код (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 каждым чтением данных из переменных.

    Я так понял точка отсчета выводимой области текста начинается именно перед меткой #, следовательно эта метка и сама становиться частью выводимого текста
     
    b707 нравится это.
  7. b707

    b707 Гуру

    Ну да. я признаться, точно не помнил - надо вычитать единицу или нет - но решил что вы сами справитесь :)
     
    kt315where нравится это.
  8. kt315where

    kt315where Гик

    Скажите, а будет ли в качестве метки-разделителя работать обычный пробел? или символ новой строки?
     
  9. DIYMan

    DIYMan Guest

    А сам как думаешь? Подсказка: чем таким особым отличается пробел или символ новой строки, чтобы его было запрещено использовать в качестве разделителя? Ответь на этот вопрос - и поймёшь - можно или нет.
     
    kt315where нравится это.
  10. Onkel

    Onkel Гуру

    Да.
     
    kt315where нравится это.