Что нового

Присвоить значение переменной с помощью StringRegExp

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 вплане непрально я сделал.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Это не кавычки, а скобки :smile:


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


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

Код:
#include <array.au3>

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

_ArrayDisplay($sMat)



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

Если в строке только одна пара скобок:

Код:
$line = '[FF] (1,5) | 2 m '
$aMat = StringRegExp($line, "\((.+?)\)", 3)

ConsoleWrite($aMat[0])



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

Проверку на величину числа лучше сделать вне регулярного выражения (чтобы не усложнять его).
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Код:
; -- Находим наше окно среди всех остальных по названию процесса и -----
; --------------- и изменяющемуся титулу окна --------------------------
; -------------- Для поиска окна используем регулярное выражение -------
$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
 
Автор
M

maddoc

Новичок
Сообщения
48
Репутация
2
Так ребят, спасибо, но....

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

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

Код:
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 минут после последней записи в логе - сделать что-то.

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

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

kzru_hunter

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

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
Статус бар пуст
 
Верх