Автор Тема: StringRegExp Найти и сравнить число  (Прочитано 6809 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lum [?]

  • Новичок
  • *
  • Сообщений: 61
  • Репутация: 3
    • Награды
Новая задачка всплыла у меня :o Прям чем дальше, тем страшнее...

Собственно требуется, скажем так, вычленить цифру из текста и сравнить ее с образцом. Приведу кусочек кода страницы и своего кода. Кто что посоветует?

<TABLE class=tabl_1 cellSpacing=0 cellPadding=0><TBODY>
<TR class=veg_png_td>
<TD class=nav_td_txt noWrap>Текст текст: 21%<BR>Текст: 3<BR>Время: <SPAN id=time_fly0>00:18:48</SPAN><BR>Текст: <SPAN id=oscol_perc0>35</SPAN>%</TD>

<INPUT id=m_num value=0 type=hidden name=m_num> <INPUT class=veg_f_off onmouseover="this.className='veg_f_on'" onmouseout="this.className='veg_f_off'"

Сразу оговорюсь, что в дальнейшем будут 2  <TD class=nav_td_txt noWrap> и тд., где будут разными только цифры и 2 кнопки...
Помогите пожалуйста хотя бы при наличии одной разобраться  :)

Код: AutoIt [Выделить]
    $oIE = _IECreate("http://собсно страничка на которой все это безобразие")

    ; Переменные для логических вычислений
    Global $x1

    ; если "Слово слово: 0", то нажать "Ссылка"
    If StringRegExp('(?s).*?veg_chush_txt>Слово слово: 0 </P>?.*', "\1") Then
        _IELinkClickByText($oIE, "Ссылка")
    ; если "Слово слово: 1", то проверить значения
    ElseIf StringRegExp('(?s).*?veg_skupalka_txt>Слово слово: 1 </P>?.*', "\1") Then
        $oTable = _IETableGetCollection($oIE)
        $oTR = _IETagNameGetCollection($oTABLE, "tr")
        $oTD = _IETagNameGetCollection($oTR, "td")
        If $oTD.class="nav_td_txt" Then
           
$x1 = StringSplit($oTD.innertext,'Текст\ текст\:\?\%') ; вот тут загвоздка "Текст текст: цифра%"; для сравнения нужна эта самая цифра, она имеет свойство меняться
           
If $x1>50 Then
                $oInputs = _IETagNameGetCollection($oIE, "input")
                For $oInput In $oInputs
                    If $oInput.type="submit" And $oInput.name="veg_f_off" Then
                        _IEAction($oInput, "click")
                    Else
                    _IELinkClickByText($oIE, "Ссылка")
                    EndIf
                Next
            EndIf
        EndIf
    EndIf
EndFunc
 

« Последнее редактирование: Май 06, 2010, 22:55:15 от Lum »

Русское сообщество AutoIt

StringRegExp Найти и сравнить число
« Отправлен: Май 05, 2010, 00:12:22 »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Lum  [?]
Цитировать
; вот тут загвоздка "Текст текст: цифра%"; для сравнения нужна эта самая цифра, она имеет свойство меняться
Зачем нужен  StringSplit ?
Код: AutoIt [Выделить]
$x1 = StringRegExpReplace ( $oTD.innertext, "\D+", "" ) ; Получение цифры (Удаляются из строки все нецифры)

« Последнее редактирование: Май 05, 2010, 06:30:01 от gregaz »
Самая большая проблема – её сформулировать. 

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Я бы сделал так :
Код: AutoIt [Выделить]
#include <IE.au3>
$oIE = _IECreate("http://собсно страничка на которой все это безобразие")
$oElements =_IETagNameGetCollection ($oIE,'TD')
$iNumber=21 ; Номер для поиска
For $oElement In $oElements
    $sLine=$oElement.innerhtml; Находим строки с тегом 'TD'
    $sFragment =StringRegExpReplace ($sLine,"<BR>.*","") ; Находим нужный фрагмент в строке (от начала строки до  <BR>)
    If Not @extended Then ContinueLoop
    $iNumberInFragment=StringRegExpReplace ($sFragment,"\D+?",""); Удаляем из найденного фрагмента все нецифры
    If Not @extended Then ContinueLoop
    If $iNumberInFragment=$iNumber  Then ;  Проверяем совпадение цифр  
        MsgBox(0,'$sFragment',$sFragment) ; Фрагмент ,  содержащий заданную цифру
        ; Здесь могут быть любые операции с найденным фрагментом : $sFragment
    EndIf
