Что нового

[Данные, строки] Шаблон для поиска в Html,с переносом значения в элемент формы

Floopers

Новичок
Сообщения
24
Репутация
0
Доброго времени суток.Столкнулся с такой вот штукой..Не могу задать правильный шаблон для поиска числа.И добавления его в элемент формы.
Код:
<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>
Число 2 не постоянное.Оно всегда меняется,может быть и от 1-5000
Код:
Local $oAmount = _IEFormElementGetObjByName($oForm, "a")
_IEFormElementSetValue($oAmount, "Тут должно быть то число")
 
Автор
F

Floopers

Новичок
Сообщения
24
Репутация
0
Re: [Данные, строки] Шаблон для поиска в Htm,с переносом значения в элемент формы

Ну,нет не кто не поможет? :'(


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

Задал так шаблон..но чёт не работает!
Код:
$oIE = _IEAttach('Запчасти для мото');открываем
$aVnalicii = StringRegExp($oIE, '(?i)Максимум([0-9]{1,3})(?: шт)', 3)
If IsArray($aVnalicii) Then
    For $i = 0 To UBound($aVnalicii) - 1
        MsgBox(0, '', $aVnalicii[$i])
    Next
EndIf

А так,пишет ошибка в syntax.
Код:
$oIE = _IEAttach('Запчасти для мото');открываем

$aVnalicii = StringRegExp($oIE, "<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>," '([0-9]{1,3})(?: шт)', 3)
If IsArray($aVnalicii) Then
    For $i = 0 To UBound($aVnalicii) - 1
        MsgBox(0, '', $aVnalicii[$i])
    Next
EndIf
EndIf

Код:
$aVnalicii = StringRegExp($oIE, "<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>," '([0-9]{1,3})(?: шт)'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
 

oesoes

xor eax,eax
Сообщения
171
Репутация
9
Для чего использовать регулярки, если можно обходиться малой кровью? Регулярки хоть и "круче" в "писанине", но работают медленнее чем простая замена по шаблону, о чем, кстати, гласит не мало материалов и тестов. Это как рекурсия, которая нужна только там, где нужна. Никогда никому не советовал использовать тот же Regex.Replace в C# против простейшей String.Replace, которая в 10 раз быстрее работает и в 100 понятнее будет другому. Ваша задача укладывается в то, что просто нужно проверить диапазон значений, в котором регулярки ну никак не панацея, уж поверьте. Не то, что я ненавижу регулярные выражения, но тыкать их везде не привык и никому не советую. Сравним например (a+)*b для выражения "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"? Спорим выиграет по скорости простецкая: StringInStr()?

Понимаю, что ярые любители регекспов могут растерзать меня в клочья, но все же останусь при своем. Все это "имхо" и только. Вашу задачу решил бы вот так (если конечно шаблон, что вы дали - верный):

Код:
$str = "<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>3 шт</b></nobr></td>"
$str = StringReplace($str,'<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>','')
$str = StringReplace($str,' шт</b></nobr></td>','')

$int = Int($str)

if $int > 0 And $int < 5001 Then
	MsgBox(0,0,$str)
EndIf


не всё то золото, что блестит!
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
[Данные, строки] Шаблон для поиска в Html,с переносом значения в элемент формы

oesoes,

программируйте сразу в машинных кодах - быстродействие Ваших программ будет просто зашкаливать.


Floopers

Возможные причины почему людям не хотят помогать:

1) Человек пишет с ошибками - значит ему нужно учить уроки, а не изучать AutoIt. :reading_book:

2) Человек говорит загадками, не даёт полной информации, из-за чего непонятны условия задачи. Телепатов здесь нет. :shaman_s_bubnom:

3) Человек ленится заглянуть в справку и пытается использовать функции не по назначению или вызывать функции с неверными аргументами. :beach:

4) Когда человеку явно указывают на ошибки, он их всё равно не видит. :wall_brake:

А шаблон у Вас простой...
Код:
$text = "<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>"
$pattern = "<b>(\d*)\sшт</b>"
$aVnalicii = StringRegExp($text, $pattern, 3)
If @error Then
	MsgBox(0, '', "Нет совпадений")
