Что нового

Поиск данных в 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,320
Шайтанчег
Можно еще так попробовать:
Код:
;...
$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,320
Garrett
В Вашем варианте, если заменить ".*?now:\|(\d+)\|" на "now:\|(\d+)\|", то у меня тоже работает. :smile:
 
Верх