Next



Добавлено: Май 05, 2010, 08:56:56
Или вообще без цикла так :
Код: AutoIt [Выделить]
#include <IE.au3>
$oIE = _IECreate("http://собсно страничка на которой все это безобразие")
$sTextHTML=_IEDocReadHTML ( $oIE)
$iNumber=21 ; Номер для поиска
$sFragment =StringRegExpReplace ($sTextHTML,"(?si).*Wrap>(\D*?" & $iNumber & "\D*?)<BR>.*","\1") ; Находим нужный фрагмент в тексте
 

« Последнее редактирование: Май 05, 2010, 10:05:47 от gregaz, Причина: Объединение сообщений »

Оффлайн Lum [?]

  • Новичок
  • *
  • Сообщений: 61

  • Автор темы
  • Репутация: 3
    • Награды
gregaz, спасибо огроменное))) Работает на УРА! Надеюсь, что тоже когда-нибудь смогу разобраться в этих функциях по-человечески)
Использовала последний фрагмент) Чем проще, тем надежнее) :beer:

Русское сообщество AutoIt

Re: Нужна помощь в освоении функции StringSplit
« Ответ #3 Отправлен: Май 05, 2010, 12:58:06 »

Оффлайн Lum [?]

  • Новичок
  • *
  • Сообщений: 61

  • Автор темы
  • Репутация: 3
    • Награды
Что-то не так...
Все работает, кроме одной строки...

