1 (изменено: migomigo, 2017-02-15 00:48:54)

Тема: AHK: Перенести содержимое переменной (Loop, Parse)

Доброго времени суток!

Помогите пожалуйста правильно перенести содержимое переменной с помощью Loop, Parse.

В скрипте надо что бы окно 2 "After" выдавало то же самое что и первое окно "Befo".

Time_Mem_1 := A_YEAR "." A_MM "." A_DD
Time_Limit_1 := "10800000" 
Time_Count_1 := "0"
Win_Name_Limit_1 = 
(
В Контакте
ВКонтакте
Берлога - Чат
Однокласники
@Mail.ru
порно
сериал
)
Time_Mem_2 := A_YEAR "." A_MM "." A_DD
Time_Limit_2 := "10800000"  
Time_Count_2 := "0"
Win_Name_Limit_2 = 
(
WoT Client
Need for Speed™ Most Wanted
RO
PO
GO
)

Befo := Win_Name_Limit_1 "|" Time_Limit_1 "|" Time_Count_1 "|" Time_Mem_1 "|" Win_Name_Limit_2 "|" Time_Limit_2 "|" Time_Count_2 "|"  Time_Mem_2

Loop, Parse, Befo, `|, `r
	M_%A_Index% := A_LoopField
After := M_1, Time_Limit_1 := M_2, Time_Count_1 := M_3, Time_Mem_1 := M_4, Win_Name_Limit_2 := M5, Time_Limit_2 := M_6, Time_Count_2 := M_7, Time_Mem_2 := M_8

gui, +AlwaysOnTop
Gui, Font, s7,Time_Mem_1 := A_YEAR "." A_MM "." A_DD
Time_Limit_1 := "10800000" 
Time_Count_1 := "0"
Win_Name_Limit_1 = 
(
В Контакте
ВКонтакте
Берлога - Чат
Однокласники
@Mail.ru
порно
сериал
)
Time_Mem_2 := A_YEAR "." A_MM "." A_DD
Time_Limit_2 := "10800000"  
Time_Count_2 := "0"
Win_Name_Limit_2 = 
(
WoT Client
Need for Speed™ Most Wanted
RO
PO
GO
)

Befo := Win_Name_Limit_1 "|" Time_Limit_1 "|" Time_Count_1 "|" Time_Mem_1 "|" Win_Name_Limit_2 "|" Time_Limit_2 "|" Time_Count_2 "|"  Time_Mem_2

Loop, Parse, Befo, `|, `r
{
	M_%A_Index% := A_LoopField
	After .= A_LoopField
}

gui, +AlwaysOnTop
Gui, Font, s7,
Gui, Add, Text, x12 y10 w290 h660, % Befo
Gui, Add, Text, x322 y10 w300 h660, % After
Gui, Show, w637 h683, Untitled GUI
return

GuiClose:
ExitApp
AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

2

Re: AHK: Перенести содержимое переменной (Loop, Parse)

В скрипте надо что бы окно 2 "After" выдавало то же самое что и первое окно "Befo".

After := Befo

3

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Если бы все было так просто...

Данные считываются с файла в 1 переменную.
После этого их надо разложить на 8 переменных для разных задач.

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

4 (изменено: migomigo, 2017-02-15 00:43:44)

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Прошу прощения, в примере была допущена ошибка..
Я подредактировал код

Теперь хорошо видно, что часть данных теряется при переносе..

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

5

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Наконец-то нашел как должно быть, код исправил..
Но проблема не исчезла.
Продолжу поиски в другой части кода.
Если не справлюсь - опишу подробно.

Спасибо, извините.

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

6

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Из кода не видно, чтобы данные считывались из файла.

7

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Совершенно верно!
Но так как код немного запутанный, привел именно проблемный кусочек..

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

8

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Вы хотите разобрать переменную на кусочки, отредактировать кусочки, затем собрать их уже в другой переменной?

9

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Есть совокупность из 8-ми переменных.


Time_Mem_1 := A_YEAR "." A_MM "." A_DD
Time_Mem_2 := A_YEAR "." A_MM "." A_DD
Time_Limit_1 := "10800000"
Time_Limit_2 := "3600000"
Time_Count_1 := " 7200000"
Time_Count_2 := "1800000"
Win_Name_Limit_1 =
(
В Контакте
ВКонтакте
Берлога - Чат
Однокласники
@Mail.ru
порно
сериал
)
Win_Name_Limit_2 = 
(
WoT Client
Need for Speed™ Most Wanted
)

1) Данные необходимо вписать в 1 переменную.  (Для сохранения информации после перезапуска программы)

2) Данный необходимо из 1-й переменной разложить обратно в 8-мь переменных.
Название переменных менять не удобно, так как они используются в разных частях скрипта многократно, а скрипт еще дорабатываю...

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

10

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Вроде понял что требуется. Только алгоритм не понравился, да оформление кода такое, чёрт ногу сломит. Будет аккуратное оформление - не будет ошибок.

+ открыть спойлер
Win_Name_Limit_1 = 
(
В Контакте
ВКонтакте
Берлога - Чат
Однокласники
@Mail.ru
порно
сериал
)
Time_Limit_1 := "10800000" 
Time_Count_1 := "0"
Time_Mem_1 := A_YEAR "." A_MM "." A_DD

Win_Name_Limit_2 = 
(
WoT Client
Need for Speed™ Most Wanted
RO
PO
GO
)
Time_Limit_2 := "10800000"  
Time_Count_2 := "0"
Time_Mem_2 := A_YEAR "." A_MM "." A_DD



;Сводим все данные в одну строку для сохранения в файл
Befo := Win_Name_Limit_1 "|" Time_Limit_1 "|" Time_Count_1 "|" Time_Mem_1 "|" Win_Name_Limit_2 "|" Time_Limit_2 "|" Time_Count_2 "|"  Time_Mem_2


;Считали строку из файла. Разбираем её по разделителю "|"
Loop, Parse, Befo, `|, `r
{	
M_%A_Index% := A_LoopField
MsgBox, % M_%A_Index%
}

;Заносим полученные данные в переменные
        Win_Name_Limit_1 := M_1, Time_Limit_1 := M_2, Time_Count_1 := M_3, Time_Mem_1 := M_4, Win_Name_Limit_2 := M_5, Time_Limit_2 := M_6, Time_Count_2 := M_7, Time_Mem_2 := M_8

;Сводим все данные в одну строку для проверки
After := Win_Name_Limit_1 "|" Time_Limit_1 "|" Time_Count_1 "|" Time_Mem_1 "|" Win_Name_Limit_2 "|" Time_Limit_2 "|" Time_Count_2 "|"  Time_Mem_2


gui, +AlwaysOnTop
Gui, Font, s7,
Gui, Add, Text, x12 y10 w400 h330, % Befo
Gui, Add, Text, x322 y10 w400 h330, % After
Gui, Show, w900 h400, Untitled GUI
return

GuiClose:
ExitApp

Похоже, заковырка была в M5 (M_5).

11

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Доброго времени суток!
Выплыла ещё 1 заковырка.
Есть Код:

+ открыть спойлер
;=================================== [ Переменная без пустых строк
Win_Name_Limit_1 = 
(
В Контакте
ВКонтакте
Новости
Игры
Steam
Dota
)
Win_Name_Limit_2 =  ;=============== [ Переменная с пустой строкой 
(
В Контакте
ВКонтакте
Новости
Игры
Steam
Dota

)
;====================================================================================================

;~ ;================================ [ Ищет в названии окна запретные слова, если находит - возвращяет "1" ]
;=================================== [ Иначе возвращает "0"
search_matches(Win_Name_Limit_1)
{
	Loop, parse, Win_Name_Limit_1, `n, `r
	{
		If (InStr(W_G_A_A_T(A_WinTitle), A_LoopField)) {
			return, 1
			break
		}
	}
	return, 0
}
;====================================================================================================

;================== [ Функция - Получаем полное название активного окна ]
W_G_A_A_T(A_WinTitle)
{
	WinGetActiveTitle, A_WinTitle
	return, A_WinTitle
}
;===============================================================



1::MsgBox, % search_matches(Win_Name_Limit_1)    ;=  [ если переменная не содержит пустых строк - все ок )

2::MsgBox, % search_matches(Win_Name_Limit_2)    ;=  [ если переменная содержит пустую строку, всегда возвращает 1 )

Задача кода, искать в названии активного окна, запретные слова.
Если найдено совпадение, вернуть  1, иначе, вернуть 0.

Все отлично работает, до тех пор, пока в переменную с перечнем запретных слов не попадает пустая строка.
В этом случае, функция всегда возвращает "1"

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

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

12

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Пустая строка содержится в любой строке, разве не логично?
Можно и не удалять: добавить условие, если строка пустая, возращаем 0.
Offtop: Можно полюбопытствовать, почему у вас в статусе Разработчик написано?

13

Re: AHK: Перенести содержимое переменной (Loop, Parse)

stealzy пишет:

Пустая строка содержится в любой строке, разве не логично?
Можно и не удалять: добавить условие, если строка пустая, возращаем 0.

Если все так просто,  пример кода пожалуйста в студию! 

stealzy пишет:

Offtop: Можно полюбопытствовать, почему у вас в статусе Разработчик написано?

Ответ таится в правилах форума:
http://forum.script-coding.com/rules.html

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

14 (изменено: stealzy, 2017-02-17 19:47:38)

Re: AHK: Перенести содержимое переменной (Loop, Parse)

Да на здоровье, тов. разработчик XD:

If (A_LoopField && (InStr(W_G_A_A_T(A_WinTitle), A_LoopField)))

15

Re: AHK: Перенести содержимое переменной (Loop, Parse)

stealzy, дайте ссылку на Вашу разработку с полным описанием и примером использования.

16

Re: AHK: Перенести содержимое переменной (Loop, Parse)

stealzy
Спасибо тов. Участник XD:

Ваше решение устранило мою проблему.

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..