Read by line 2

Обсуждение программ nnCron и nnCron LITE

Re: Read by line 2

Postby VoidVolker » Tue, 10 Nov 2015, 10:39

elos wrote:с окончанием задачи память должна освобождаться

Не должна, а освобождается полностью. Т.е., если задача интенсивно использует память и часто запускается - то ничего страшного не будет, т.к. после завершения вся память освобождается автоматически. Кроме той памяти, что была выделена глобально для всего процесса. Если задача отработала и память не освободилась - значит где-то в задаче используется глобальная память.
Цикл FOR-FILE-LINES выделяет память только один раз: при загрузке файла в память и по окончании цикла освобождает её.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2879
Joined: Tue, 25 Apr 2006, 17:56

Re: Read by line 2

Postby Serjo » Tue, 10 Nov 2015, 14:26

elos wrote:А какая ж версия до этого была?

nncron.exe v 1.91 Build 1083

ЗЫ В последней версии, к сожалению, не работает запуск задачи
"C:\Program Files\nnCron\nncron.exe" -run имя_задачи
Из SciTE не очень удобно работать. :(
Serjo
 
Posts: 7
Joined: Fri, 13 Dec 2013, 20:08

Re: Read by line 2

Postby dothen » Tue, 10 Nov 2015, 16:01

Serjo wrote:ЗЫ В последней версии, к сожалению, не работает запуск задачи
"C:\Program Files\nnCron\nncron.exe" -run имя_задачи
Из SciTE не очень удобно работать. :(

В окне командного интерпретатора эта команда работает правильно.
Значит её надо запускать из батника.

Файл TaskRun.bat
Code: Select all
"C:\Program Files\nnCron\nncron.exe" -run %1

Code: Select all
TaskRun.bat имя_задачи
dothen
 
Posts: 133
Joined: Mon, 16 Mar 2015, 04:58

Re: Read by line 2

Postby dothen » Sun, 19 Jun 2016, 01:05

В этой версии, для работы плагина нужен плагин lists.spf т.е. слово D>
Может надо что-то придумать? :wink:
dothen
 
Posts: 133
Joined: Mon, 16 Mar 2015, 04:58

Re: Read by line 2

Postby VoidVolker » Tue, 05 Jul 2016, 23:23

Да, надо просто добавить сюда определение.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2879
Joined: Tue, 25 Apr 2006, 17:56

Re: Read by line 2

Postby dothen » Wed, 06 Jul 2016, 00:48

Или в extwords.spf, всё равно он нужен для работы плагина т.к. там определение -ROT
dothen
 
Posts: 133
Joined: Mon, 16 Mar 2015, 04:58

Re: Read by line 2

Postby spronkin » Wed, 21 Dec 2016, 01:46

Добрый вечер! Помогите разобраться с проблемой.
При запуске задачи вываливается ошибка:
Code: Select all
Taskname: Внутренняя ошибка. Попытка поместить указатель на файл перед началом файла.

Код задачи:
Code: Select all
#( Taskname
SingleInstance
NoActive
Action:
    SWHide
    1 READ-BY-LINE: "B.txt" FOUND-LINE S" /\t/" RE-ALL 1+ ;RE-ALL RBL-EXIT ;READ-BY-LINE DUP 0
READ-BY-LINE: "B.txt" 1+ ;READ-BY-LINE
)#

Файл.txt: https://yadi.sk/i/nxQt4dRk34BsL9

Опытным путем удалось выяснить, что сообщение вызывает последняя строка в задаче. А конкретно, при обработке 8 строки в текстовом файле. Это строка имеет длину 10240. Если я удаляю из нее или прибавляю хотя бы один символ - сообщение об ошибке исчезает. Что это может быть?
User avatar
spronkin
 
Posts: 83
Joined: Sun, 15 Jan 2012, 13:56

Re: Read by line 2

Postby spronkin » Wed, 21 Dec 2016, 04:57

Или вот еще одна проблема: считаю количество строк в файле B2.txt:
https://yadi.sk/i/CnKTF3sU34CMLA

Code: Select all
0 READ-BY-LINE: "B2.txt" 1+ ;READ-BY-LINE
MSG: "%0 esPICK%"

Количество строк в файле 155 (без учета символа перевода на последнюю строку). Но вместо 155 на READ-BY-LINE считает 160.
Кодировка файла UTF-8, как и в предыдущем случае. Формат перевода строки 0x0D0A.
Может быть, дело в кодировке? Тогда как поменять условия задачи, чтобы достигнуть результата в этих примерах?
Last edited by spronkin on Wed, 21 Dec 2016, 05:28, edited 2 times in total.
User avatar
spronkin
 
Posts: 83
Joined: Sun, 15 Jan 2012, 13:56

Re: Read by line 2

Postby dothen » Wed, 21 Dec 2016, 05:04

Файл read-by-line.spf строка 42
Code: Select all
    10248   \ максимальная длина строки (в символах)

Так работает
Code: Select all
#( Taskname2
SingleInstance
NoActive
VARIABLE tab_counter
Action:
    FOR-FILE-LINES: "e:\B.txt"
      FOUND-LINE S" /\t/"
      RE-ALL tab_counter 1+! ;RE-ALL
      LINE-NUMBER . tab_counter @ . CR
      tab_counter 0!
    ;FOR-FILE-LINES
)#
dothen
 
