1

Тема: AHK: Обработка текстовго файла

Пытаюсь разобраться с работой над строками. Запутался совершенно. Может кто-то поможет набросать код по следующему алгоритму?


1. Проверять в папке файлы на обновление каждые 3 секунды
2. В тех, что изменились за последние 3 секунды,  начиная снизу найти первое вхождение фразы «10001 10003» или «10001 1004» или «10001 10005»
3. запомнить текст от конца файла до этого места
4. начиная снизу найти в этом тексте строки со словами «10000 10010» или «10000 10011»
5. найти в этом  тексте ниже этой строки строку со словом  «10012»
6. выделить из этой строки(состоящей из двух слов) первое слово.
7. проверить есть ли в участке текста(из пункта 3)  выше этого места( из пункта 4) строка с этим словом и со словом  «10010»
8. выдать звуковой сигнал.

Во всех случаях, если  какое-либо условие не соблюдается,  переход на начало исполнения кода.



  Техническе моменты.
Файлов в папке до 200.
Размеры каждого не более 200КБ
Количество постоянно меняющихся файлов не более 20.


  Заранее спасибо за помощь!
Есть ли шанс, что исполнение скрипта не вызовет тормозов, если время проверки на обновление сократить до 1 сек или 0,5сек?

2

Re: AHK: Обработка текстовго файла

Pokerist пишет:

1. Проверять в папке файлы на обновление каждые 3 секунды

См. Loop.

Pokerist пишет:

Есть ли шанс, что исполнение скрипта не вызовет тормозов, если время проверки на обновление сократить до 1 сек или 0,5сек?

См. AHK: Аудит файловой системы и вызов wait-функции в отдельном потоке

Pokerist пишет:

2. В тех, что изменились за последние 3 секунды,  начиная снизу найти первое вхождение фразы «10001 10003» или «10001 1004» или «10001 10005»
3. запомнить текст от конца файла до этого места
4. начиная снизу найти в этом тексте строки со словами «10000 10010» или «10000 10011»
5. найти в этом  тексте ниже этой строки строку со словом  «10012»
6. выделить из этой строки(состоящей из двух слов) первое слово.
7. проверить есть ли в участке текста(из пункта 3)  выше этого места( из пункта 4) строка с этим словом и со словом  «10010»

См. RegEx и RegExMatch.

Pokerist пишет:

8. выдать звуковой сигнал.

SoundBeep или SoundPlay.

3

Re: AHK: Обработка текстовго файла

Спасибо за помощь!

Александр_ пишет:
Pokerist пишет:

1. Проверять в папке файлы на обновление каждые 3 секунды

См. Loop.

Насколько я понял этот оператор проверит все файлы в папке, запомнит всех их атрибуты. Теперь мне нужно получить список файлов, которые были измнены за последние 3 сек.
Как это сделать? Допустим время  201111101010.  Что мне делать с  %A_LoopFileTimeModified% ?

4 (изменено: creature.ws, 2011-11-09 04:25:00)

Re: AHK: Обработка текстовго файла

Например:

wPath = %A_AppData%\Folder
wFileName = *
wFileExtension = log

SetTimer, filecheck, 6000
filecheck:
  Loop, %wPath%\%wFileName%.%wFileExtension%
  {
     StringReplace, filename, A_LoopFileName, . ,,A  
     if !(A_LoopFileTimeModified = time_%filename%) {
        ; ...
        ; Действия
        ; ...
     }
  }

5 (изменено: Александр_, 2011-11-09 16:16:58)

Re: AHK: Обработка текстовго файла

Pokerist пишет:

Насколько я понял этот оператор проверит все файлы в папке, запомнит всех их атрибуты. Теперь мне нужно получить список файлов, которые были измнены за последние 3 сек.
Как это сделать? Допустим время  201111101010.  Что мне делать с  %A_LoopFileTimeModified% ?

Loop %A_ScriptDir%\* ;все файлы в папке со скриптом
{
   x := A_Now ; текущее время
   x -= A_LoopFileTimeModified ; текущее время минус дата модификации файла
   if(x<=3) ; если не больше 3 секунд, то выводим имя файла и время, прошедшее с последней модификации
      msgbox %A_LoopFileName%, %x%
}

см. также EnvSub/EnvAdd.

6

Re: AHK: Обработка текстовго файла

Александр, спасибо! Но  почему-то не срабатывает "if". Выводятся  все имена файлов по очереди, хотя время с момента изменения в каждом сообщении указано верно.

7

Re: AHK: Обработка текстовго файла

Pokerist пишет:

Александр, спасибо! Но  почему-то не срабатывает "if". Выводятся  все имена файлов по очереди, хотя время с момента изменения в каждом сообщении указано верно.

Наверно разные версии AHK, я использую AHK_L. Попробуйте так:

if x<=3 
{
   msgbox %A_LoopFileName%, %x%
}

8

Re: AHK: Обработка текстовго файла

Александр_ пишет:
Pokerist пишет:

Александр, спасибо! Но  почему-то не срабатывает "if". Выводятся  все имена файлов по очереди, хотя время с момента изменения в каждом сообщении указано верно.

Наверно разные версии AHK, я использую AHK_L. Попробуйте так:

Ругается на  "} }" если так:

Loop, C:\Del\*.*, A_LoopFileTimeModified , 1 ; Рекурсия в подпапки.
{
   x := A_Now ; текущее время
   x -= A_LoopFileTimeModified ; текущее время минус дата модификации файла
   if(x<3) ; если больше 3 секунд, то выводим имя файла и время, прошедшее с последней модификаци
 {
   msgbox %A_LoopFileName%, %x%
 }
}