Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 1
  • 1
Модератор форума: Peter, DEMBEL, YURIY  
Как читать файл открытый другой программой
UserDeadДата: Вт, 20 Декабря 2016, 15:31 | Сообщение # 1
Любопытный
Приветствую уважаемые =)
Надеюсь есть живые. Честно я вам очень рад.
Скриптовой язык в NeoBook мне достаточно понятен и я редко задаю вопросы. Однако столкнулся с одной бедой.
Пишу программу которая парсит логи от другой программы. Уперся в проблему ине знаю как считать файл если он открыт другой программой.
Суть в том что надо узнать количество строк в файле, если он открыт этого никак не узнать.
Если в переменную считать все содержимое файла, то там образуются строки и как проводить навигацию по ним вообще не пойму.
---
Сейчас сделал на "костылях" где файл лога копируется каждую секунду и считается количество строк и извлекается нужная информация. Но если утилитка запущена на флешке - нецелесообразно каждый раз так писать.
Как поступить подскажите)))
Интересует считывание именно последних строк.


I will alive before dead
 
СообщениеПриветствую уважаемые =)
Надеюсь есть живые. Честно я вам очень рад.
Скриптовой язык в NeoBook мне достаточно понятен и я редко задаю вопросы. Однако столкнулся с одной бедой.
Пишу программу которая парсит логи от другой программы. Уперся в проблему ине знаю как считать файл если он открыт другой программой.
Суть в том что надо узнать количество строк в файле, если он открыт этого никак не узнать.
Если в переменную считать все содержимое файла, то там образуются строки и как проводить навигацию по ним вообще не пойму.
---
Сейчас сделал на "костылях" где файл лога копируется каждую секунду и считается количество строк и извлекается нужная информация. Но если утилитка запущена на флешке - нецелесообразно каждый раз так писать.
Как поступить подскажите)))
Интересует считывание именно последних строк.

Автор - UserDead
Дата добавления - 20 Декабря 2016 в 15:31
PeterДата: Вт, 20 Декабря 2016, 17:38 | Сообщение # 2
Админ NeoBook
Цитата UserDead ()
Надеюсь есть живые

Трудновато найти живых при фактически мертвой программе, увы...
:(
Может еще она обретет "второе дыхание", првративщись в зомби, но даже на это надежды все меньше и меньше.

Цитата UserDead ()
сделал на "костылях"

"На костылях" это только то, что файл надо отслеживать каждую секунду, а остальное вовсе не "на костылях", т.к. в NB по-другому и не сделать (без плагина).
Все просто: читаем файл в переменную, затем парсим ее на отдельные строки, подсчитываем количество строк (размер массива), сравниваем его с предыдущим "замером", и если требуется читаем новые строки (по идее они должны быть последними)
Не вижу проблем.
Только вот это:
Цитата UserDead ()
Но если утилитка запущена на флешке - нецелесообразно каждый раз так писать.

не совсем понятно - что именно нецелесообразно?

В принципе можно даже еще упростить решение, т.е. сначала подсчитывать количество строк (FileLen), и если изменилось, то парсить и проч.
А можно и еще проще (без парсинга) - посредством FileRead читать только добавленные строки.
;)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата UserDead ()
Надеюсь есть живые

Трудновато найти живых при фактически мертвой программе, увы...
:(
Может еще она обретет "второе дыхание", првративщись в зомби, но даже на это надежды все меньше и меньше.

Цитата UserDead ()
сделал на "костылях"

"На костылях" это только то, что файл надо отслеживать каждую секунду, а остальное вовсе не "на костылях", т.к. в NB по-другому и не сделать (без плагина).
Все просто: читаем файл в переменную, затем парсим ее на отдельные строки, подсчитываем количество строк (размер массива), сравниваем его с предыдущим "замером", и если требуется читаем новые строки (по идее они должны быть последними)
Не вижу проблем.
Только вот это:
Цитата UserDead ()
Но если утилитка запущена на флешке - нецелесообразно каждый раз так писать.

не совсем понятно - что именно нецелесообразно?

В принципе можно даже еще упростить решение, т.е. сначала подсчитывать количество строк (FileLen), и если изменилось, то парсить и проч.
А можно и еще проще (без парсинга) - посредством FileRead читать только добавленные строки.
;)

Автор - Peter
Дата добавления - 20 Декабря 2016 в 17:38
UserDeadДата: Вт, 20 Декабря 2016, 19:09 | Сообщение # 3
Любопытный
Благодарю за отклик)
Вот именно FileLen Не работает когда открыта программа использующая файл.
Не секрет это PuTTY и он сливает содержимое ssh в логи а моя утилита должна "кушать" данные. Но когда файл открыт PuTTY то нб кричит об ошибке доступа к файлу. Поэтому не могу применять FileLen. Приходится каждую секунду копировать FileCopy "[cd]log.log" "[cd]log_.log"
И читать из log_.log данные. Но на флешке постоянно перезатирая копированием. Вот что не целесообразно.
Цитата Peter ()
Все просто: читаем файл в переменную, затем парсим ее на отдельные строки, подсчитываем количество строк (размер массива), сравниваем его с предыдущим "замером", и если требуется читаем новые строки (по идее они должны быть последними)
Не вижу проблем.

Вот я выбрал FileRead "[cd]log.log" "all" "[data]"
Как мне теперь переместиться на ***строку в переменной [data]
Или предлагаете читать построчно не зная сколько строк в файле так как узнать это нельзя из-за того что файл открыт.
Цитата Peter ()
А можно и еще проще (без парсинга) - посредством FileRead читать только добавленные строки.

А если мне нужно сместиться на -2 строки. Мне все равно нужно знать на какой я строке сейчас.
Такие дела %)


I will alive before dead

Сообщение отредактировано
UserDead - Вт, 20 Декабря 2016, 19:09
 
СообщениеБлагодарю за отклик)
Вот именно FileLen Не работает когда открыта программа использующая файл.
Не секрет это PuTTY и он сливает содержимое ssh в логи а моя утилита должна "кушать" данные. Но когда файл открыт PuTTY то нб кричит об ошибке доступа к файлу. Поэтому не могу применять FileLen. Приходится каждую секунду копировать FileCopy "[cd]log.log" "[cd]log_.log"
И читать из log_.log данные. Но на флешке постоянно перезатирая копированием. Вот что не целесообразно.
Цитата Peter ()
Все просто: читаем файл в переменную, затем парсим ее на отдельные строки, подсчитываем количество строк (размер массива), сравниваем его с предыдущим "замером", и если требуется читаем новые строки (по идее они должны быть последними)
Не вижу проблем.

Вот я выбрал FileRead "[cd]log.log" "all" "[data]"
Как мне теперь переместиться на ***строку в переменной [data]
Или предлагаете читать построчно не зная сколько строк в файле так как узнать это нельзя из-за того что файл открыт.
Цитата Peter ()
А можно и еще проще (без парсинга) - посредством FileRead читать только добавленные строки.

А если мне нужно сместиться на -2 строки. Мне все равно нужно знать на какой я строке сейчас.
Такие дела %)

Автор - UserDead
Дата добавления - 20 Декабря 2016 в 19:09
mishemДата: Вт, 20 Декабря 2016, 19:21 | Сообщение # 4
Эксперт форума
Цитата UserDead ()
Но когда файл открыт PuTTY то нб кричит об ошибке доступа к файлу.

А при получении размера файла тоже "кричит"?
Может быть сначала получать размер файла и если изменился то проводить все дальнейшие манипуляции?

Цитата UserDead ()
А если мне нужно сместиться на -2 строки. Мне все равно нужно знать на какой я строке сейчас.

Неоднократно уже говорил о том что в НБ мало возможностей для работы со строками. Самое лучшее решение на сегодняшний день это плагин hpwControl. ;)


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата UserDead ()
Но когда файл открыт PuTTY то нб кричит об ошибке доступа к файлу.

А при получении размера файла тоже "кричит"?
Может быть сначала получать размер файла и если изменился то проводить все дальнейшие манипуляции?

Цитата UserDead ()
А если мне нужно сместиться на -2 строки. Мне все равно нужно знать на какой я строке сейчас.

Неоднократно уже говорил о том что в НБ мало возможностей для работы со строками. Самое лучшее решение на сегодняшний день это плагин hpwControl. ;)

Автор - mishem
Дата добавления - 20 Декабря 2016 в 19:21
PeterДата: Вт, 20 Декабря 2016, 19:41 | Сообщение # 5
Админ NeoBook
Цитата UserDead ()
Вот я выбрал FileRead "[cd]log.log" "all" "[data]"
Как мне теперь переместиться на ***строку в переменной [data]

%) scared
Цитата Peter ()
читаем файл в переменную, затем парсим ее на отдельные строки, подсчитываем количество строк (размер массива), сравниваем его с предыдущим "замером", и если требуется читаем новые строки (по идее они должны быть последними)

Читать можно прямо из массива.
Цитата mishem ()
Неоднократно уже говорил о том что в НБ мало возможностей для работы со строками

Вполне достаточно для большинства задач, нужно только не лениться.
;)

Добавлено (20 Декабря 2016, 19:41)
---------------------------------------------
Кстати, mishem, ради интереса, открой справку Delphi и посмотри там сколько в нем имеется функций для работы со строками (именно с классом string).
;)
Заранее скажу - ты будешь удивлен!
Если мне не изменяет память, то там нет даже готового аналога необушной StrParse
:)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата UserDead ()
Вот я выбрал FileRead "[cd]log.log" "all" "[data]"
Как мне теперь переместиться на ***строку в переменной [data]

%) scared
Цитата Peter ()
читаем файл в переменную, затем парсим ее на отдельные строки, подсчитываем количество строк (размер массива), сравниваем его с предыдущим "замером", и если требуется читаем новые строки (по идее они должны быть последними)

Читать можно прямо из массива.
Цитата mishem ()
Неоднократно уже говорил о том что в НБ мало возможностей для работы со строками

Вполне достаточно для большинства задач, нужно только не лениться.
;)

Добавлено (20 Декабря 2016, 19:41)
---------------------------------------------
Кстати, mishem, ради интереса, открой справку Delphi и посмотри там сколько в нем имеется функций для работы со строками (именно с классом string).
;)
Заранее скажу - ты будешь удивлен!
Если мне не изменяет память, то там нет даже готового аналога необушной StrParse
:)

Автор - Peter
Дата добавления - 20 Декабря 2016 в 19:41
UserDeadДата: Вт, 20 Декабря 2016, 19:52 | Сообщение # 6
Любопытный
С первого раза не дошло) Уж простите.
Я так понял парсить на CR-LF чтобы разобрать на строки. Потому что конец строки может быть разный, а символы переноса есть перед каждой новой строкой.
Попробую оба варианта с плагином и без.
---
Мысль была читать файл счетчиком пока не начнем плавать по несуществующим строкам, и откатываться построчно назад пока не появятся какие-то данные. Немного бредово звучит.


I will alive before dead
 
СообщениеС первого раза не дошло) Уж простите.
Я так понял парсить на CR-LF чтобы разобрать на строки. Потому что конец строки может быть разный, а символы переноса есть перед каждой новой строкой.
Попробую оба варианта с плагином и без.
---
Мысль была читать файл счетчиком пока не начнем плавать по несуществующим строкам, и откатываться построчно назад пока не появятся какие-то данные. Немного бредово звучит.

Автор - UserDead
Дата добавления - 20 Декабря 2016 в 19:52
PeterДата: Вт, 20 Декабря 2016, 20:02 | Сообщение # 7
Админ NeoBook
Цитата UserDead ()
Я так понял парсить на CR-LF чтобы разобрать на строки.

Если строки разделены именно этими символами, то да, но обычно в NB, когда читается текстовой файл в переменную строки разделены стандартными символами [#13][#10].

Цитата UserDead ()
Мысль была читать файл счетчиком пока не начнем плавать по несуществующим строкам, и откатываться построчно назад пока не появятся какие-то данные. Немного бредово звучит.

Вообще, конкретное решение во многом зависит от конкретной задачи.
Оно, конечно, можно и плагином, но...
Даже из имеющихся средств работы со строками в NB можно написать собственную StrParse (аналог штатной).
;)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата UserDead ()
Я так понял парсить на CR-LF чтобы разобрать на строки.

Если строки разделены именно этими символами, то да, но обычно в NB, когда читается текстовой файл в переменную строки разделены стандартными символами [#13][#10].

Цитата UserDead ()
Мысль была читать файл счетчиком пока не начнем плавать по несуществующим строкам, и откатываться построчно назад пока не появятся какие-то данные. Немного бредово звучит.

Вообще, конкретное решение во многом зависит от конкретной задачи.
Оно, конечно, можно и плагином, но...
Даже из имеющихся средств работы со строками в NB можно написать собственную StrParse (аналог штатной).
;)

Автор - Peter
Дата добавления - 20 Декабря 2016 в 20:02
mishemДата: Вт, 20 Декабря 2016, 21:36 | Сообщение # 8
Эксперт форума
Цитата Peter ()

Вполне достаточно для большинства задач, нужно только не лениться.

Я не спорю, для большинства задач вполне достаточно.

Цитата Peter ()
Заранее скажу - ты будешь удивлен!

Вряд ли я буду удивлен, их там достаточно.

Цитата Peter ()
то там нет даже готового аналога необушной StrParse

Скорее всего это где то находится при работе с массивами. ;)

Добавлено (20 Декабря 2016, 21:36)
---------------------------------------------
Хотя WrapText это не то?


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата Peter ()

Вполне достаточно для большинства задач, нужно только не лениться.

Я не спорю, для большинства задач вполне достаточно.

Цитата Peter ()
Заранее скажу - ты будешь удивлен!

Вряд ли я буду удивлен, их там достаточно.

Цитата Peter ()
то там нет даже готового аналога необушной StrParse

Скорее всего это где то находится при работе с массивами. ;)

Добавлено (20 Декабря 2016, 21:36)
---------------------------------------------
Хотя WrapText это не то?


Автор - mishem
Дата добавления - 20 Декабря 2016 в 21:36
PeterДата: Ср, 21 Декабря 2016, 00:01 | Сообщение # 9
Админ NeoBook


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение

Автор - Peter
Дата добавления - 21 Декабря 2016 в 00:01
ponandДата: Ср, 21 Декабря 2016, 02:09 | Сообщение # 10
Участник
 
Сообщение

Автор - ponand
Дата добавления - 21 Декабря 2016 в 02:09
PeterДата: Ср, 21 Декабря 2016, 03:08 | Сообщение # 11
Админ NeoBook


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение

Автор - Peter
Дата добавления - 21 Декабря 2016 в 03:08
ponandДата: Ср, 21 Декабря 2016, 03:17 | Сообщение # 12
Участник
 
Сообщение

Автор - ponand
Дата добавления - 21 Декабря 2016 в 03:17
PeterДата: Ср, 21 Декабря 2016, 03:38 | Сообщение # 13
Админ NeoBook


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение

Автор - Peter
Дата добавления - 21 Декабря 2016 в 03:38
ponandДата: Ср, 21 Декабря 2016, 04:54 | Сообщение # 14
Участник
 
Сообщение

Автор - ponand
Дата добавления - 21 Декабря 2016 в 04:54
UserDeadДата: Ср, 21 Декабря 2016, 23:42 | Сообщение # 15
Любопытный
Пока я собираюсь реализовать способ чтения лога одним из способов, увидел что вы тут продолжаете обсуждение насчет строк и затронули MMB...


I will alive before dead
 
СообщениеПока я собираюсь реализовать способ чтения лога одним из способов, увидел что вы тут продолжаете обсуждение насчет строк и затронули MMB...

Автор - UserDead
Дата добавления - 21 Декабря 2016 в 23:42
PeterДата: Чт, 22 Декабря 2016, 02:01 | Сообщение # 16
Админ NeoBook


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение

Автор - Peter
Дата добавления - 22 Декабря 2016 в 02:01
UserDeadДата: Вт, 24 Января 2017, 14:24 | Сообщение # 17
Любопытный
Дописал решил)
Благодарю за подсказку. Использовал метод чтения файла целиком и парсить по меткам конца строки как написал Рeter
Получилось зная количество обнаруженных элементов можно иметь актуальные данные и никаких перезаписей файлов
Код

FileRead "[cd]log.log" "All" "[f_data]"
StrParse "[f_data]" "[#13][#10]" "[d_dat_]" "[f_dataelemets]"
SetVar "[log_dataz]" "[d_dat_[f_dataelemets]]"
SearchStr "root@dhcp" "[log_dataz]" "[log_waitdetect]" ""

То есть читаем весь файл + ищем строки переноса + ищем данные в последней строке, делаем что надо.
Если надо пораньше смотреть строки просто минусуем от [f_dataelemets] и обновляемся 0.6 сек

Еще раз благодарю)


I will alive before dead
 
СообщениеДописал решил)
Благодарю за подсказку. Использовал метод чтения файла целиком и парсить по меткам конца строки как написал Рeter
Получилось зная количество обнаруженных элементов можно иметь актуальные данные и никаких перезаписей файлов
Код

FileRead "[cd]log.log" "All" "[f_data]"
StrParse "[f_data]" "[#13][#10]" "[d_dat_]" "[f_dataelemets]"
SetVar "[log_dataz]" "[d_dat_[f_dataelemets]]"
SearchStr "root@dhcp" "[log_dataz]" "[log_waitdetect]" ""

То есть читаем весь файл + ищем строки переноса + ищем данные в последней строке, делаем что надо.
Если надо пораньше смотреть строки просто минусуем от [f_dataelemets] и обновляемся 0.6 сек

Еще раз благодарю)

Автор - UserDead
Дата добавления - 24 Января 2017 в 14:24
  • Страница 1 из 1
  • 1
Поиск: