Что нового

Предпоследняя строка (как получить, когда last string не подходит?)

NamelessOne

Новичок
Сообщения
1
Репутация
0
Здравствуйте. Я пишу макрос для текстовой игры. Столкнулся с проблемой, которую не смог пока решить, поэтому решил обратиться сюда.
Клиент создает лог, в который, разумеется, пишутся строки. С последней строкой проблем нет, last string работает прекрасно. Но здесь интересный случай: при определенных обстоятельствах в лог пишется одновременно две строки, а последняя совпадает в обоих нужных случаях. Поэтому нужно, чтобы в одном случае читал последнюю строку, а в другом - предпоследнюю. Нужна именно предпоследняя строка. Или я торможу, что такой функции не вижу... Мануал вкуривал, тут поиском пользовался - решения не нашел. Либо я слепой, тогда простите. Дайте линк или помогите разобраться, пожалуйста. Дабы было понятнее в целом приведу небольшой кусок кода:
Код:
;...
Func MarcosLoop()
	For $i = 0 To 1000 Step 1
		$last_line_log = FileReadLine($log, -1)
		
               ;#Вот это и выходит предпоследней строкой, проблема в том, что в тот же момент пишется другая - следующая, которая так же как раз используется в ElseIf
               ;#Поэтому нужно читать предпоследнюю
		If StringInStr($last_line_log, 'You must free more space.', 1) Then
			ExitLoop
			
		ElseIf StringInStr($last_line_log, 'You stopped.', 1) Then
			WinActivate("x")
		
		EndIf
		Sleep(100)
	Next 
	WinActivate("x")
EndFunc   ;==>MarcosLoop
;...

Целиком приводить не вижу смысла, все прекрасно работает, проблема лишь в чтении предпоследней строки - не знаю как это сделать. Заранее спасибо.

Пользуйтесь, пожалуйста, в будущем тегами AutoIt.
madmasles.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$before_last_line = StringRegExpReplace(FileRead($log), '(?s)^.*?([^\r\n]+)\r?\n[^\r\n]+(\r?\n)*$', '$1')
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$aFile = FileReadToArray($log)

$aFile[0] ; первая строка
$aFile[1] ; вторая строка
; ...
$aFile[UBound($aFile) - 2] ; предпоследняя строка
$aFile[UBound($aFile) - 1] ; последняя строка
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
http://www.autoitscript.com/forum/topic/143295-filereadline-can-you-read-second-last-line/page-2#entry1009463
 
Верх