Else
	MsgBox(0, '', $aVnalicii[0])
EndIf



Администрация,
а с этим что-то можно сделать?

 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Тема как то так называется: помогите, я не могу разобраться что такое параметры функции, где находится справка, зачем нужны запятые в параметрах, почему функция не работает, хотя я перебрал уже все возможные варианты, чем отличается объект от строки.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Floopers [?]
<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>
Кто мне скажет, что за код выше???
Ах да, это же HTML!!!! :smile:
Вопрос: А что можно сказать по этой строчке HTML кода?
Ответ: Ничего! На странице таких строк может быть предостаточно.

Так вот, смотрю я и думаю, как же грустно становиться когда люди не только не могут грамотно задать вопрос, но и ответы на такие вопросы тоже получаются мягко говоря "универсальные" :(

Вот и не находим мы уже ничего:
Код:
$str = "<td bgcolor=#d0eed0 align=center ><nobr>Минимум <b>1 шт</b></nobr></td>" _
	  &"<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>"

$str = StringReplace($str,'<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>','')
$str = StringReplace($str,' шт</b></nobr></td>','')

$int = Int($str)

if $int > 0 And $int < 5001 Then
    MsgBox(0,0,$str)
EndIf


Ну а если и находим, то ответ не тот что ожидали:
Код:
$text = "<td bgcolor=#d0eed0 align=center ><nobr>Минимум <b>1 шт</b></nobr></td>" _
	   &"<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>"
$pattern = "<b>(\d*)\sшт</b>"
$aVnalicii = StringRegExp($text, $pattern, 3)
If @error Then
    MsgBox(0, '', "Нет совпадений", 2)
Else
    MsgBox(0, '', $aVnalicii[0], 2)
EndIf


А теперь ответьте!
Сможете вы определить глядя на запасное колесо в багажнике машины (если вы не владелец :smile:), с какой стороны (я уже не говорю впереди или сзади) оно стояло в последний раз? ;)

Так и тут, строка ниже говорит нам только о том что есть ячейка таблицы, а вот о самой таблицы (страницы) мы ничего не знаем!
Код:
<td bgcolor=#d0eed0 align=center ><nobr>Максимум <b>2 шт</b></nobr></td>
 
Автор
F

Floopers

Новичок
Сообщения
24
Репутация
0
C2H5OH

Возможные причины почему людям не хотят помогать:

1) Человек пишет с ошибками - значит ему нужно учить уроки, а не изучать AutoIt. :reading_book:

1.1) Учить уроки? Я думал такая фишка про шутки школьников, уже не актуальна. Почему ошибки допускаю? Ну русским не в совершенстве владею..Учил его сам! От сюда, и погрешности.

2) Человек говорит загадками, не даёт полной информации, из-за чего непонятны условия задачи. Телепатов здесь нет. :shaman_s_bubnom:

2.1) Ну загадками я не чего не говорил..Скорей всего, не правильно сформулировал вопрос! Что телепатов тут нет,это по вам я уже понял..Хотя,исходя из вашего первого пункта.Была мысль что вы пытаетесь овладеть этим мастерством.

3) Человек ленится заглянуть в справку и пытается использовать функции не по назначению или вызывать функции с неверными аргументами. :beach:

3.1) В справку заглянул,но из-за того что невнимательно ознакомился с функциями.Налепил не понятно что.

4) Когда человеку явно указывают на ошибки, он их всё равно не видит. :wall_brake:

4.1) Ну тут могу сказать только то.Что невнимательность мой конёк.



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

Всем большое спасибо за ваши примеры.И потраченное время,на непонятную тему.Ночью нашёл свой косяк,и разобрался..
 

oesoes

xor eax,eax
Сообщения
171
Репутация
9
C2H5OH [?]
программируйте сразу в машинных кодах - быстродействие Ваших программ будет просто зашкаливать.
OffTopic:
Более стандартного ответа и не ожидал, но я привык к этому ещё с wasm. Ой не о том вы подумали, не о том... Никогда не нужно усложнять, но всегда найдутся любители.
 
Верх