Что нового

Формула для поиска наилучшего варианта

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
Ладно, тогда их проще просто перебрать, каждое поле в отдельности... Это единственный выход.

А что значит перебрать ? (уже теплее). Что сделать?
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
А если вот так сделать, дальше пока не знаю, какую функцию применить, но как-то так:

Код:
$aBlock=StringRegExp($sTextHTML,"(?si)noWrap>.*?</FORM></TD>",3)
                Dim $Formula0, $Formula1, $Formula2, $Formula3,$Formula4
		For $i=0 To UBound($aBlock)-1
			$aPar=StringRegExp($aBlock[$i],"(?si)(\d*:?\d*:?\d+?)%?<(?:BR|/SPAN)>",3)
			If $aPar[0]>20 And $aPar[1]>1 And $aPar[3]<50 Then
				$Formula = $aPar[0]*$aPar[1]/$aPar[3]
			Else
				$Formula = 0
			EndIf
			If $i = 0 Then
				$Formula = $Formula0
			ElseIf $i = 1 Then
				$Formula = $Formula1
			ElseIf $i = 2 Then
				$Formula = $Formula2
			ElseIf $i = 3 Then
				$Formula = $Formula3
			ElseIf $i = 4 Then
				$Formula = $Formula4
			EndIf
		Next
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Словами скажите что делать ?
Там вообще малопонятно
Может кликать во все эти поля ?
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Сейчас попробую, что если искуственно заставить "формулу" менять свое имя? Тогда можно будет сделать сравнение того, что я назвала "коэффициентом". Может быть так попробовать, вот что я имею ввиду...
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
Сейчас попробую, что если искуственно заставить "формулу" менять свое имя? Тогда можно будет сделать сравнение того, что я назвала "коэффициентом". Может быть так попробовать, вот что я имею ввиду...

Мы не понимаем друг друга
Допустим Имеем 3 одинаковых значения :
$Formula1=30
$Formula2=30
$Formula3=30
Что с ними делать ? Какое из них лучше?
Что их сравнивать ? Они же одинаковые


Добавлено:
Сообщение автоматически объединено:

Чуйствую сейчас нас модератор прикроет за превращение темы в чат
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
а, поняла, что тебя беспокоит)) Не, не, там значения будут выглядеть примерно так (для 3 полей):
Первый параметр: 24
Второй параметр: 3
Третий параметр: 47

Коэффициент (формула) = 24*3/47 = 1,5319148

Первый параметр: 64
Второй параметр: 1
Третий параметр: 38

Это поле у нас выпадет, так как второй параметр 1
Коэффициент (формула) = 0

Первый параметр: 25
Второй параметр: 2
Третий параметр: 25

Коэффициент (формула) = 25*2/25 = 2

Таким образом, мы получаем, что 3 поле лучше и значит нужно нажать кнопку 3 поля.

Так понятнее?


Ну а если вдруг коэффициенты будут одинаковые, то тогда можно ввестит в ход четвертый параметр - время и выбрать по меньшему)
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Пошли по третьему кругу
В посте 29 мы уже определили лучшее поле с максимальным коэф-том.
ты же говорила что таких полей может быть несколько и у всех них коэф=2. Весь сыр бор то из-за этого
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
да забудь ты про этот пост, я его даже удалила! Не определили мы максимум, мы в нем просто определили, что есть 2 поля, коэффициент которых больше 0 и всеЭ, больше я ничего не смогла добиться(
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
Ну а если вдруг коэффициенты будут одинаковые, то тогда можно ввестит в ход четвертый параметр - время и выбрать по меньшему)
Ну вот и определилась.

Время это $aPar[2]
Преобразуй в секунды (мы уже гдето делали) и добавь в Формулу:

$Formula = $aPar[0]*$aPar[1]/($aPar[3]*$aPar[2])



Добавлено:
Сообщение автоматически объединено:

Lum [?]
да забудь ты про этот пост, я его даже удалила!

Ты его не могда удалить это мой пост : « Ответ #29, Отправлен: Май 10, 2010, 18:50:48 » на 2- странице



Добавлено:
Сообщение автоматически объединено:

