1 (изменено: Turambar, 2016-02-24 02:23:42)

Тема: Некорректно работает цикл

Здравствуйте. Задумал сделать чат. Пока додумался до вот такого варианта:
Отправка реплики: формирую get-запрос на сервер, где он ловится php скриптом и записывается в файл.
Получение реплики: скачиваю непрерывным циклом файл (как бы меня хостинг не забанил...) и вытаскиваю строку.

Но есть две проблемы:
Во-первых, что-то странное у меня с этим циклом. Дальше первого if (varn1 > %thour%) просто не идёт. И никак я не могу понять почему. Или глаз замылился и я чего-то не вижу, или в корне всё не верно.
Во-вторых, подскажите, а как сделать получение не только последней строки? Ведь за время 1100 мск может появиться несколько реплик.

Две темы создавать не стал, ибо оба вопроса связаны с одним кодом, который, вероятно, придётся в итоге полностью переписать.

Альт+1 - отправка тестовой реплики.
Альт+2 - попытка получить реплику.

!1::   ; получаем время старта скрипта по UTC, разбиваем на переменные и отправляем реплику
UTC = %A_NowUTC%  
RegExMatch(UTC, "^20(..)(..)(..)(..)(..)(..)$", UTCp)
url = http://
HTTPRequest(url)
Return


!2::
UTC = %A_NowUTC%     ; получаем начальное время (время старта скрипта) по UTC
RegExMatch(UTC, "^20(..)(..)(..)(..)(..)(..)$", UTCp)   ; разбиваем полученное время по UTC на переменные
tyear = %UTCp1%
tmonth = %UTCp2%
tday = %UTCp3%
thour = %UTCp4%
tminut = %UTCp5%
tsecund = %UTCp6%

Loop
{
UrlDownloadToFile, http://
RegExMatch(Chat, "s).*16\-..\-..\s(..)\-(..)\-(..)\:\s(.*?_.*?)\:\s(.*)", varn)   ; скачиваем и парсим "чат"

if (varn1 > %thour%)        ; если час последней строки больше времени часа старта скрипта, выводим реплику
{
msgbox, Реплика: %varn6%                                              
thour = %varn1%             ; и присваиваем всем переменным времени новое значение (время последней реплики)
tminut = %varn2%
tsecund = %varn3%
}
else
{
if (varn1 = %thour%)       ; если  час  последней строки равен реальному часу по времени...
   {
    if (varn2 > %tminut%)  ; ... проверяем минуты. Если в чате значение больше, обновляем переменные времени и выводим реплику
       {
        msgbox, Реплика: %varn6%                                      
        thour = %varn1%
        tminut = %varn2%
        tsecund = %varn3%
       }
    if (varn2 = %tminut%)  ; если минута последней строки равна реальной минуте...
      { 
       if (varn3 > %tsecund%)   ; ...проверяем секунды. Если в чате секунды больше, обновляем переменные времени
          {
           Msgbox, Реплика: %varn6%  ;                                        
           thour = %varn1%
           tminut = %varn2%
           tsecund = %varn3%
          }
      }
   }
}
Sleep, 1100      ; Спим больше 1 сек
}
Return

!3::
Reload

2 (изменено: Alectric, 2016-02-23 07:40:05)

Re: Некорректно работает цикл

+ открыть спойлер
Error:  Call to nonexistent function.

Specifically: HTTPRequest(url)

	Line#
	001: Return
	002: UTC = %A_NowUTC%
	003: RegExMatch(UTC, "^20(..)(..)(..)(..)(..)(..)$", UTCp)  
	004: url = http://turambar.ueuo.com/test.php?string=%UTCp1%-%UTCp2%-%UTCp3% %UTCp4%-%UTCp5%-%UTCp6%: John_Barrow: Hello World!
--->	005: HTTPRequest(url)  
	006: Return
	010: UTC = %A_NowUTC%
	011: RegExMatch(UTC, "^20(..)(..)(..)(..)(..)(..)$", UTCp)  
	012: tyear = %UTCp1%
	013: tmonth = %UTCp2%
	014: tday = %UTCp3%
	015: thour = %

Если у тебя стоят какие-либо дополнительные библиотеки, это не значит, что у других они тоже есть.

В первую очередь посмотри содержимое переменной "Chat".

...

Операции сравнения записаны не верно, если переменные указаны в скобках, знаки % не нужны.

(varn1 = thour)
(varn1 > thour)
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.