Что нового

[Сеть, интернет] Получить даныне из строки

kakawkin

Новичок
Сообщения
11
Репутация
0
Надо из строки
Код:
<div class="c1" title="3043"></div></div>
Получить 3043 ( не всегда там 4 симсвола. От 4 до 6
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
$sText = '<div class="c1" title="3043"></div>'

$sText = StringRegExpReplace($sText, '.*<div class=".*" title="(.*?)">.*', '$1')
Msgbox(0, '', $sText)
 

Andrei7

Новичок
Сообщения
72
Репутация
3
можно так
Код:
$sText = '<div class="c1" title="3043"></div>'

$sText = StringRegExp($sText, '\<div\hclass=\"c1\"\htitle=\"(\d+)\">',1)
Msgbox(0, '', $sText[0])
 
Автор
K

kakawkin

Новичок
Сообщения
11
Репутация
0
madmasles
через WinHttp получаю код страницы

Viktor1703
Все работает но заметил что там слишком много он найдет. Как сделать поиск для:
Код:
<div class="field1 width160">Ранк</div>
<div class="field2"><div class="c1" title="3043"></div></div>
Т.е. каким знаком указать переход на новую строку ?
 

Andrei7

Новичок
Сообщения
72
Репутация
3
а мой пример смотрел? там вроде привязка по классу и по цифрам!
 

MockeR

Знающий
Сообщения
101
Репутация
14
Код:
$sText = StringRegExpReplace($sText, '(?si)>Ранк<.*?<div\sclass="c1"\stitle="(\d+?)".*', '$1')
Msgbox(0, '', $sText)
 
Автор
K

kakawkin

Новичок
Сообщения
11
Репутация
0
Блин, код
Код:
#include "WinHttp.au3"
#include "Array.au3"

Opt("MustDeclareVars", 1)

Global $hOpen = _WinHttpOpen()
 Global $hConnect = _WinHttpConnect($hOpen, "ru.iccup.com")
  Global $hRequest = _WinHttpOpenRequest($hConnect, Default, "dota/gamingprofile/kakawkin_ufa.html")
   _WinHttpSendRequest($hRequest)
   _WinHttpReceiveResponse($hRequest)
   Global $sText = _WinHttpReadData($hRequest)
  _WinHttpCloseHandle($hRequest)
 _WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)

$sText = StringRegExpReplace($sText, '(?si)>Ранк<.*?<div\sclass="c1"\stitle="(\d+?)".*', '$1')
Msgbox(0, '', $sText)

выдает весь код страницы целиком все равно. не подскажите в чем проблема ?
 

Andrei7

Новичок
Сообщения
72
Репутация
3
игнорируй дальше мои посты :rofl: гуру тебе подскажут ;D
так всё работает, как часы.как я выше писал
Код:
Dim $sServerURL = 'http://ru.iccup.com/dota/gamingprofile/kakawkin_ufa.html'
Dim $oHTTP = ObjCreate('winhttp.winhttprequest.5.1')

    $oHTTP.Open("GET", $sServerURL, True)
    $oHTTP.Send('')
    $oHTTP.WaitForResponse()
	$r=$oHTTP.ResponseText()
$sText = StringRegExp($r, '\<div\hclass=\"c1\"\htitle=\"(\d+)\">',1)
Msgbox(0, '', $sText[0])
OffTopic:
мне просто интересно, почему юзеры с большой репутацией, отписавшиеся выше, не могут грамотно написать выражение? ведь опыта программирования на аутоите у них больше, чем у меня ;D я то аутоит забросил полностью. на делфи перешёл!
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
kakawkin
1. мне не нравится твой ник. подумай о смене
2. что такое даныне?

Andrei7
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.





Andrei7 [?]
почему юзеры с большой репутацией, отписавшиеся выше, не могут грамотно написать выражение?
потому что с регулярными выражениями не все работают. опыт программирования на определенном ЯП не делают их автоматически экспертами в регулярных выражениях. последнее, к слову, межязыковая парадигма.
 

Andrei7

Новичок
Сообщения
72
Репутация
3
OffTopic:
не буду спорить 8) пускай будет так.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Andrei7 [?]
я то аутоит забросил полностью. на делфи перешёл!
OffTopic:
ты сравниваешь несравнимые вещи. задачи разные
http://www.flenov.info/blog.php?catid=1277
прошу простить за оффтоп
 

Andrei7