Posts: 133
Joined: Mon, 16 Mar 2015, 04:58

Re: Read by line 2

Postby spronkin » Wed, 21 Dec 2016, 05:22

[quote="dothen"]Файл read-by-line.spf строка 42
Code: Select all
    10248   \ максимальная длина строки (в символах)

У меня в строке 42
Code: Select all
        R> TO Lu

В строке 24:
Code: Select all
        10248   \ максимальная длина строки (в символах)

\ Дата: 14:25 11/08/15
\ Версия: 2.0
Может у вас новая версия, но изменение 10248 на 1311744 и рестарт крона не убрало ни 1 ни 2 ошибку. Может быть, у вас более свежая версия плагина? А вот Taskname2 на консоль вывел правильное количество строк.
User avatar
spronkin
 
Posts: 83
Joined: Sun, 15 Jan 2012, 13:56

Re: Read by line 2

Postby spronkin » Wed, 21 Dec 2016, 05:35

spronkin wrote:Или вот еще одна проблема: считаю количество строк в файле B2.txt:
https://yadi.sk/i/CnKTF3sU34CMLA

Code: Select all
0 READ-BY-LINE: "B2.txt" 1+ ;READ-BY-LINE
MSG: "%0 esPICK%"

Количество строк в файле 155 (без учета символа перевода на последнюю строку). Но вместо 155 на READ-BY-LINE считает 160.
Кодировка файла UTF-8, как и в предыдущем случае. Формат перевода строки 0x0D0A.
Может быть, дело в кодировке? Тогда как поменять условия задачи, чтобы достигнуть результата в этих примерах?

Помогло.
Code: Select all
#( Taskname3
SingleInstance
NoActive
Action:
0    FOR-FILE-LINES: "B2.txt"
1+    ;FOR-FILE-LINES
MSG: "%0 esPICK%"
)#

А почему же READ-BY-LINE выдал 160? Что-то я сделал не так.
И сообщение об ошибке в первой задаче пока так и не устранил. Не пойму, почему мне не помогло изменение значения максимальной длины строки в файле?
User avatar
spronkin
 
Posts: 83
Joined: Sun, 15 Jan 2012, 13:56

Re: Read by line 2

Postby dothen » Wed, 21 Dec 2016, 05:49

Просто скачай плагин read-by-line.spf и замени его.
Исправлять ничего не надо.

вместо READ-BY-LINE: используй цикл FOR-FILE-LINES:
"Построчная обработка файла с загрузкой файла в память и последующим освобождением памяти"
dothen
 
Posts: 133
Joined: Mon, 16 Mar 2015, 04:58

Re: Read by line 2

Postby spronkin » Wed, 21 Dec 2016, 07:11

dothen wrote:Просто скачай плагин read-by-line.spf и замени его.
Исправлять ничего не надо.

Сделал, заменил в 42 строке 10248 на 1311744, но не помогло. Там еще чуть ниже через 3 строки 10238 - эту константу менять не стал. Попробую еще обновить nncron, у меня сейчас 1.93b13 Build 1172.

dothen wrote:вместо READ-BY-LINE: используй цикл FOR-FILE-LINES:
"Построчная обработка файла с загрузкой файла в память и последующим освобождением памяти"

Понял, уже пробую, работает, thx!
User avatar
spronkin
 
Posts: 83
Joined: Sun, 15 Jan 2012, 13:56

Re: Read by line 2

Postby spronkin » Mon, 16 Jan 2017, 00:01

spronkin wrote:Добрый вечер! Помогите разобраться с проблемой.
При запуске задачи вываливается ошибка:
Code: Select all
Taskname: Внутренняя ошибка. Попытка поместить указатель на файл перед началом файла.

Код задачи:
Code: Select all
#( Taskname
SingleInstance
NoActive
Action:
    SWHide
    1 READ-BY-LINE: "B.txt" FOUND-LINE S" /\t/" RE-ALL 1+ ;RE-ALL RBL-EXIT ;READ-BY-LINE DUP 0
READ-BY-LINE: "B.txt" 1+ ;READ-BY-LINE
)#

Файл.txt: https://yadi.sk/i/nxQt4dRk34BsL9

Опытным путем удалось выяснить, что сообщение вызывает последняя строка в задаче. А конкретно, при обработке 8 строки в текстовом файле. Это строка имеет длину 10240. Если я удаляю из нее или прибавляю хотя бы один символ - сообщение об ошибке исчезает. Что это может быть?

Извините, что поздно отписываюсь. Снова не дошли руки до решения этой проблемы. Обновил nncron.exe v 1.93b15 Build 1177 08.02.2016, read-by-line.spf v2.0 14:25 11/08/15, все равно остается ошибка:
Внутренняя ошибка. Попытка поместить указатель на файл перед началом файла


spronkin wrote:Или вот еще одна проблема: считаю количество строк в файле B2.txt:
https://yadi.sk/i/CnKTF3sU34CMLA

Code: Select all
#( Taskname2
SingleInstance
NoActive
Action:
0 READ-BY-LINE: "B2.txt" 1+ ;READ-BY-LINE
MSG: "%0 esPICK%"
)#

Количество строк в файле 155 (без учета символа перевода на последнюю строку). Но вместо 155 на READ-BY-LINE считает 160.
Кодировка файла UTF-8, как и в предыдущем случае. Формат перевода строки 0x0D0A.
Может быть, дело в кодировке? Тогда как поменять условия задачи, чтобы достигнуть результата в этих примерах?

Обновление не помогло и в решении этой задачи. Строк по-прежнему насчитывает 160. Может быть READ-BY-LINE считает какие-то "холостые" циклы?

Или вот еще с одной траблой столкнулся:
Файл B3.txt: https://yadi.sk/i/OlYeNz8339DSy4
Пытаюсь посчитать число табов в первой строке:
#( Taskname3
SingleInstance
NoActive
Action:
SWHide
1 READ-BY-LINE: "B3.txt" FOUND-LINE S" /\t/" RE-ALL 1+ ;RE-ALL RBL-EXIT ;READ-BY-LINE
MSG: "%0 esPICK%"
)#

Но вместо 2052 он почему-то насчитывает 171. Чем это объяснить? Как сделать дебаггинг? Я что-то теряюсь в этом слове. Есть обходные пути? И почему задача себя так ведет? Это проблема задачи или READ-BY-LINE?

По-видимому, причина в самой длинной строке файла. Если брать файл B2.txt и задачу Taskname2, то это строка 3. Если удалить в этом файле все строки, кроме первых двух, MSG покажет 2, как положено. Но если оставить первые три, то MSG покажет уже 6). Если обрезать эту строку справа до позиции 29298, MSG покажет также 6. Но если удалить еще один символ справа (29297 от начала строки), то появится ошибка "Попытка поместить указатель на файл перед началом файла". А если стереть еще один символ (29296), то MSG будет выдавать уже "5". Если продолжать стирать строку дальше, то подобная проблема встречается на позициях 19515, 19514 и 19513, далее в позиции 9773, 9772 и 9771.
В настройках read-by-line.spf указана длина:
Code: Select all
        1 TO LINE-NUMBER
        262144   \ максимальная длина строки (в символах)
        ALLOCATE THROW TO Lc

Вы можете у себя проверить, как работает моя задача?
User avatar
spronkin
 
Posts: 83
Joined: Sun, 15 Jan 2012, 13:56

Re: Read by line 2

Postby VoidVolker » Thu, 19 Jan 2017, 12:52

В старой версии есть два ограничения: первое - это длина строки в файле, а второе - поддержка только одного вида перевода строк (0x0D0A). При этом чтение строки осуществляется через WINAPI, при этом надо предварительно выделить для этого память. Поэтому и была создана вторая версия, когда файл целиком загружается в память и уже своим механизмом делится на строки, при чем в качестве делителя можно использовать что угодно. Использовать регулярные выражения для поиска и подсчета отдельного символа или простых последовательностей - довольно медленно, рекомендую использовать для этого обычный цикл.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2879
Joined: Tue, 25 Apr 2006, 17:56

Previous

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 6 guests

cron