Автор Тема: Присвоить значение переменной с помощью StringRegExp  (Прочитано 4314 раз)

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

Оффлайн maddoc [?]

  • Новичок
  • *
  • Сообщений: 48
  • Репутация: 2
    • Награды
Добрый уважаемые.
Читал читал как работать со стрингами, так и не понял )
Вроде простая задача :
Есть окно, которое мы мониторим. В нем есть некая строка вида :
[FF] N/D 3/1 (1,5) | 2 m
Цифры в строке все время меняются. Мне надо присвоить значение переменной, взяв данные из чисел в ковычках (1,5) (тоесть отмести весь около-ковычный мусор и прочитать данные только из ковычек )
Числа могут быть от (0) до (3) , дробные , тоесть (0,1) (0,2) етс.

Тоесть что-то типа :
Local $title
Local $sBotTitle
Local $iFarmrate
If WinExists($sBotTitle) Then
$title = WinGetTitle($sBotTitle, "")
$iFarmrate = (StringRegExp($text, (\(0\,\d{1,2}\)))
EndIf
If $iFarmrate =< 0.4 Then
do some shit
EndIf
Ну естессно это не работает ) $iFarmrate вплане непрально я сделал.

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


Оффлайн Suppir [?]

  • Продвинутый
  • ***
  • Сообщений: 967
  • Репутация: 61
    • Награды
Это не кавычки, а скобки :)


Добавлено: Май 11, 2010, 22:33:00

Если в строке много скобок:

Код: AutoIt [Выделить]
#include <array.au3>

$line = '[FF] (1,6) N/D 3/1 (1,5) | (3) 2 m (4)'
$aMat = StringRegExp($line, "\((.+?)\)", 3)

_ArrayDisplay($sMat)



Добавлено: Май 11, 2010, 22:35:16
Если в строке только одна пара скобок:

Код: AutoIt [Выделить]
$line = '[FF] (1,5) | 2 m '
$aMat = StringRegExp($line, "\((.+?)\)", 3)

ConsoleWrite($aMat[0])



Добавлено: Май 11, 2010, 22:46:04
Проверку на величину числа лучше сделать вне регулярного выражения (чтобы не усложнять его).
« Последнее редактирование: Май 11, 2010, 22:48:19 от Suppir, Причина: Объединение сообщений »

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144
  • Репутация: 49
    • Награды
Код: AutoIt [Выделить]
; -- Находим наше окно среди всех остальных по названию процесса и -----
; --------------- и изменяющемуся титулу окна --------------------------
; -------------- Для поиска окна используем регулярное выражение -------
$hWindow = _FindWindow("Название процесса.exe","\[.+?\]\h./.\h")
; -----------------------------------------------------------------------------------------------------

; ----- Обработка ошибок после вызова функции _FindWindow -----
If @error = 1 Then
    MsgBox(16,"Ошибка","Процесс не найден")
    Exit
Elseif @error = 2 Then
    MsgBox(16,"Ошибка","Окно не найдено")
    Exit
EndIf
; -------------------------------------------------------------

; ---------- Считываем значение $iFarmrate с титула окна -----------------
$Title = WinGetTitle($hWindow)
$iFarmrate = StringRegExp($Title, "\((.+?)\)",1)
If @error Then
    MsgBox(16,"Ошибка","Ошибка при получении значения $iFarmrate")
Else
    $iFarmrate = StringReplace($iFarmrate[0],",",".")
EndIf
; ------------------------------------------------------------------------

; ------------ Выполняем действия в зависимости от значения $iFarmrate ------------
If $iFarmrate <= 0.4 Then
    ; делаем что-то
Elseif $iFarmrate >= 1.6 AND $iFarmrate <= 2.4 Then
    ; делаем что-то
Else
    ; делаем что-то
EndIf
; ---------------------------------------------------------------------------------

Func _FindWindow($ProcessName,$RegExpForSearchWindow)
    Local $i, $arr_windows = WinList()
    Local $ProcessID = ProcessExists($ProcessName)
    If not $ProcessID Then return SetError(1,0,0)

    For $i=1 to $arr_windows[0][0]
        If WinGetProcess($arr_windows[$i][1]) = $ProcessID Then
            If StringRegExp($arr_windows[$i][0],$RegExpForSearchWindow) Then return $arr_windows[$i][1]
        EndIf
    Next
