1

Тема: AHK: Беспрерывное чтение файла

Добрый день .
Пользуюсь кодом .
Он должен считывать файл в  цикле и каждый раз новые строки .
Но считывание происходит только единожды при запуске .
Вот " читающая часть"


loop, read, combat.log
{
	if (lastLine.combat >= A_Index)
		Continue

	lastLine.combat := A_Index
	str := RegExReplace(A_LoopReadLine, "\s+", A_Space)
	str := RegExReplace(str, "^\d+:\d+:[\.\d+]+\|\s+")

	if (str ~= "Active battle started\.")	
	{
		Active := A_TickCount
	}
	else if (str ~=  "attacker:\s+" nickName1)
		{
			Active2 := A_TickCount
		}
	else if (str ~=  "killer:\s+" nickName1)
		{
            Active3 := A_TickCount
		}
    else if (str ~=  "Victim:\s+" nickName1)
		{
			Active4 := A_TickCount
		}
	else if (str ~=  "Kill\. Victim:\s+" nickName1)
		{
			Active5 := A_TickCount
		}
} 

А вот часть которая выводит переменные .


loop
{
		if (A_TickCount - Active <= 500)
		{
           pic = 5
		}
		else if (A_tickCount - Active2 <= 500)
		{
			pic = 2				
		}
		else if (A_tickCount - Active3 <= 500)
		{
			pic = 3		
		}
		else if (A_tickCount - Active4 <= 500)
		{	 
		   pic = 2  
		}
		else if (A_tickCount - Active5 <= 500)
		{
			pic = 4
		}
}

Ник берется выше читающей части и помещается в переменную nickName1

Вот пример того , как выглядит файл который читается .
08:54:49.990| Active battle started.
09:00:18.024| Damage. Victim: Sophia              , attacker: MS_ONE         , weapon 'CarPart_Gun_BigCannon_EX_Relic', damage: 929.58 DMG_BLAST|CAR_PART|IGNORE_DAMAGE_SCALE
09:00:30.137| Damage. Victim: MS_ONE        , attacker: Christopher         , weapon 'CarPart_Gun_Shotgun_epic', damage: 5.90 DMG_DIRECT|CAR_PART|HIGH_FIRE_RATE
09:22:45.333| Kill. Victim: TestDriveCar2        killer: MS_ONE
09:29:13.630| Kill. Victim: MS_ONE          killer: n/a   


Вывод сообщений на экран через GDIP . ( эта часть кода работает , проверялась с другими чтениями )
Подскажите в чем проблема .

2 (изменено: stealzy, 2020-03-08 21:29:07)

Re: AHK: Беспрерывное чтение файла

Навскидку — у вас два бесконечных цикла. Нить выполнения только одна, и, соответственно, цикл будет крутиться только последний запущенный, а предпоследний замрет в ожидании выхода из последнего.

Решение попроще - уместить все в один цикл, посложнее — переделать на таймеры.
И прекратите пытать знаки пунктуации.

Win7x64 up to 2018, AutoHotkey 1.1.30.00

3

Re: AHK: Беспрерывное чтение файла

stealzy
Ситуация описанная с использованием таймера.

4 (изменено: Foma, 2020-03-08 22:20:45)

Re: AHK: Беспрерывное чтение файла

Таймеры: http://www.script-coding.com/AutoHotkey/SetTimer.html

5

Re: AHK: Беспрерывное чтение файла

File := FileOpen("input.txt", "r")
Loop {
	while (File.AtEOF)
		Sleep 1
	strings := File.Read()
	/*
		Что-то делаем со %strings%.

		Следует учитывать, что последняя строка могла быть прочитана
		не полностью и её следует запомнить и добавить в начало
		следующей считанной части.
	*/
}