Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для krusty96
1 / 1 / 0
Регистрация: 12.01.2012
Сообщений: 5

Поиск двух чисел из определенной строки в html коде

12.01.2012, 20:09. Показов 1487. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
В программировании новичек. Столкнулся с проблемой, которую не могу решить. Прошу вашей помощи в этом.

Нужно в коде html страницы из определенной строки найти два числа и вывести их, например, в Memo1.

Что я делаю. Открываю в CppWebBrowser страницу и записываю исходный код html страницы, например, в ht.
В html коде есть, например, такая строка:

HTML5
1
<TD vAlign=top align=left><IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/imag.png" width=12 height=12><SPAN>1342</SPAN> <IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/kartinka.png" width=12 height=12><SPAN>1932</SPAN> </TD>
Из этой строки мне НУЖНО ЗАПИСАТЬ в Memo1 то, что находится в тегах <SPAN>, т.е. ТОЛЬКО ЧИСЛА (в данном случае это 1342 и 1932. Оба числа 4-х значные!).
С этим проблем нет. Я их нахожу по позициям следующим образом:

C++
1
2
3
4
5
6
7
8
for (int i = 0; i < ht.Length(); i++)
{
int ht1=ht.Pos("<SPAN>");
int ht2=ht.Pos("</TD>");
 Memo1->Lines->Add(hp.SubString(ht1+6,ht2-ht1-129));
 Memo1->Lines->Add(hp.SubString(ht1+121,ht2-ht1-129));
 ht = ht.SubString(ht1,ht2-ht1);
}
В результате в Memo1 записывается 1342 и 1932. Здесь все нормально!

НО! Эти числа, которые мне нужны, могут быть любыми в пределах от 0 до 20000. И возникает проблема если числа (либо первое число, либо второе, либо оба числа) не 4-х значные. Например:
HTML5
1
<TD vAlign=top align=left><IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/imag.png" width=12 height=12><SPAN>42</SPAN> <IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/kartinka.png" width=12 height=12><SPAN>1932</SPAN> </TD>
то тогда здесь в резуьтате в Memo1 Записывается 42 и 32, а должно быть 42 и 1932. Так получается, потому что я нахожу конкретные позиции для двух 4-х значных чисел.

Так же адреса картинок в этой строке могут изменяться на
HTML5
1
2
3
https://www.cyberforum.ru/images/icons/imag_123.gif
и
https://www.cyberforum.ru/images/icons/kartinka_321.gif
Эти картинки мне не нужны. Это я к тому что пизиции чисел опять же уже сместятся.
Например:

HTML5
1
<TD vAlign=top align=left><IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/imag.png" width=12 height=12><SPAN>1342</SPAN> <IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/kartinka_321.gif" width=12 height=12><SPAN>32</SPAN> </TD>
В результате: 1342</ и PAN>32, а должно быть 1342 и 32

Как можно это исправить? Может как то проверять если в результате не число, то тогда сделать сдвиг? но только не могу понять если сдвигать, то что и куда и вообще нужно ли это...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2012, 20:09
Ответы с готовыми решениями:

Вывод определенной строки HTML кода
Здравствуйте! Есть HTML код. В нём, например 5 строк: 1111 222 3333 4444 5555 Как сделать, что бы при нажатии на кнопку...

Поиск текста в коде HTML
Извлекаю код из страницы и ищу нужное мне значение. Если пишу так то находит нужное: ...

Поиск тектста в html-коде
В БД хранится html-код. Необходимо произвести поиск и выдать результат без html-кода.. определенной длины. Сам SQL-запрос это не...

4
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
12.01.2012, 20:35
если искать надо в строке в таком формате:
HTML5
1
https://www.cyberforum.ru/images/icons/imag_123.gif
или похожем формате, то можно попытаться использовать функцию ExtractStrings
C++
1
2
3
4
TSysCharSet Tws,Tcs;  
Tcs<<'_'<<'.'; // разделители
AnsiString s = "https://www.cyberforum.ru/images/icons/imag_123.gif";
ExtractStrings(Tcs,Tws,s.c_str(),Memo1->Lines);
или програмно высчитывать то, что вы задаете руками
ht1+6,ht2-ht1-129));
ht1+121,ht2-ht1-129
2
 Аватар для krusty96
1 / 1 / 0
Регистрация: 12.01.2012
Сообщений: 5
13.01.2012, 03:15  [ТС]
Спасибо! Мысль подкинули. Попробую. Не подумал что можно же разбить строку на слова.

