Что нового

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

Lum

Новичок
Сообщения
61
Репутация
3
Добрый день! С праздником Победы Всех!

Есть число полей 1 до n и соответственно 1-n кнопок по числу полей,
В каждом поле находится 3 разных параметра.

Общий вид кода для поиска:
Код:
#include <IE.au3>
$oIE = _IECreate(@ScriptDir &"\2.htm")
$oElements =_IETagNameGetCollection ($oIE,'TD')
dim $iMaxNumber=0
For $oElement In $oElements
    $sLine=$oElement.innerhtml; Находим строки с тегом 'TD'
    $sFragment =StringRegExpReplace ($sLine,"
.*","") ; Находим нужный фрагмент в строке (от начала строки до  
)
    If Not @extended Then ContinueLoop
    $iNumberInFragment=StringRegExpReplace ($sFragment,"\D+?",""); Удаляем из найденного фрагмента все нецифры
    If Not @extended Then ContinueLoop
    If $iNumberInFragment < $iMaxNumber  Then ContinueLoop
    $iMaxNumber=$iNumberInFragment  
    $sLineMax=$sLine
Next
MsgBox(0,$iMaxNumber,'$sLineMax= ' & $sLineMax)

http://autoit-script.ru/index.php?topic=1797.15

Так вот надо найти оптимальное сочетание всех трех параметров в поле и кликнуть на кнопку относящуюся к этому полю.

Общий вид каждого поля можно представить так:
Код:
<TR 
     class=veg_png_td>

</TD><TD class=nav_td_txt noWrap>Первый параметр: 20%
Второй параметр: 1
Время: <SPAN id=time_fly0>00:11:35</SPAN>
Третий параметр: <SPAN id=oscol_perc0>11</SPAN>%</TD>

<TD class=veg_skup_but>
<FORM method=post action=""><INPUT id=meteor_num value=0 type=hidden name=meteor_num> <INPUT class=veg_fire_off onmouseover="this.className='veg_fire_on'" onmouseout="this.className='veg_fire_off'" type=submit> </FORM></TD>

</TD><TD class=nav_td_txt noWrap>Первый параметр: 16%
Второй параметр: 2
Время: <SPAN id=time_fly1>00:16:01</SPAN>
Третий параметр: <SPAN id=oscol_perc1>31</SPAN>%</TD>

<TD class=veg_skup_but>
<FORM method=post action=""><INPUT id=meteor_num value=1 type=hidden name=meteor_num> <INPUT class=veg_fire_off onmouseover="this.className='veg_fire_on'" onmouseout="this.className='veg_fire_off'" type=submit> </FORM></TD>
  </TR>


Ммм.. и сразу еще вопрос: можно ли сделать паузу равную Время: <SPAN id=time_fly0>00:11:35</SPAN>
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Надо бы дать более широкий пример текста , включающий в себя 2-3 поля .
Т к . надо получить тексты полей (от одного Тега до Другого) если через Регулярные Выражения
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Исправила. В том-то и дело, различий очень мало между полями(
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
А разве не существует какой-то внешний тег поля , включающий в себя и тег <TD ... с параметрами и тег <FORM... с <INPUT...

В предыдущий раз не получилось насколько я понимаю кликнуть по кнопке .т.к. был задан для поиска тег <TD ... с параметрами ,не включающий в себя <INPUT...

Если он существет ,то надо брать вначале $oElements =_IETagNameGetCollection ($oIE,'ВНЕШНИЙ ТЕГ') и все
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Угу) Есть тэг <TR>, сейчас его добавлю к коду. Но меня опять же кнопки волнуют в меньшей степени, меня волнует найти оптимальное сочетание всех трех параметров в поле.

Первое поле:
Первый параметр: 20%
Второй параметр: 1
Третий параметр: 11

Второе поле:
Первый параметр: 16%
Второй параметр: 2
Третий параметр: 31

В данном случае второе поле предпочтительнее, здесь 2 максимальных параметра, в первом только 1.

Я не знаю как в данном случае можно составить подобие формулы.
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Lum [?]
Ммм.. и сразу еще вопрос: можно ли сделать паузу равную Время: <SPAN id=time_fly0>00:11:35</SPAN>
Для приведенного фрагмента :
Код:
$sStr="<SPAN id=time_fly0>00:11:35</SPAN>"
$aArray=StringRegExp ( $sStr,"<SPAN id=time_fly0>(\d+):(\d+):(\d+)</SPAN>",3)
$iPause=3600*$aArray[0]+60*$aArray[1]+$aArray[2]; Пауза в сек.
;Sleep($iPause*1000); Установка Паузы (время в мсек.)
MsgBox(0,"$iPause",$iPause & "сек")





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