Новичок
Сообщения
72
Репутация
3
OffTopic:
я ничего не сравниваю. я имел ввиду, что autoit давненько в руки не брал, и тот пример с выражением из памяти взял. поэтому меня удивило, что те, кто пишет на аутоите, не знали элементарного. у них опыта поболее чем у меня будет. но видимо не все регулярными выражениями пользуются. пусть будет так 8)
 
Автор
K

kakawkin

Новичок
Сообщения
11
Репутация
0
Andrei7
Большое спасибо - хоть регулярку взял и у MockeR но тебе за код получение страницы. А то мой winhttp не пойми в какой кодировке получал данные, и там наверное не знаками <>/.* а кодами символов было!
 

Andrei7

Новичок
Сообщения
72
Репутация
3
Код:
Dim $sServerURL = 'http://ru.iccup.com/dota/gamingprofile/kakawkin_ufa.html'
Dim $oHTTP = ObjCreate('winhttp.winhttprequest.5.1')

    $oHTTP.Open("GET", $sServerURL, True)
    $oHTTP.Send('')
    $oHTTP.WaitForResponse()
    $r=$oHTTP.ResponseText()
    $sText = StringRegExpReplace($r, '(?si)>Ранк<.*?<div  \sclass="c1"\stitle="(\d+?)".*', '$1')
Msgbox(0, '', $sText)
всмысле вот так сделал? через замену? хм :scratch: у меня не пашет так. так же вроде если не ошибаюсь, заменяет строку (\d+?) в исходнике и всё. что не правильно. тебе же надо не исходник страницы получить с вырезанным числом title="(\d+?) ?
 

MockeR

Знающий
Сообщения
101
Репутация
14
у меня там шаблон немного неправильный ;D

Код:
Dim $sServerURL = 'http://ru.iccup.com/dota/gamingprofile/kakawkin_ufa.html'
Dim $oHTTP = ObjCreate('winhttp.winhttprequest.5.1')

$oHTTP.Open("GET", $sServerURL, True)
$oHTTP.Send('')
$oHTTP.WaitForResponse()
$r=$oHTTP.ResponseText()
$sText = StringRegExpReplace($r, '(?si).*>Ранк<.*?<div\sclass="c1"\stitle="(\d+?)".*', '$1')
Msgbox(0, '', $sText)


вот тебе полностью рабочий код :smile:
 
Автор
K

kakawkin

Новичок
Сообщения
11
Репутация
0
Вот такой код получился в итоговом варианте:
Код:
#include <GUIConstants.au3>

GUICreate("Bot stats detected")  
Opt("GUICoordMode",3)
GUICtrlCreateLabel ("Ник мудилы",64,8,74,17)
$nick = GUICtrlCreateEdit ("",40,32,121,21)
$Check = GUICtrlCreateButton ("Чекнуть",40,64,123,25)
$pts = GUICtrlCreateLabel ("ПТС:",40,96,71,17)
$stats = GUICtrlCreateLabel ("Стата:",40,120,100,17)
$livers = GUICtrlCreateLabel ("Ливы:",40,144,71,17)
GUISetState ()       
While 1
    $msg = GUIGetMsg()
    
    If $msg = $GUI_EVENT_CLOSE Then 
	   ExitLoop
	ElseIf $msg = $check Then
      $pidor = GuiCtrlRead($nick)
	  Dim $sServerURL = 'http://ru.iccup.com/dota/gamingprofile/' & $pidor & '.html'
	  Dim $oHTTP = ObjCreate('winhttp.winhttprequest.5.1')

	  $oHTTP.Open("GET", $sServerURL, True)
	  $oHTTP.Send('')
	  $oHTTP.WaitForResponse()
	  $r=$oHTTP.ResponseText()
	  $sText1 = StringRegExp($r, '(?si)>Ранк<.*?<div\sclass="(.*?)"\stitle="(\d+?)".*',1)
	  GUICtrlSetData ($pts,"ПТС:   " & $sText1[1])
	  $sText = StringRegExp($r, '(?si)>Статистика<.*?<div\sclass="field2">(.*?)</div>',1)
	  GUICtrlSetData ($stats,"Стата: " & $sText[0])
	  $sText = StringRegExp($r, '(?si)>Кол-во ливов<.*?<div\sclass="field2">(.*?)</div>',1)
	  GUICtrlSetData ($livers,"Ливы: " & $sText[0])
    EndIf
Wend

И если можно оффтопну что не не создавать новую тему - как изменить размер окна ? А то он большой, WinMove делаю и он смещает все элементы хотя не должен
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Зачем вам вообще для метода GET понадобился объект: winhttp.winhttprequest.5.1?
 
Верх