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

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

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

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

Нужно в коде 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2012, 20:09
Ответы с готовыми решениями:

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

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

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

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

4
LK
Заблокирован
12.01.2012, 20:35 2
если искать надо в строке в таком формате:
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
1 / 1 / 0
Регистрация: 12.01.2012
Сообщений: 5
13.01.2012, 03:15  [ТС] 3
Спасибо! Мысль подкинули. Попробую. Не подумал что можно же разбить строку на слова.

Добавлено через 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
LK
Заблокирован
13.01.2012, 04:07 4
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
1 / 1 / 0
Регистрация: 12.01.2012
Сообщений: 5
15.01.2012, 21:47  [ТС] 5
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
15.01.2012, 21:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2012, 21:47
Помогаю со студенческими работами здесь

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

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

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

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


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

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