Что нового

Как изменить только последнюю строку в текстовом файле?

A

at

Гость
Добрый День, Всем! Прошу помочь.

Есть программа, которая ведет лог. Мы отслеживаем появление определенной строки в этом логфайле и вносим в нее изменения.

Вопрос: Как считывать только последнюю строчку в этом текстовом файле, игнорируя все предыдущие совпадения в тексте, если они были.

Код:
Global $vScript_Name = 'PC', $sFile, $sRead

While 1	
            $sFile = @ScriptDir & '\prog.log'
			$sRead = FileRead($sFile)
						
			$sString_A = StringRegExp($sRead, '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?Класс.*?на старте.*)$')
			$sText_A = '(?m)^(.*?\[.*?INFO.*?Script:\(Script:' & $vScript_Name & '\).*?Класс.*?на старте.*)$'
			$sReplace_Text_A = @HOUR & ':' & @MIN & ':' & @SEC & '.' & '<<< ИЗМЕНЕНО >>>  Информация о классе изменена успешно !' & @CRLF

		 If $sString_A Then

			 Sleep(100)
			$sReplace_A = StringRegExpReplace($sRead, $sText_A, $sReplace_Text_A)
			FileDelete($sFile)
			FileWrite($sFile, $sReplace_A)
			 Func_A()

		 EndIf
		Sleep(5000);проверка каждые 5 сек.
WEnd

Func Func_A()
		Sleep(10)
		MsgBox(0, "Успех !", "", 1)
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Re: Как читать только последнюю строку в текстовом файле?

Код:
FileReadLine ('text.txt',-1)
 
Автор
A

at

Гость
Re: Как читать только последнюю строку в текстовом файле?

Александр, спасибо за подсказку. Я так пробовал. Удаляется все содержимое этого текстого файла, а мне нужно внести только изменения в появившейся строке, если она соответствует шаблону.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Re: Как читать только последнюю строку в текстовом файле?

как так удаляется? :blink:
только что проверил..все на месте..
 
Автор
A

at

Гость
Re: Как читать только последнюю строку в текстовом файле?

как так удаляется?
только что проверил..все на месте..

Может я в скрипте не правильно реализовал перезапись строки, но у меня удаляется полностью все содержимое файла и остается только новая строка.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
at [?]
Может я в скрипте не правильно реализовал перезапись строки
Конечно не правильно. Вы же файл удаляете :blink: А потом записываете в файл только измененную строку.
Вам нужна функция:

Код:
#Include <File.au3>
_FileWriteToLine($sFile, $iLine, $sText [, $fOverWrite = 0])

Ну и возможно понадобится:
Код:
#Include <File.au3>
_FileCountLines($sFilePath)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вот так работает
Код:
Global $vScript_Name = 'PC', $sFile, $sRead

While 1
            $sFile = @ScriptDir & '\prog.txt'
            $sRead = FileReadLine($sFile,-1)

            $sString_A = StringRegExp($sRead, 'привет' & $vScript_Name & 'пока')
            $sText_A = 'привет' & $vScript_Name & 'пока'
            $sReplace_Text_A = @HOUR & ':' & @MIN & ':' & @SEC & '.' & '<<< ИЗМЕНЕНО >>>  Информация о классе изменена успешно !' & @CRLF

         If $sString_A Then

             Sleep(100)
            $sReplace_A = StringRegExpReplace($sRead, $sText_A, $sReplace_Text_A)
            ;FileDelete($sFile)
            FileWrite($sFile, $sReplace_A)
             Func_A()

         EndIf
        Sleep(5000);проверка каждые 5 сек.
WEnd

Func Func_A()
        Sleep(10)
        MsgBox(0, "Успех !", "", 1)
EndFunc
 
Автор
A

at

Гость
Александр , благодарю, так работает. Спасибо Всем за помощь.
 
Верх