Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
20 / 20 / 7
Регистрация: 18.02.2015
Сообщений: 304

Распарсить строку с сайта

17.06.2015, 19:56. Показов 1688. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сообщение Test выводит. А вот сам текст не выводит. Что делать? Строка выглядит так:

<div class="head_2"> Сервер 4<br>mTSG@72_Touch_Me_v4 </div>

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
AnsiString One=IdHTTP1->Get("http://www.xn--c1adahg2atfb8hee9d.xn--p1ai/");
 
    String N,K;
 
    N="<div class=\"head_2\"> Сервер 4<br />";
    K="</div>";
 
    int p,p2;
 
     while (One.Pos(N)&&One.Pos(K)) {
 
 
      if (p == 0 && p2 == 0) break;
 
    p=One.Pos(N);
    p2=One.Pos(K);
    AnsiString Value="None";
    Value=One.SubString(p,p2-p);
    if (p!=0&&p2!=0) Memo1->Lines->Add(Value+"Test");
 
     int sPos = One.Pos(N);
      int ePos = One.Pos(K);
      if (sPos == 0 && ePos == 0) break;
      if (sPos != 0) One.Delete(sPos,1);
      if (ePos != 0) One.Delete(ePos,1);
    }
    ShowMessage("Compite");
Взял готовый код тут же на КИберфоруме. Помогите с проблемой, либо киньте нормальный парсер :c

Взял от сюда парсер: Парсер HTML
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2015, 19:56
Ответы с готовыми решениями:

Распарсить строку url
Как лучше выудить информацию из урл? Пример ссылки: test.com/?url=test.com/skype.exe&amp;name=skype.exe&amp;size=500045 Нужно выудить ...

Как распарсить строку AnsiString?
Есть строка - &quot;name par&quot;; Как из нее извлечь значение name, заключенное в скобки и значение par, заключенное в скобки? AnsiString...

Как распарсить json строку VK
Делаю запрос на VK API, получаю строку вида: Как теперь достать отсюда элементы? Нашел у себя &quot;DBXJSON.hpp&quot;, но ломаюсь с...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33407 / 21517 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
17.06.2015, 20:26
XE2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::GetEncoding(1251), true));
    IdHTTP1->Get("http://www.xn--c1adahg2atfb8hee9d.xn--p1ai/", ss.get());
    String One = ss->DataString;
 
    std::auto_ptr<TRegExpr> re (new TRegExpr);
    re->InputString = One;
    re->ModifierM = true;
    re->Expression = L"<div class=\"head_2\"> Сервер 4<br />(.*?)</div>";
    re->Compile();
    if(re->Exec(re->InputString))
    {
        ShowMessage(re->Match[1]);
    }
Миниатюры
Распарсить строку с сайта  
1
20 / 20 / 7
Регистрация: 18.02.2015
Сообщений: 304
17.06.2015, 20:34  [ТС]
А какие библиотеки подключать надо?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
17.06.2015, 20:53
Меня вот больше интересует технология парсинга, а не реализация, послежу за темой
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
17.06.2015, 21:36
Лучший ответ Сообщение было отмечено Appi как решение

Решение

еще вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "System.RegularExpressions.hpp"
 
//...
 
std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::GetEncoding(1251), true));
IdHTTP1->Get("http://www.xn--c1adahg2atfb8hee9d.xn--p1ai/", ss.get());
String One = ss->DataString;
 
String expr = L"<div class=\"head_2\"> Сервер 4<br />(.*?)</div>";
TRegExOptions reg_opt = TRegExOptions() << roIgnoreCase << roMultiLine;
 
if (TRegEx::IsMatch(One, expr, reg_opt)) ShowMessage(TRegEx::Match(One, expr, reg_opt).Groups[1].Value);
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33407 / 21517 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
17.06.2015, 22:24
Цитата Сообщение от _Dimon_ Посмотреть сообщение
TRegEx
не умеет работать с Юникодом как положено, можно начать ловить глюки на пустом месте (что неоднократно уже происходило, не нужно думать, что нет другого языка локализации системы, кроме русского, и нет сайтов на других языках. Понадобится завтра найти что-нибудь с умляутами - будет небезызвестная картина Репина). Поэтому до сих пор используется старая проверенная временем библиотека TRegExpr (просто линкуется pas-файл к проекту, после его компиляции Билдером создается hpp, который и подключается как обычно). Программы работают годами. Пока сбоев не было.
0
20 / 20 / 7
Регистрация: 18.02.2015
Сообщений: 304
17.06.2015, 22:52  [ТС]
А как несколько строчек за 1 раз проверить?

Добавлено через 7 минут
Разобрался.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.06.2015, 23:16
Блин насолько часто требуется что-то нестандартное кроме англ/рус языка что бы из-за этого тянуть левый пас файл в проекте вместо стандартного TRegEx который кстате более очевиден в плане самих регулярок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2015, 23:16
Помогаю со студенческими работами здесь

Распарсить строку с помощью регулярного выражения
Парсю вот таким способом: String One = ss-&gt;DataString; String expr = &quot;\&quot;body\&quot;:\&quot;(.*?)\&quot;&quot;; TRegExOptions reg_opt = TRegExOptions()...

Распарсить страницу сайта
Всем привет. Главная страница сайта имеет расширение aspx. При этом если переходить по другим страницам, то расширение страницы...

Распарсить строку
Доброго времени суток. У меня есть строка вида: &quot;{var1}{var2}const1{var3}const2&quot; Мне нужно её распарсить и получить на выходе {var1} ...

Распарсить строку
Всем привет. Есть массив, состоящий из строк, удовлетворяющих маску &quot;qwe_*_*_asd&quot;, где &quot;*&quot; - это произвольное количество...

Распарсить строку
String s = &quot;`user999` | 1882 &quot;; string pattern = @&quot;(\d)+&quot;; RegexOptions option = RegexOptions.IgnoreCase; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru