Плагин lists.spf [15/08/2013 21:40]

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

Re: Плагин lists.spf [Обновление 18/01/2012 17:56]

Postby Morituruz » Thu, 26 Jan 2012, 13:03

SphinxST wrote:-1073741819

до боли знакомый номер :(
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 18/01/2012 17:56]

Postby VoidVolker » Thu, 26 Jan 2012, 16:46

Список надо очищать, т.к. заголовок списка - статический и после отработки задачи в нем остаются адреса на узлы списка. При повторном вызове задачи эти адреса не перезаписываются. Т.е. можно делать вот так:
Code: Select all
uniSyncList[
      " Starting DropBox sync"
      " %DROPBOX_LOCAL%"
      " %PHONE_DIR_DESK%\Storage_Card\Dropbox"   ]uniSyncList
uniSyncList[
      " Starting Finance sync"
      " %PHONE_DIR_LOCAL%\Storage_Card\My Documents\Finance"
      " %PHONE_DIR_DESK%\Storage_Card\My Documents\Finance"   ]uniSyncList

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

Re: Плагин lists.spf [Обновление 18/01/2012 17:56]

Postby VoidVolker » Sun, 29 Jan 2012, 00:02

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

Re: Плагин lists.spf [Обновление 18/01/2012 17:56]

Postby SphinxST » Sun, 29 Jan 2012, 00:48

Да, спасибо. Поставил LIST-FREE на выходе из таска и все заработало.
SphinxST
 
Posts: 18
Joined: Thu, 17 Nov 2011, 12:27

Re: Плагин lists.spf [Обновление 18/01/2012 17:56]

Postby Morituruz » Sun, 29 Jan 2012, 16:35

У меня такой вопрос: если внутри бесконечного цикла в строковом списке будут удаляться и добавляться значения, т.е. без очистки LIST-FREE, то через определённое время он отъест всю доступную память?
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 18/01/2012 17:56]

Postby VoidVolker » Sun, 29 Jan 2012, 18:03

Нет. Список будет занимать ровно столько памяти, сколько требуется для хранения значений. LIST-FREE нужен только в конце задачи и для полной очистки списка. Если взглянуть на исходный код слова LIST-FREE, то можно заметить, что оно просто делает для каждого узла NDEL и очищает заголовок списка. Для строк память выделяется автоматически и так же автоматически освобождается.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [Обновление 18/01/2012 17:56]

Postby Morituruz » Mon, 30 Jan 2012, 19:18

Не получается удалить внутри списочного цикла значение из другого списка. Оба списка строковые.

Code: Select all
listik(
NODE@ drugoy_listik?
IF
      NODE@ drugoy_listik NODE-DEL
THEN
)listik

Значение там присутствует (инфа 146%), а без NODE-DEL не знаю как выкрутиться.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 30/01/2012 21:00]

Postby VoidVolker » Mon, 30 Jan 2012, 20:03

Ап! Исправлена ошибка в NODE-DEL , приводящая к невозможности сравнения строк при попытке удаления строки из строкового списка.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [Обновление 30/01/2012 21:00]

Postby Morituruz » Mon, 30 Jan 2012, 20:09

Спасибо!
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 30/01/2012 21:00]

Postby VoidVolker » Sun, 12 Feb 2012, 16:51

Хорошо, вот живой пример использования списков:
Code: Select all
STRING-LIST: alboms
STRING-LIST: alboms-path
STRING-LIST: cue-path
STRING-LIST: tracklist-path
STRING-LIST: tracks

2VARIABLE albom.cue

: gen-cue
  \ Получаем названия альбомов и пути к ним
  " E:\TORRENTS\some music\*" FOR-FILES
    FOUND-FILENAME alboms!
    FOUND-FULLPATH alboms-path!
  ;FOR-FILES
 
  \ ... полные пути к *.cue
  RECURSIVE TODEPTH
  " E:\TORRENTS\some music\*.cue" FOR-FILES
    FOUND-FULLPATH cue-path!
  ;FOR-FILES 
 
  \ ... и к треклистам
  RECURSIVE TODEPTH
  " E:\TORRENTS\some music\*tracklist.txt" FOR-FILES
    FOUND-FULLPATH tracklist-path!
  ;FOR-FILES
 
  \ Теперь обрабатываем каждый альбом
  BEGIN alboms@ NIP WHILE
    \ Инициализируем переменную пустой строкой - это будет новый плейлист
    "" albom.cue 2!

    \ Получаем имена треков  \ 01. Track name
    tracklist-path@ READ-BY-LINE
      FOUND-LINE " /(\d\d\.\s)(.*)/" RE-MATCH IF $2 tracks! THEN
    ;READ-BY-LINE
   
    \ Построчно обрабатываем плейлист
    cue-path@ READ-BY-LINE
      albom.cue 2@
      \ Автор
      FOUND-LINE " /^PERFORMER.*/" RE-MATCH
        IF " PERFORMER |qArtist name|q|n" ELSE
      \ Заголовок
      FOUND-LINE " /^TITLE.*/" RE-MATCH
        IF " TITLE |q%alboms@%|q|n" ELSE
      \ Имя трека
      FOUND-LINE " /(\s+)(TITLE.*)/" RE-MATCH
        IF " %$1%TITLE |q%tracks@>%|q|n" ELSE
      \ Удаляем автора из описания трека, т.к. уже указали для всего альбома
      FOUND-LINE " /(\s+)(PERFORMER.*)/" RE-MATCH
        IF "" ELSE
      \ Все остальные строки оставляем без изменений
      " %FOUND-LINE%|n"
      THEN THEN THEN THEN
      \ Добавляем к переменной
      S+ albom.cue 2!
    ;READ-BY-LINE
   
    \ Новый плейлист готов - теперь сохраняем его
    albom.cue 2@ " %alboms-path@%\%alboms@%.cue" FWRITE
   
    \ Переходим к следующему альбому
    alboms>
    alboms-path>
    tracklist-path>
    cue-path>
   
    \ Очищаем имена треков - ведь в каждом альбоме они разные
    tracks LIST-FREE
  REPEAT
 
  \ Очищаем все остальные списки
  alboms LIST-FREE
  alboms-path LIST-FREE
  cue-path LIST-FREE
  tracklist-path LIST-FREE
;

В целом алгоритм такой:
    создаем списки с путями к нужным файлам и их именами
    в каталоге каждого альбома построчно считываем cue sheet файл
    регэкспами выбираем определенные строки и меняем их, лишние строки выкидываем
    сохраняем новый cue sheet
Если что непонятно - спрашивайте.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [Обновление 30/01/2012 21:00]

Postby Morituruz » Mon, 26 Mar 2012, 08:33

Есть пожелание добавить сортировку списка (числового) по убыванию/возрастанию.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 30/01/2012 21:00]

Postby Morituruz » Fri, 15 Jun 2012, 13:25

Внутри спискового цикла индекс текущего элемента можно узнать только так?
Code: Select all
NODE LIST NODE>#
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 30/01/2012 21:00]

Postby VoidVolker » Fri, 15 Jun 2012, 18:20

Внутри цикла не ведется счет элементов - это сделано специально для ускорения работы библиотеки. Если нужно внутри цикла получить индекс текущего узла, то надо просто завести счетчик - это всего лишь одна переменная и несколько дополнительных операций по увеличению значения переменной. А NODE># тупо проходит по всем узлам списка: это можно увидеть в его исходном коде.
Code: Select all
VARIABLE counter

Code: Select all
...
LIST(
  ...
  ." Номер текущего узла: " counter @ . CR
  ...
  counter 1+!
)LIST
...
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [Обновление 13/09/2012 22:27]

Postby VoidVolker » Thu, 13 Sep 2012, 21:40

Ап! Добавлена сортировка.
LIST-SORT ( list -- ) Сортировка списка list от меньшего к большему по методу быстрой сортировки
LIST-RSORT ( lis -- ) Сортировка списка list от большего к меньшему по методу быстрой сортировки
Работает пока только с числами.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [Обновление 13/09/2012 1:37]

Postby VoidVolker » Fri, 14 Sep 2012, 00:40

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

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Google [Bot] and 2 guests