Код: AutoIt [Выделить]
$oIE = _IECreate("http://")

        $sTextHTML=_IEDocReadHTML($oIE)
        ; если найдено 0
        If StringRegExp($sTextHTML, '(?s).*?Слово слово: 0 </P>?.*', "\1") Then
            MsgBox(4096, "Test", "0", 10)

        ; если найден 1
        ElseIf StringRegExp($sTextHTML, '(?s).*?Слово слово: 1 </P>?.*', "\1") Then
            $x1 = StringRegExp($sTextHTML, '(?s).*?Процент, который нужно сравнить:\s\d?', "\D?", "\1") ; эта строчка и есть проблемная((
                If $x1>=50 Then
                    $oInputs = _IETagNameGetCollection($oIE, "input")
                    For $oInput In $oInputs
                        If $oInput.type="submit" And $oInput.name="veg_f_off" Then
                            _IEAction($oInput, "click")
                        EndIf
                    Next
                Else
                MsgBox(4096, "Test", "1", 10)
                EndIf

        ; если найдено 2
        ElseIf StringRegExp($sTextHTML, '(?s).*?Слово слово: 2 </P>?.*', "\1") Then
            MsgBox(4096, "Test", "2", 10)


Код проблемной строчки в браузере
noWrap>Процент, который нужно сравнить: 50%<BR>
Дело в том, что вместо 50 может быть и 30 и 1 и 100 и т.д.
Программа должна определять это число и если оно больше либо равно 50 нажимать на кнопку (input), если меньше 50, то выводить сообщение.

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #5, Отправлен: Май 07, 2010, 05:53:36 »
Lum  [?]
Цитировать
Дело в том, что вместо 50 может быть и 30 и 1 и 100 и т.д.
Программа должна определять это число и если оно больше либо равно 50 нажимать на кнопку (input), если меньше 50, то выводить сообщение.

Так:
Код: AutoIt [Выделить]
#include <IE.au3>
$oIE = _IECreate(@ScriptDir &"\1.htm")
$sTextHTML=_IEDocReadHTML ( $oIE)
$iNumber=50 ; Номер для поиска
$sFragment =StringRegExpReplace ($sTextHTML,"(?si).*Wrap>(.*?)<BR>.*","\1") ; Находим нужный фрагмент в тексте
If Not @extended Then Exit
$x1 = StringRegExpReplace ($sFragment,"\D+?",""); Удаляем из найденного фрагмента все нецифры
If $x1 >= $iNumber Then
    MsgBox(4096, $iNumber,"Текст фрагмента  = " & $sFragment,1)  
           ;............................................            
Else   
    MsgBox(4096, $x1,"Номер в фрагменте меньше " & $iNumber)
EndIf  
 



Добавлено: Май 07, 2010, 06:04:52
Мне непонятно :
Будет просмотр нескольких страниц  ?
или все это про поиск на 1 странице ?
(Количество возможных   строк  с нужными тегами на странице )


Добавлено: Май 07, 2010, 06:25:08
Если надо перебрать несколько HTML страниц и наити страницу с необходимым номером в строке , то подойдет  пример ,показанный выше
Если же поиск ведется на одной странице  и есть несколько таких строк и тегов "input" . то подход должен быть несколько иной
« Последнее редактирование: Май 07, 2010, 07:09:22 от gregaz, Причина: Объединение сообщений »

Оффлайн Lum [?]

  • Новичок
  • *
  • Сообщений: 61

  • Автор темы
  • Репутация: 3
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #6, Отправлен: Май 07, 2010, 10:09:02 »
Эх, на одной все странице  :( Относительно тегов:
Если найдено 1, то это вот так выглядит:
<TD class=nav_td_txt noWrap>Процент: 49%<BR>Количество: 3<BR>Время: <SPAN id=time_fl0>00:19:45</SPAN><BR>Еще один процент: <SPAN id=oscol_p0>42</SPAN>%</TD>

<INPUT id=me_num value=0 type=hidden name=me_num><INPUT class=veg_f_off onmouseover="this.className='veg_f_on'" onmouseout="this.className='veg_f_off'" type=submit>
Если 2, то
<TD class=nav_td_txt noWrap>Процент: 20%<BR>Количество: 1<BR>Время: <SPAN id=time_fl0>00:11:35</SPAN><BR>Еще один процент: <SPAN id=oscol_p0>11</SPAN>%</TD>

<INPUT id=me_num value=0 type=hidden name=me_num> <INPUT class=veg_f_off onmouseover="this.className='veg_f_on'" onmouseout="this.className='veg_f_off'" type=submit>

<TD class=nav_td_txt noWrap>Процент: 16%<BR>Количество: 2<BR>Время: <SPAN id=time_fl1>00:16:01</SPAN><BR>Еще один процент: <SPAN id=oscol_p1>31</SPAN>%</TD>
 
<INPUT id=me_num value=1 type=hidden name=me_num> <INPUT class=veg_f_off onmouseover="this.className='veg_f_on'" onmouseout="this.className='veg_f_off'" type=submit>
« Последнее редактирование: Май 07, 2010, 10:34:10 от Lum »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #7, Отправлен: Май 07, 2010, 11:17:48 »
Lum  [?]
Цитировать
Если найдено 1, то это вот так выглядит:
а вносить данные надо  (или кликать по кнопкам ) во все найденные Input"ы  или в какой-то конкретный ?

Русское сообщество AutoIt

Re: StringRegExp Найти и сравнить число
« Ответ #7 Отправлен: Май 07, 2010, 11:17:48 »

Оффлайн Lum [?]

  • Новичок
  • *
  • Сообщений: 61

  • Автор темы
  • Репутация: 3
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #8, Отправлен: Май 07, 2010, 11:33:10 »
На кнопки можешь сильно не отвлекаться) Там я найду как решить куда кликать) Нужно на конкретную нажать. Но прежде чем нажать нужно найти число, сравнить число, выбрать большее, а уже потом разбираться куда нажимать)

Смотри, там нужно: Нашел фразу от "Процент: х%<BR>", а затем приравнял х к Number. Но как это сделать до меня не доходит, все остальное в порядке.

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #9, Отправлен: Май 07, 2010, 11:45:58 »
Еще раз чуть подробнее :
Надо найти фразу с наибльшим числом ?

