Что нового

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

Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Не, не сильно, вот эту штучку пропустил

Третий параметр: <SPAN id=oscol_perc1>31</SPAN>%</TD>

Так она в коде смотрится:

[^:]+?:\s?.*?>(\d*).*?</TD>"
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Может так: (Уже праздничные мозги не варят)
Код:
$aArray=StringRegExp  ( $sText,"(?si)Wrap>\D+?(\d+?)%
\D+?(\d+?)
.*?(\d+?)</SPAN>%</TD>",3)
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Да) Так тоже можно) Самое забавное в этой функции, что вариантов написания до фига и больше)
У меня тоже мозги не варят, но что делать?)
:beer:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Lum сказал(а):
У меня тоже мозги не варят, но что делать?) :beer:
Десять - пятнадцать часов подождать и у всех мозги снова заработают
116.gif
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Десять - пятнадцать часов подождать и у всех мозги снова заработают
Было бы неплохо) Кстати, полностью с тобой согласно, красиво они игрушку нарисовали :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Очень сильно напоминает концепты художников Аллодов: http://www.allods.ru/medias.php?show=concept_art
Особенно те пейзажи что в серединке, по мне дак вобще один человек рисовал :smile:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Все же добил :
Код:
$aParametr=StringRegExp  ( $sText,"(?si)(\d*:?\d*:?\d+?)%?<(?:BR|/SPAN)>",3); массив всех параметров текста (через 4)

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

Lum

Новичок
Сообщения
61
Репутация
3
gregaz, да вы меня сейчас прямо поразили! :smile: Вчера долго пыталась въехать как организовать этот поиск этих кнопок) Даже не знаю как выразить свою признательность... Спасибо! ;D,

Belfigor, а что-то в этом есть...)))
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
:shok: Ну вот, опять во мне проснулась почемучка:
Код:
For $i=0 To UBound($aBlock)-1
			$aPar=StringRegExp($aBlock[$i],"(?si)(\d*:?\d*:?\d+?)%?<(?:BR|/SPAN)>",3); Массив параметров блока (4)
			_ArrayDisplay($aPar)
			If $aPar[0]>20 And $aPar[1]>1 And $aPar[3]<50 Then
				$Formula = $aPar[0]*$aPar[1]/$aPar[3]
				MsgBox(0, "", "" & $Formula, 10)
			Else
				$Formula = 0
				MsgBox(0, "", "" & $Formula, 10)
			EndIf
		Next


Как найти в данном случае максимальное значение $Formula? И надо ли его искать, для дальнейшего выбора кнопки...
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
Как найти в данном случае максимальное значение $Formula? И надо ли его искать, для дальнейшего выбора кнопки...

Надо или не надо решать автору задачи.
Я понимаю так:

Мы создали массив блоков у каждого блока сво параметры.
Надо определиться по какому критерию определять нужный блок $Formula = $aPar[0]*$aPar[1]/$aPar[3] так или по другому
Далее выполняется перебор массива в цикле (это есть).

Если мы ищем блок с максимальным значением такого сочетания параметров : $Formula = $aPar[0]*$aPar[1]/$aPar[3]
Делаем : If $Formula .......... определяем текст нужного блока.
А в тексте уже даже через IE находили уже нужную кнопку и кликали

Примерно так :
Код:
#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
Угу, оно самое) дошла тока до части сравнения своим мозгом, но в целом не осилила) :IL_AutoIt_1:
Идиотский вопрос: А gregaz хоть иногда спит?))
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Да, как показывает статистика он спит в промежутке между 5ю и 10ю часами по Москве :smile:
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
ааа... Тады понятно))) Целых 5 часов! gregaz, а можно спросить, как добиться 5-часового сна? Я тока по 3-4 могу(((
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Или делать через :
Код:
........
If $aPar[0]<20 And $aPar[1]<1 And $aPar[3]>50 Then  ContinueLoop
 $sBlockOptimal=$aBlock[$i]

............
без определения Max -'это тоже делали


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

Lum [?]
Целых 5 часов! gregaz, а можно спросить, как добиться 5-часового сна? Я тока по 3-4 могу(((
Всему свое время.
Будет и на Вашей улице.... :smile:
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Хм... А если 2 значения соответствуют, он все равно максимальный выберет, там до 5 значений возможно...
Хотя, там по любому еще формулу считать...
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
Хм... А если 2 значения соответствуют, он все равно максимальный выберет, там до 5 значений возможно...

Останется последнее из найденных.
Поэтому и надо определиться с критерием выбора.
Или все найденные заносить в массив $aBlockOptimal и там уже определяться
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Угу... вот потому-то и возник вопрос... Оно только последнее находило, а надо было, лучшее так сказать...
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Lum [?]
Оно только последнее находило, а надо было, лучшее так сказать...

Для того чтобы находило лучшее надо и создать критерий по которому будет определяться "лучшесть". Причем единственное
Все в руках автора задачи
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Или все найденные заносить в массив $aBlockOptimal и там уже определяться
Как раз размышляю над этим...
Критерии лучшести:
If $aPar[0]>20 And $aPar[1]>1 And $aPar[3]<50 Then
$Formula = $aPar[0]*$aPar[1]/$aPar[3]

Вот думаю, как все эти формулы занести в массив, а затем применить _ArrayMax, а уже затем $sBlockOptimal=$aBlock[$i]

Примерно так, если я правильно понимаю.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Мне алгоритм совсем не понятен.
Напиши словами что надо


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

Занесение в массив выполняется так :
Dim $aBlockOptimal[1]; обьявление массива
For ...........
;.......................
If .............. Then _ArrayAdd($aBlockOptimal,$aBlock[$i])
; или If .............. Then _ArrayAdd($aBlockOptimal,...........) что заносить непонятно?
;...................
Next
 
Верх