1 (изменено: dmimen, 2017-12-09 16:36:45)

Тема: AHK: loop не работает на четных кругах.

Имеется текстовый файл содержащий переменные text.txt:

+ открыть спойлер

[reg]
Information
User1
dt1 = 20180109
st1 = active
User2
dt2 = 20170109
st2 = active
User3
dt3 = 20170109
st3 = active
User4
dt4 = 20180610
st4 = active
User5
dt5 = 20180312
st5 = active
User6
dt6 = 20180109
st6 = active
User7
dt7 = 20180109
st7 = active

И скрипт который их считывает в зависимости от количества строк при помощи loop:


FormatTime, today, %var1%, dd.MM.yy
FileRead, last_line,  text.txt
loop, parse, last_line, `n, `r
{
	Total:=a_index
}
SetFormat, float, 0.0
kolvo:=(Total-1)/3
loop, %kolvo%
{
nomer:=A_Index
IniRead, dat, text.txt, reg , dt%nomer%
IniRead, stat, text.txt, reg , st%nomer%
EnvSub, raznic, %dat%, days
FormatTime, srok, %dat%, dd.MM.yy
raznica:=-raznic
if (raznica > 0)
	MsgBox, Сегодня: %today% `n Истекает: %srok% `n Осталось дней: %raznica% `n Статус активации: %stat% `n Всё в порядке
else
	MsgBox, Сегодня: %today% `n Истекает: %srok% `n Осталось дней: %raznica% `n Статус активации: %stat% `n Необходимо отключение
}
return

Получается так, что скрипт работает правильно только на нечетных кругах, то есть когда A_Index равен 1,3,5,7...
Не могу разобрать почему не срабатывает на четных. Помогите пожалуйста найти ошибку.

2

Re: AHK: loop не работает на четных кругах.

Дело в обнулении переменной raznic. В начале первого круга она ничему не равна и потому EnvSub проходит как задумано. В начале второго у неё уже есть значение и функция срабатывает иначе, сбрасывая значение переменной, что позволяет на третьем круге снова сработать как полагается. Достаточно в конец круга (после MsgBox) вставить обнуление этой raznic и скрипт станет всё считать.