Оффлайн Lum [?]

  • Новичок
  • *
  • Сообщений: 61

  • Автор темы
  • Репутация: 3
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #10, Отправлен: Май 07, 2010, 11:52:46 »
надо просто найти фразу с числом, а потом это число сравнить, например с 50. Если число больше или равно 50, то выполнить одно действи, если меньше 50, то другое.

Оффлайн Лоу [?]

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: 0
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #11, Отправлен: Май 07, 2010, 12:03:03 »
есть число полей 1 до n  и соответственно 1-n кнопок по числу полей, надо взять инфу из полей,сравнить между собой запомнив их порядковые номера и когда найдешь больший - клик на кнопку относящуюся к этому полю, я правильно описал задачу?)

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #12, Отправлен: Май 07, 2010, 12:06:33 »
Lum  [?]
Цитировать
надо просто найти фразу с числом, а потом это число сравнить, например с 50. Если число больше или равно 50, то выполнить одно действи, если меньше 50, то другое.
Так :
Код: AutoIt [Выделить]
#include <IE.au3>
$oIE = _IECreate(@ScriptDir &"\2.htm")
$oElements =_IETagNameGetCollection ($oIE,'TD')
$iNumber=50 ; Номер для поиска
For $oElement In $oElements
    $sLine=$oElement.innerhtml; Находим строки с тегом 'TD'
    $sFragment =StringRegExpReplace ($sLine,"<BR>.*","") ; Находим нужный фрагмент в строке (от начала строки до  <BR>)
    If Not @extended Then ContinueLoop
    $iNumberInFragment=StringRegExpReplace ($sFragment,"\D+?",""); Удаляем из найденного фрагмента все нецифры
    If Not @extended Then ContinueLoop
    If $iNumberInFragment >=$iNumber Then
        MsgBox(4096, $iNumberInFragment,"Номер в фрагменте  = " & $iNumberInFragment,1)
        ;.........................
    Else   
        MsgBox(4096, $iNumberInFragment,"Номер в фрагменте меньше " & $iNumber,1)
    EndIf
Next
 



Добавлено: Май 07, 2010, 12:11:09
Если надо находить Max ,то :
Код: AutoIt [Выделить]
#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,"<BR>.*","") ; Находим нужный фрагмент в строке (от начала строки до  <BR>)
    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)
 


Оффлайн Lum [?]

  • Новичок
  • *
  • Сообщений: 61

  • Автор темы
  • Репутация: 3
    • Награды
Re: StringRegExp Найти и сравнить число
« Ответ #13, Отправлен: Май 07, 2010, 12:34:45 »
Блииииннн, прошу прощения. Это я не догоняла, что $iNumber=50 ; Номер для поиска это и есть число с которым сравнивают, вс работает) Спасибо огромное)

Русское сообщество AutoIt

Re: StringRegExp Найти и сравнить число
« Ответ #13 Отправлен: Май 07, 2010, 12:34:45 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3493 Просмотров
Последний ответ Сентябрь 28, 2009, 14:08:53
от korvindeson
7 Ответов
5536 Просмотров
Последний ответ Март 13, 2011, 01:29:02
от Garrett
0 Ответов
2633 Просмотров
Последний ответ Март 05, 2011, 01:39:17
от Yashied
6 Ответов
3991 Просмотров
Последний ответ Декабрь 31, 2011, 12:56:58
от Zaramot
0 Ответов
1526 Просмотров
Последний ответ Декабрь 30, 2011, 22:37:02
от Kaster
8 Ответов
3452 Просмотров
Последний ответ Октябрь 02, 2013, 13:38:37
от C2H5OH
5 Ответов
2473 Просмотров
Последний ответ Ноябрь 06, 2014, 21:05:20
от mvalera
0 Ответов
716 Просмотров
Последний ответ Ноябрь 06, 2014, 19:00:01
от madmasles
16 Ответов
2155 Просмотров
Последний ответ Сентябрь 23, 2016, 10:28:02
от Garrett
8 Ответов
1657 Просмотров
Последний ответ Апрель 21, 2017, 22:58:40
от Dk