Добавлено через 6 часов 18 минут
так. если использовать ExtractStrings

C++
1
2
3
4
TSysCharSet Tws,Tcs;  
Tcs<<'_'<<'.'; // разделители
AnsiString s = "https://www.cyberforum.ru/images/icons/imag_123.gif";
ExtractStrings(Tcs,Tws,s.c_str(),Memo1->Lines);
то тогда только уже удалением лишних строк ну или брать конкретные строки и выводить то что мне нужно?

я тут немного подругому еще попробовал:
есть такая строка (res):
HTML5
1
https://www.cyberforum.ru/images/icons/imag.png" width=12 height=12><SPAN>2321</SPAN> <IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/kartinka_321.gif" width=12 height=12><SPAN>32</SPAN>
делаю следующее:
C++
1
2
3
4
5
6
7
8
int e = res.Pos("<SPAN"); //позиция начала тега <SPAN>
if (e)
{
  int text1 = res.Pos(">")+7; //конец тега + 7 = начало числа
  int text2 = res.Pos("</SPAN>");
  s = res.SubString(text1,text2-text1);
   Memo2->Lines->Add(s);
}
как бы не изменялась строка до первого тэга (<SPAN>) первого числа он выведет именно нужные числа.
Но как мне так же второе число найти в ЭТОЙ же строке? может цикл нужен какой, но как его здесь организовать?

есть еще один извращенский вариант. для нахождения и вывода второго числа:
C++
1
2
3
4
5
6
7
8
9
10
11
int k = res.Pos("<IMG");
int d = res.Pos("<SPAN");
if (k)
{
if (d)
{
  int text11 = res.Pos(">")+7;
  int text22 = res.Pos("</SPAN>");
  l = res.SubString(text11,text22-text11);
   Memo2->Lines->Add(l);
}}
но опять же он выводит вместо второго числа первое. хотя вроде должен начинать от тега <IMG
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.01.2012, 04:07
C++
1
2
3
4
5
6
7
AnsiString s = "<TD vAlign=top align=left><IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/imag.png" width=12 height=12><SPAN>1342</SPAN> <IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/kartinka_321.gif" width=12 height=12><SPAN>32</SPAN> </TD>";
// Здесь придется использовать StringReplace
// для экранирования \" кавычек в строке
TSysCharSet Tws,Tcs;  
Tcs<<'>'<<'<'; // разделители
ExtractStrings(Tcs,Tws,s.c_str(),Memo1->Lines);
// потом отсортировать пустые строки
1
 Аватар для krusty96
1 / 1 / 0
Регистрация: 12.01.2012
Сообщений: 5
15.01.2012, 21:47  [ТС]
LK, Спасибо. с твоим способом че то не все разобрался
C++
1
2
3
4
5
6
7
AnsiString s = "<TD vAlign=top align=left><IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/imag.png" width=12 height=12><SPAN>1342</SPAN> <IMG border=0 alt="" src="https://www.cyberforum.ru/images/icons/kartinka_321.gif" width=12 height=12><SPAN>32</SPAN> </TD>";
// Здесь придется использовать StringReplace
// для экранирования \" кавычек в строке
TSysCharSet Tws,Tcs; 
Tcs<<'>'<<'<'; // разделители
ExtractStrings(Tcs,Tws,s.c_str(),Memo1->Lines);
// потом отсортировать пустые строки
Но я все таки свой последний способ реализовал)) правда много кода получилось.
буду твой еще пробовать. Хоть и сделал уже по своему, НО нужно с твоим разобраться!

Добавлено через 12 часов 48 минут
можно закрывать тему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2012, 21:47
Помогаю со студенческими работами здесь

Поиск определенной строки в файле
Подскажите пожалуйста!!! Я только начал изучение PHP и многого еще не знаю и хотел бы спросить. Нужно в файле найти и вывести на экран...

Поиск заданного текста в HTML коде
Добрый день, уважаемые форумчане. не буду вдаваться в подробности, скажу лишь одно, с Явой знаком крайне мало. По работе возник...

Поиск конкретного значения в коде html
Всем привет! В html коде, мне нужно узнать конкретное значение. Например &lt;a...

Поиск определенной строки и замена её на другую
Здравствуйте. Возник вопрос, как сначала найти определенную строку в файле, к примеру: шестую, а потом эту же строку заменить на...

Поиск файлов Word по содержанию определенной строки
Необходимо произвести поиск файлов WORD по содержанию определенной строки. Установлен word 2007 так что Word.Application.FileSearch не...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru