Что нового

[Данные, строки] Запись части текстового файла в переменную

MATRASUS

Новичок
Сообщения
3
Репутация
0
Версия AutoIt: 3.3

Описание:
Имеется текстовый файл, в который периодически дописывается информация. Информация дописывается программой в конец файла. Необходимо записать в переменную несколько последних строк этого файла для последующего вывода через box или traytip. Пока реализовал через filereadline, но это мягко говоря нерационально. Есть ли возможность более профессионально и изящно это реализовать?

Примечания:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
MATRASUS,
Надо прочитать весь новый текст?
 
Автор
M

MATRASUS

Новичок
Сообщения
3
Репутация
0
madmasles сказал(а):
MATRASUS,
Надо прочитать весь новый текст?
Да, это был бы лучший вариант, но в таком случае он не поместится в traytip (не критично).
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
MATRASUS,
Пример:
Пишем лог
Код:
;~ AutoIt Version: 3.3.8.1

Global $hFile, $iCount, $iExit

HotKeySet('{Esc}', '_Exit')
$hFile = FileOpen(@ScriptDir & '\Log.txt', 2)

Do
	Sleep(Random(2000, 5000, 1))
	$iCount += 1
	FileWrite($hFile, 'String number ' & $iCount & @CRLF)
Until $iExit

FileClose($hFile)
Exit

Func _Exit()
	$iExit = 1
EndFunc
Читаем лог
Код:
;~ AutoIt Version: 3.3.8.1

Global $sFile = @ScriptDir & '\Log.txt', $hFile, $iSizeOld, $iSizeNew, $sTxt

$hFile = FileOpen($sFile)
If $hFile = -1 Then Exit 1
While ProcessExists('Write.exe'); поменяйте на нужный процесс
	Sleep(500)
	$iSizeNew = FileGetSize($sFile)
	If $iSizeOld <> $iSizeNew Then
		FileSetPos($hFile, $iSizeOld, 0);$FILE_BEGIN
		$sTxt = StringStripWS(FileRead($hFile), 3)
		ConsoleWrite($sTxt & @LF)
		ConsoleWrite('-----------------------' & @LF)
		$iSizeOld = $iSizeNew
	EndIf
WEnd
FileClose($hFile)
Exit
 
Автор
M

MATRASUS

Новичок
Сообщения
3
Репутация
0
Отличная реализация, намного сложнее, чем я предполагал, но и гораздо более правильная. Попробую сейчас под себя переписать.
Мне как раз не хватало силы мысли определить как filesetpos задавать так, чтобы с нужного места получилось. Премного благодарен, потестирую и доложу о результатах


Добавлено:
Сообщение автоматически объединено:

Все отлично работаетб еще раз большое спасибо!
 
Верх