Кстати там действительно есть опечатка : отсутствует одна важная строка , из-за чего и ищется только >0
Вот с исправлением :
Код:
#Include<Array.au3>
#include <IE.au3>
$sText=FileRead (@ScriptDir &"\2.htm")
$aBlock=StringRegExp  ( $sText,"(?si)<TD.*?</FORM></TD>",3)
_ArrayDisplay($aBlock)
Dim $iFormulaMax=0,$sBlockOptimal
For $i=0 To UBound($aBlock)-1
    $aPar=StringRegExp  ( $aBlock[$i],"(?si)(\d*:?\d*:?\d+?)%?<(?:BR|/SPAN)>",3)
    _ArrayDisplay($aPar)
    ;If .....  Then  MsgBox(0,'Найденный блок',$aBlock[$i])
    $Formula = $aPar[0]*$aPar[1]/$aPar[3]
    If $Formula < $iFormulaMax Then ContinueLoop ; если меньше-смотрим следующий блок
    $iFormulaMax=$Formula ;  ****** внесенное изменение ********************************
	$sBlockOptimal=$aBlock[$i]; Получаем текст оптимального блока
Next
;Дальше можно через IE  для этого текста ($sBlockOptimal)  находить кнопку и кликать по ней
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Все, поняла, перепутала посты) Я просто эту опечатку пыталась исправить и видимо не так исправила, ну в общем... сейчас перепроверю, что там да как)

Работает))) Заработало)))

Прошу прощения, что так долго разбиралась) Замудренно оно с этими массивами, циклами и прочим выщло, зато универсально))
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Да, главное, чтобы все было понятно)
gregaz, прошу прощения за назойливость.
Собственно после отладки остался вопрос с кнопкой. Если я правильно понимаю, то банальное
Код:
$oInputs = _IETagNameGetCollection($oIE, "input")
	For $oInput In $oInputs
		If $oInput.type="submit" And $oInput.name="take" Then
			_IEAction($oInput, "click")
		EndIf
	Next

не сработает.

Поискала по форуму, но то-ли на глаза не попалось, то-ли это что-то новенькое)
Итак, наш фрагмент текста с кнопкой
Код:
$aBlock = StringRegExp  ($sTextHTML,"(?si)noWrap>.*?</FORM></TD>",3)


сама кнопочка в тексте между noWrap> и </FORM></TD>
Код:
<INPUT class=veg_х_off onmouseover="this.className='veg_х_on'" onmouseout="this.className='veg_х_off'" type=submit>
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
Собственно после отладки остался вопрос с кнопкой. Если я правильно понимаю, то банальное ... не сработает.

Вполне сработает.
Надо ввести в IE полученный текст блока $sBlockOptimal , а для него найти $oInputs и т.д.
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
хм... логично...
но честно сказать. я не понимаю как это сделать... искала, но даже подобного не нашла(
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Мы для того и искали текст оптимального блока чтобы дальше работать с ним.
Честно говоря я никогда не работал с IE. ..........
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Усе, поняла) Я просто с английским не очень. а функции по IE еще не перевели, искать безуино тяжело(
Спасибо)))
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
В предыдущем своем посте я удалил неудачную концепцию
Надо так :
Код:
#include <IE.au3>
;........................
For
    ;......................
    If $Formula < $iFormulaMax Then ContinueLoop
	$iFormulaMax=$Formula 
	$iFormOptimal=$i+1 ; Полученный Номер оптимальной формы +++++++++++++
Next
$oIE = _IECreate(@ScriptDir &"\2.htm")
MsgBox(0,'$sBlockOptimal',"Номер оптимальной формы" & $iFormOptimal,1)
$oForm = _IEFormGetCollection ($oIE,$iFormOptimal)
$oInputs = _IETagNameGetCollection($oIE, "input")
For $oInput In $oInputs
    If $oInput.type="submit" Then
		_IEAction($oInput, "click")
	EndIf
Next
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
А чем неудачно-то было? Оно вроде работало. Можно пояснение, чем тело от формы в данном случае отличается.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
А чем неудачно-то было? Оно вроде работало.
Там после нахождения оптим.блока создавался новый обьект $oIE для клика. (с заменой предыдущего).
А задача ведь наверняка не кончается одним кликом .
Здесь же можно создать вначале 1 раз обьект : $oIE = _IECreate , в котором постоянно находится вся страница HTML
Найти оптимальный текст тега TD (как делали раньше).
Учитывая то что количество тегов TD = количеству тегов FORM найти номер оптмальной формы куда и кликать.
Так и проще и оптимальней.
Впрочем если устраивает тот вариант , и он работает ,то оставляй тот.
Мне казалось ,что он не будет работать.
Вообще-то организация самого клика это уже другая тема.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
А как узнать содержимое вот такого вот SPAN?
Код:
<p class="timer">Отдохните после драки:
                                                <span class="timer" timer="396"></span></p>
 
Верх