EndFunc
 

« Последнее редактирование: Май 12, 2010, 12:08:27 от kzru_hunter »

Оффлайн maddoc [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
Так ребят, спасибо, но....

AutoIt не видит нужного текста как оказалось. Я только сейчас заметил. Вининфо не показывает его, не в доступном, не в хидден тексте.

Вот что мы видим :

Main
Info
<4071,-3389,248>
Mana: 6071/6071
Hp: 100%
No Target:
Hp:
[21:39:53] Found a Золотой клевер
[21:37:54] Found a Золотой клевер
[21:37:03] Found a Залежи кобальта
[20:28:08] Found a Богатые залежи кобальта
и так далее ...
[20:28:01] [MoleBot] Online
[20:27:16] Logging into account..
[20:27:16] Days Left : [2]
[20:27:16] NodeGrid Days Left : [-1]
[20:27:16] Max Sessions : [8]
Вот сама картинка окна (титлы заранее кстати известны, поэтому делать выборку по процесс айди не нада. Титлы не меняются ) (см аттач)

Поскольку нужная нам статистика не видна автоитом, нада сделать привязку к строке (последней свехру) по времени ака :
[21:39:53]

Задать переменной время последней записи в логе( в данном случае [21:39:53] ) и потом сравнить с настоящим временем. Если прошло больше 30 минут после последней записи в логе - сделать что-то.

Желтым на скрине помечены данные которые меняются каждую минуту.

Если это можно реализовать, с меня пиво. Кто напишет код, оставляйте З кошелек )

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

Re: Присвоить значение переменной с помощью StringRegExp
« Ответ #3 Отправлен: Май 13, 2010, 00:24:44 »

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144
  • Репутация: 49
    • Награды
В AutoitWindowsInfo c помощью Finder Tool наведи на строку "[FF] N/D 3/1 (1,5) | 2 m" и потом в во вкладке Summary посмотри информацию про Control (чтобы получить доступ к строке) и StatusBar (в нём будет отображена эта строка)

Оффлайн maddoc [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
>>>> Control <<<<
Class: WindowsForms10.Window.8.app.0.1983833
Instance: 1
ClassnameNN: WindowsForms10.Window.8.app.0.19838331
Name:
Advanced (Class): [CLASS:WindowsForms10.Window.8.app.0.1983833; INSTANCE:1]
ID: 790346
Text: statusStrip1
Position: 0, 212
Size: 218, 22
ControlClick Coords: 78, 11
Style: 0x56000000
ExStyle: 0x00010000
Handle: 0x00000000000C0F4A

Статус бар пуст

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

Re: Присвоить значение переменной с помощью StringRegExp
« Ответ #5 Отправлен: Май 14, 2010, 00:20:44 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
10 Ответов
5556 Просмотров
Последний ответ Май 28, 2010, 23:59:49
от Vendor
6 Ответов
5394 Просмотров
Последний ответ Сентябрь 01, 2011, 04:59:04
от joiner
6 Ответов
4766 Просмотров
Последний ответ Ноябрь 10, 2011, 03:24:16
от joiner
1 Ответов
2124 Просмотров
Последний ответ Май 18, 2012, 06:34:28
от sngr
3 Ответов
4276 Просмотров
Последний ответ Декабрь 18, 2012, 10:36:26
от madmasles
0 Ответов
1006 Просмотров
Последний ответ Май 23, 2015, 18:10:37
от mihayloff
4 Ответов
1160 Просмотров
Последний ответ Июль 12, 2015, 16:00:37
от madmasles
10 Ответов
2840 Просмотров
Последний ответ Июль 25, 2015, 14:37:39
от tarhitay
0 Ответов
933 Просмотров
Последний ответ Август 29, 2015, 17:45:18
от Yashied
2 Ответов
1125 Просмотров
Последний ответ Ноябрь 03, 2015, 15:21:38
от Yashied