Lum [?]
меня волнует найти оптимальное сочетание всех трех параметров в поле.
Мне непонятно выражение : оптимальное сочетание

Имеется ввиду ,что в найти поле в котором присутствуют все 3 заданных параметра и они равны заданным ?
 
Автор
L

Lum

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

Оптимальное сочетание... чтобы все 3 параметра были по максимум, но проблема в том, что в строке так бывает редко, хорошо если хотя бы 2 максимальных значения в одной строке...

Опасаюсь того, что здесь вообще нужна будет математика...
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Или когда все 3 параметра максимальны ?
А какому параметру отдавать приоритет?
По количеству максимальных параметров ? так их может быть несколько
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Что за игра то хоть? :smile:
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Головар, грибострелялку мучаю) Уже чисто из принципа интересно, а получится ли) Я если честно ни в одном месте не прогер и последний раз информатику в школе проходила в объеме: А так открывается ворд))

Да, математика рулит)) Формула будет следующая:
Если учесть, что первый параметр > 50, Второй параметр > 2 Третий параметр < 50

Первый параметр*Второй параметр/Третий параметр

Ну может не идеально, но все же...

таким образом надо все это выполнить в каждой строке, сравнить полученные данные, нажать на кнопку и поиск максимальных значений здесь кажется не очень полезен, значит вернусь к предыдущему коду, без максимума.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Веселая игрушка, художники поработали на славу :smile:
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Здесь можно получить массив значений параметров (через 3)
Код:
#Include<Array.au3>
$sText=ClipGet()
$aArray=StringRegExp ( $sText,"(?si)Wrap>[^:]+?:\s?(\d*).*?
[^:]+?:\s?(\d*).*?</SPAN>
[^:]+?:\s?(\d*).*?</TD>",3)
_ArrayDisplay($aArray)


Затем в цикле со (Step 3) Можно определять оптимум после того как определится алгоритм сравнивания
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
ВОТ ОНО!!!!! :laugh: Массивы))) Самое то должно быть))) Спасибо)))
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Lum [?]
Если учесть, что первый параметр > 50, Второй параметр > 2 Третий параметр < 50
Для такого алгоритма примерно так:
Код:
For $i=0 To UBound($aArray)-1 Step 3 
      If $aArray[$i]>50 And  $aArray[$i+1]>2 And  $aArray[$i+2]<50  Then MsgBox(0,'Оптимум','')
Next
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Спасибо огромное) Массив уже получился) Осталось добавить последний кусочек для алгоритма и можно будет сказать, что Страшила (бот) получил мозги :smile:


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

$aArray=StringRegExp ( $sText,"(?si)Wrap>[^:]+?:\s?(\d*).*?
[^:]+?:\s?(\d*).*?</SPAN>
[^:]+?:\s?(\d*).*?</TD>",3)

Прошу прошения. здесь где-то ошибка прячется... Третий фрагмент не находит, а я отловить не могу :(
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Lum [?]
Прошу прошения. здесь где-то ошибка прячется... Третий фрагмент не находит, а я отловить не могу
Для приведенного выше текста Третий параметр находится , он здесь равен 0 (значения не имеет)
Дайте фрагмент текста где не находит
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
Решилось вот так)
Код:
$aArray=StringRegExp  ( $sText,"(?si)Wrap>[^:]+?:\s?(\d*).*?
[^:]+?:\s?(\d*).*?</SPAN>
[^:]+?:\s?.*?>(\d*).*?</TD>", 3)
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Попробуйте так :
Код:
$aArray=StringRegExp  ( $sText,"(?si)Wrap>[^:]+?:\s?(\d*).*?
[^:]+?:\s?(\d*).*?</SPAN>
[^:]+?:\s?(\d*).*?</TD>",3)



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

Мне кажется получился вполне оптимизированное выражение :
Код:
$aArray=StringRegExp  ( $sText,"(?si)[Wrap|BR]>[^:]+?:\s?(\d*)",3)
_ArrayDisplay($aArray)
For $i=0 To UBound($aArray)-1 Step 4; Через 4 (3-й  " время" если не нужно будет пропускаться)
	If $aArray[$i]>50 And  $aArray[$i+1]>2 And  $aArray[$i+3]<50  Then MsgBox(0,'Оптимум','')
Next
 
Автор
L

Lum

Новичок
Сообщения
61
Репутация
3
$aArray=StringRegExp ( $sText,"(?si)[Wrap|BR]>[^:]+?:\s?(\d*)",3)

Проверила, чет не очень оно) Но в принципе от длины строки смысл не меняется, скорость не снижается, ну может на 1 кб больше будет, в данном случае не принципиально)

Насчет второй части мысль интересная, чуть попозже опробую, как только с инпутами разберусь)
 
Верх