Что нового

Поиск данных в html коде для дальнейшего сравнения

Шайтанчег

Новичок
Сообщения
15
Репутация
0
Доброго времени суток,
в веб страничке есть такая строка
Код:
<div class='char_stat' id='char'   onMouseOver="doItem('design_hps','now:|28|;max:|6730|;speed:|56|',event,this)" >
подскажите как можно из всего текста кода вытянуть числовое значение now (в данном случае оно = 28) чтобы в дальнейшем его сравнить с другим числом?
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Здесь всё зависит от того, каким способом вы работаете со страницей, через браузер, или считываете методом InetRead?

Для InetRead попробуйте так:
Код:
Dim $sData = InetRead("http://страница.ru")
Dim $sHTML = BinaryToString($sData)

$aRegExp = StringRegExp($sHTML, ".*?now:\|(\d+)\|", 3)
If Not IsArray($aRegExp) Then Exit
For $i = 0 To UBound($aRegExp) -1
	ConsoleWrite($aRegExp[$i] & @CRLF)
Next
 
Автор
Ш

Шайтанчег

Новичок
Сообщения
15
Репутация
0
Спасибо за оперативность, попробовал - не получилось, это браузерка,
открываю так:
Код:
#include <IE.au3>
$oIE = _IECreate("http://игра.ru")

если сложно без примера тогда могу позже создать тренировочного персонажа

Уточнение, виноват, нужное число получил в консоле а как его можно потом использовать для сравнения?
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Шайтанчег [?]
Тогда так попробуйте:
Код:
#include<IE.au3>
$oIE = _IECreate("http://игра.ru")
$oDiv = _IEGetObjById($oIE, "char")
$sText = _IEPropertyGet($oDiv, "outerhtml")
$aNow = StringRegExp($sText, ".*?now:\|(\d+)\|", 2)
If IsArray($aNow) Then
	ConsoleWrite($aNow[1] & @CRLF)
EndIf
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Шайтанчег
Можно еще так попробовать:
Код:
;...
$sNow = StringRegExpReplace($sText, '(?s).*?now:\|(\d+)\|?.*', '\1')
MsgBox(64, @extended, $sNow)
;...
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Шайтанчег [?]
нужное число получил
Оно (число) находится в первом варианте в $aRegExp[0], а во втором в $aNow[1].
а как его можно потом использовать для сравнения?
Берёте, и используете! :smile:

madmasles [?]
Можно еще так попробовать:
Хороший вариант! :ok:
 
Автор
Ш

Шайтанчег

Новичок
Сообщения
15
Репутация
0
да, спасибо, получилось, и еще просьба проверить правильно ли я понимаю что для чего:
$oDiv = _IEGetObjById($oIE, "char") - это выбор тега по id char
$sText = _IEPropertyGet($oDiv, "outerhtml") - выбор строки заключенную в тег
$sNow = StringRegExpReplace($sText, '(?s).*?now:\|(\d+)\|?.*', '\1') - регулярное выражение для выборки числа, ток еще не понял что значит '\1'
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Шайтанчег [?]
правильно ли я понимаю что для чего
Да.

$sText = _IEPropertyGet($oDiv, "outerhtml") - выбор строки заключенную в тег
Эта строка дает вам полный HTML нужной вам строки. То есть строку вида:
Код:
<div class='char_stat' id='char'   onMouseOver="doItem('design_hps','now:|28|;max:|6730|;speed:|56|',event,this)" >
ток еще не понял что значит '\1'
это "карман", который содержит найденное и захваченное значение (\d+)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Garrett
В Вашем варианте, если заменить ".*?now:\|(\d+)\|" на "now:\|(\d+)\|", то у меня тоже работает. :smile:
 
Верх