Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 1
Регистрация: 02.03.2015
Сообщений: 37
1

Найти ближайший текст

31.03.2015, 12:10. Показов 1116. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Никак не получается пройти текст назад до ближайшей фразы.
Знаю, что по символу можно найти с помощью функции strrchr. Какая функция позволит определить фразу?
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2015, 12:10
Ответы с готовыми решениями:

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

Найти элемент последовательности ближайший к заданному числу
Есть задача, не понимаю что как делать Дана последовательность вещественных чисел a1,a2, ... ,...

Найти узел, имеющий ближайший к значению ключ
Всем привет. Есть условие. первая часть уже решена. помогите пожалуйста найти узел, имеющий...

Найти элемент двухмерного массива, ближайший к числу
Помогите подправить программу: Найти элемент двухмерного массива, ближайший к числу -2, и его...

2
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
31.03.2015, 12:37 2
ДмитрийЛАСТ, а немного по подробней можно?
0
0 / 0 / 1
Регистрация: 02.03.2015
Сообщений: 37
01.04.2015, 04:44  [ТС] 3
Лучший ответ Сообщение было отмечено ДмитрийЛАСТ как решение

Решение

Задача следующая: Проверке подвергается масса сайтов учреждений. На каждом должны быть определенные разделы.
Этим кодом я нахожу нужный раздел, например Основные сведения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
long int __fastcall TGlav_Form::FindHttpText(String httpmemo, int numberUrl, int numberText)
{
    /*std::wstring wstdLine(HtmlMemoText.t_str());
    std::string stdLine(wstdLine.begin(), wstdLine.end());*/
    Application->ProcessMessages();
    String HtmlMemoText = httpmemo;
    std::string stdLine(AnsiString(HtmlMemoText).c_str());
    std::string ExpressionText(AnsiString(ListBox2->Items->Strings[numberText]).c_str());
    boost::regex xRegEx (ExpressionText);
    boost::smatch xResults;
    std::string::const_iterator xItStart = stdLine.begin();
    std::string::const_iterator xItEnd = stdLine.end();
    if ((boost::regex_search(xItStart, xItEnd, xResults, xRegEx)) && (sizeof(xResults) > 1)) {
        return xResults.position();
    } else return -1;
}
Но никак ни могу понять, как теперь соответствующую href взять.
Пробую так:
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
28
29
30
31
32
        //Третий вариант
 
        String HtmlMemoText = httpmemo.SubString(0, positionText);
        std::string stdLine(AnsiString(HtmlMemoText).c_str());
        //std::string ExpressionText("(?-i)href\\=");
        std::string ExpressionText("href");
        boost::regex xRegEx (ExpressionText);
        boost::smatch xResults;
        std::string::const_iterator xItStart = stdLine.begin();
        std::string::const_iterator xItEnd = stdLine.end();
        int pos = 0;
        int max_pos = 0;
        std::string found;
        while (((boost::regex_search(xItStart, xItEnd, xResults, xRegEx))) && (pos != HtmlMemoText.Length())){
            found.assign(xResults[0]);
            pos += xResults.position(0);
            if (pos > max_pos) max_pos = pos;
            xItStart = xResults[1].second;
        }
        String HtmlMemoText_T = HtmlMemoText.SubString(max_pos, HtmlMemoText.Length());
        max_pos = HtmlMemoText_T.Pos("href");
        AnsiString itogova = "";
        AnsiString HtmlMemoText_ = HtmlMemoText_T;
        char *lastsymbol = HtmlMemoText_.c_str();
        char *skobka = "\"";
        int nn = strlen(lastsymbol);
        for (int i = max_pos + 5; i < nn; i++) {
            if (lastsymbol[i] != *skobka) {
                itogova = itogova + lastsymbol[i];
            }
            else break;
        }
Но, мне почему то за две ссылки выше считывается href.
То ли boost::regex_search max_pos не определяет. Вообщем мне надо ближайший к найденному тексту тег href.
Спасибо.

Добавлено через 5 часов 9 минут
Я пробовал и так, понятно, что функция char. Поэтому тоже не идет. Неужели никто не парсил текст?
C++
1
2
3
4
5
6
7
8
9
10
        AnsiString findhref = httpmemo.SubString(0, positionText);
        char *stroka = findhref.c_str();
        char *lastsymbol;
        lastsymbol = strrchr(stroka, 'href');
        long int n = lastsymbol - stroka + 4;
        char *lastsymbol_;
        lastsymbol_ = strchr(lastsymbol, '>');
        long int nn = lastsymbol_ - lastsymbol + 1;
        AnsiString lastsymbol__ = lastsymbol;
        AnsiString findhref_ = lastsymbol__.SubString(4, nn-5);
Добавлено через 10 часов 31 минуту
Путем экспериментов обнаружил, что есть ошибка в регулярке:
C++
1
2
3
std::string ExpressionText("(?-i)href\\=");
ЗАМЕНИЛ НА
std::string ExpressionText("<a +href=\"");
Но, например для:
PHP/HTML
1
2
3
4
<a class="item" href="/articles/146-struktura-i-organy-upravlenija.html"  target="_self">
<span class="wrap">
Структура и органы управления</span>
</a>
не работает.
Так же не пойму, почему мне приходится использовать:
C++
1
2
        String HtmlMemoText_T = HtmlMemoText.SubString(max_pos, HtmlMemoText.Length());
        max_pos = HtmlMemoText_T.Pos("href");
Полагал, что регулярка должна найти.
Может подскажете универсальную регулярку для этих целей?
0
01.04.2015, 04:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2015, 04:44
Помогаю со студенческими работами здесь

В бинарном дереве найти ближайший путь к заданному узлу
В заданном непустом бинарном дереве найти длину (число ветвей) пути от корня до ближайшей вершины...

Найти элемент последовательности (его порядковый номер и значение), ближайший к n
я не прошу код(но не откажусь). Хотя бы с чего мне начать подскажите задача: Дана...

Найти в массиве ближайший по значению элемент меньший заданного числа
Добрый день, господа. Помогите пожалуйста с решением задачи. Дано некоторое число А. Найти в...

Найти ближайший факториал (С паскаля на C)
Здравствуйте! Нужно написать программу в C На паскале она уже написана. Пожалуйста помогите. Вот...

Найти ближайший элемент массива
Дан массив из 10 целых чисел. Определить среднее арифметическое элементов массива, а также...

Быстро найти ближайший целый делитель
Привет, делаю перебором на больших числах слишком много времени мать его отнимает( Иногда по 5...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru