Функция Arduino для извлечения подстроки между указанными границами

До обработки

...
<div id="test">Текст</div>
...

Применяем функцию

DataString = ParseString(DataString, "<div id=\"test\">", "</div>");

И получаем

Текст

Данная функция идет от начала текста или кода WEB документа (DataString), находит StartMask, запоминает позицию. От этой позиции дальше ищет EndMask. В случае, если обе маски найдены, берет текст, расположенный между ними.

Таким образом можно легко извлекать различные данные из HTML кода WEB документа. Другими словами: парсить информацию с сайтов. Погоду, курсы валют и прочее…

Сама функция

String ParseString(String DataString, String StartMask, String EndMask)
{
  int i = 0;
  int j = 0;
  int SL = DataString.length();
  uint8_t founded = 0;
  int StartPos = -1;
  String ParseResult = "";
 
  if ( (DataString == "") || (StartMask == "") || (EndMask == ""))
  {
    return("");
  }
 
  while (i<SL)
  {
    if (DataString.charAt(i) == StartMask.charAt(0))
    {
 
      j = 1;
      StartPos = i;
 
      while (j<StartMask.length())
      {
        if (DataString.charAt(i+j) != StartMask.charAt(j))
        {
          j = StartMask.length();
        }
        j++;
      }
 
      if (j == StartMask.length())
      {
        founded = 1;
        i = SL;
      }
 
    }
    i++;
  }
 
  if (founded == 1)
  {
    i = StartPos + StartMask.length();
    while (i<SL)
    {
      if (DataString.charAt(i) == EndMask.charAt(0))
      {
 
        int j = 1;
 
        while (j<EndMask.length())
        {
          if (DataString.charAt(i+j) != EndMask.charAt(j))
          {
            j = EndMask.length();
          }
          j++;
        }
 
        if (j == EndMask.length())
        {
          ParseResult = DataString.substring(StartPos+StartMask.length(),i+j-EndMask.length());
          i = SL;
        }
 
      }
      i++;
    }
  }  
 
  return(ParseResult);
}



1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Optionally add an image (JPEG only)