1

Тема: AHK: Как сделать проверку текстового файла на изменение содержимого?

Здравствуйте, мне нужно сделать проверку файла на изменение текста в нем, и если текст изменился/добавился/удалился, то проигрываются последующие действия.

2 (изменено: sergeiplugatyr, 2013-12-14 21:58:34)

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Изучайте команду

FileGetTime
Как сказал мой дед - Я твой дед

3

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Поясню, файл обновляется чуть ли не каждую секунду, и мне надо всего лишь высвечивать его содержимое в окне, и если файл обновляется - обновить проекцию в окно. Вы скажете, что можно просто поставить обновление проекции через каждую секунду. Но я хочу обновлять проекцию минимальное количество раз, только тогда, когда файл дополнился

4

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Captain_SERG, вот здесь этот вопрос рассматривался.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

FileRead, OutputVar1, FileName.txt
GUI, Add, Text, ReadOnly vMyTime, %A_Hour%:%A_Min%:%A_Sec%
GUI, Color, FFFFFF
GUI, Add, Text, vMyText, %OutputVar1%
GUI, Show, w640 h680

Loop
{
FileRead, OutputVar2, FileName.txt

If OutputVar2 != %OutputVar1%
    {
    GuiControl, , MyTime, %A_Hour%:%A_Min%:%A_Sec%
    OutputVar1 = %OutputVar2%
    GuiControl, , MyText, %OutputVar2%
    GUI, Color,   FFFF99
    Sleep, 600
    GUI, Color,   FFFFFF
    }
Sleep, 2000
}

6

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

ypppu пишет:

GUI, Add, Text, vMyText, %OutputVar1%

А если там текста на пару мегабайт?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: Captain_SERG, 2013-12-15 16:20:08)

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Кстати текста там не мало, и мне надо чтобы текст отображался с нижней строчки и шел вверх.
На этой картинке показано как именно должно все выглядеть

8

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Проверяй размер.

9

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

А какая разница, сколько мегабайт? В любом случае файл нужно полностью считывать. GUI прикрутил для наглядности.

10

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

А чем тут предложенный FileGetTime неподходит?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

В общем автор пошёл сложным путём. Файл может иметь большой размер и изменяться несколько раз в секунду. При этом никаких специальных уведомлений не поступает.

12 (изменено: Captain_SERG, 2013-12-15 21:20:10)

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Ладно, давайте проще: мне нужно чтобы большой файл файл text.txt читался каждую секунду и проецировал текст начиная с нижней строчки в GUI окно

13

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Ок, сделаем 2 предположения:
- Изменения в файле происходят добавлением строк в конец файла, причем строка заканчивается переводом (`r`n) ;
- Кодировка файла ANSI, т.е. 1 байт на символ.

Содержимое файла выводим через GUI, предложенный ypppu:

filename = c:\log.txt
lines := 5
GUI, Add, Text, ReadOnly vMyTime, %A_Hour%:%A_Min%:%A_Sec%
GUI, Color, FFFFFF
GUI, Add, Text, vMyText w640 R%lines%, %Content%
GUI, Show

FileGetSize, oldsize, %filename%
newsize := 0
Loop, read, %filename%
{
   newsize += StrLen(A_LoopReadLine)+2 ; ANSI + `r`n
   Content .= A_LoopReadLine . "`n"
   Content := SubStr(Content, InStr(Content, "`n",0,-1, lines)+1)
   if (oldsize = newsize)
   {
   GuiControl, , MyTime, %A_Hour%:%A_Min%:%A_Sec%
   GuiControl, , MyText, %Content%
   GUI, Color,   FFFF99
   Sleep, 600
   GUI, Color,   FFFFFF
   }
   while oldsize = newsize
   {
      sleep 1000
      FileGetSize, oldsize, %filename%
   }

}

GuiClose:
Gui, Destroy
if !oldsize
   MsgBox Ошибка чтения, или файл "%filename%" не найден!
ExitApp

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

14 (изменено: Captain_SERG, 2013-12-16 14:17:53)

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Irbis, как-то странно он работает. Указал путь к нужному файлу - скрипт не включался. указал путь к файлу поменьше (1 строчка) - включился, и 1 раз засек изменение в нем. После выключился и больше не включался

15

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Значит, файл не подходит под один из критериев, которые я написал ранее (или под оба), и нужен другой подход.
На тестовом файле в блокноте все работает и новые строки оперативно отображаются. То есть:
11<Enter><Сохранить>
222<Enter><Сохранить>
333<Enter><Сохранить> и т.д.

После каждого <Сохранить> новая строка добавляется в окно GUI.

16

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

А какие там критерии? Я не умею читать такие сложные коды

17

Re: AHK: Как сделать проверку текстового файла на изменение содержимого?

Я написал, что в подопытном файле должен быть 1 байт на 1 символ (не юникод), и строки добавляются вместе с символами переноса строки.

+ открыть спойлер

http://savepic.net/4015667.png