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

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

Re: Плагин lists.spf [Обновление 14/09/2012 8:40]

Postby VoidVolker » Fri, 14 Sep 2012, 07:44

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

Re: Плагин lists.spf [Обновление 14/09/2012 8:40]

Postby Morituruz » Fri, 14 Sep 2012, 08:27

Спасибо, спасибо, спасибо! :mrgreen:
а у меня вот чего было:
Code: Select all

#( list_sorting
S" sort" add_task
NoActive
NoLog
SingleInstance
LIST: sortme
Action: { \ f i j m }
GetTickCount DUP 2DUP START-SEQUENCE
10 0 DO
   10 RANDOM sortme!
LOOP
\ ." list:" CR
\ sortme(
\   NODE@ . CR
\ )sortme
." sorting..." CR
\ GetTickCount
\ пузырьковая:
sortme# 2 - 0 DO
   1 TO f
   sortme# I - 1 - 0 DO
      I sortme#@ I 1 + sortme#@ >
      IF
         I sortme#@ I 1 + sortme#@
         I sortme#> sortme NODE>!
         I 1 + sortme#> sortme NODE>!
         0 TO f
      THEN
   LOOP
   f IF LEAVE THEN
LOOP

\ GetTickCount SWAP - . ." ms" CR
 sortme(
    NODE@ . CR
 )sortme
sortme LIST-FREE
)#

User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 14/09/2012 8:40]

Postby VoidVolker » Fri, 14 Sep 2012, 13:32

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

Re: Плагин lists.spf [Обновление 14/09/2012 8:40]

Postby Morituruz » Fri, 14 Sep 2012, 13:50

Ну вы же не подумали, что я вам показываю как надо :) Просто показал, как я мучался все эти годы.
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 14/09/2012 8:40]

Postby VoidVolker » Fri, 14 Sep 2012, 18:25

Moriturus wrote:Просто показал, как я мучался все эти годы.

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

Re: Плагин lists.spf [Обновление 14/09/2012 8:40]

Postby Morituruz » Fri, 14 Sep 2012, 20:59

VoidVolker wrote:
Moriturus wrote:Просто показал, как я мучался все эти годы.

Так ведь раньше надо было сказать.

Так ведь вот
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

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

Postby VoidVolker » Fri, 14 Sep 2012, 21:18

Таки помню =) Просто руки не доходили.

Ап! Добавлена поддержка чисел двойной длины:

DLIST: ( " name" -> ) Создать список для чисел двойной длины, имя списка берется из входного потока. Для заголовка списка выделяется память из кодофайла: список можно освободить, но нельзя уничтожить. Слово является VALUE-переменной. В задачах добавлять и читать значения из списка следует в разделе Action:, не раньше.

GLOBAL-DLIST: ( " name" -> ) Создать глобальный список для чисел двойной длины, имя списка берется из входного потока. Для заголовка списка выделяется память из кодофайла: список можно освободить, но нельзя уничтожить. Список доступен для всех потоков. Слово является VALUE-переменной. Добавлять и читать значения из глобального списка можно сразу же после его создания и из любого потока и любой задачи.

DLIST ( -- list ) Создать список для чисел двойной длины. Для заголовка списка выделяется память из хипа: такой список можно уничтожить.

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

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

Postby Morituruz » Fri, 14 Sep 2012, 21:23

Раз такое дело, то сделайте, пожалуйста, слово для вычисления медианы:
http://ru.wikipedia.org/wiki/Медиана_(статистика)
Сортировка ведь уже есть :)
Я когда-то о ней тоже спрашивал.
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

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

Postby VoidVolker » Fri, 14 Sep 2012, 21:50

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

Re: Плагин lists.spf [Обновление 14/09/2012 23:43]

Postby VoidVolker » Fri, 14 Sep 2012, 22:46

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

Re: Плагин lists.spf [Обновление 14/09/2012 23:43]

Postby Morituruz » Fri, 14 Sep 2012, 22:54

Обновил плагин (была версия до сегодняшних событий)
14 Sep 23:54:04 3616 add_clipboard_to_list: Внутренняя ошибка. Семафор установлен и не может быть закрыт.

Речь про это:
viewtopic.php?f=5&t=11597
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 14/09/2012 23:43]

Postby VoidVolker » Sat, 15 Sep 2012, 00:00

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

Re: Плагин lists.spf [Обновление 25/09/2012 20:28]

Postby VoidVolker » Tue, 25 Sep 2012, 19:32

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

Re: Плагин lists.spf [Обновление 25/09/2012 20:28]

Postby Morituruz » Tue, 25 Sep 2012, 19:55

Спасибо, вроде работает :)
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

Re: Плагин lists.spf [Обновление 25/09/2012 20:28]

Postby Morituruz » Wed, 26 Sep 2012, 10:39

Нет, не всё работает:
Code: Select all
#( CLASSIC-TASK-#-get_ftp_link
\ 11:11 27.07.2012
WatchHotKey: "@^f"
SingleInstance
NoLog

0 VALUE zclip
2048 ALLOCATE THROW TO zclip
CREATE filename 256 ALLOT
CREATE lan_ftp_link 256 ALLOT
CREATE wan1_ftp_link 256 ALLOT
CREATE ftp_folder 256 ALLOT
CREATE 7zfolder 256 ALLOT
CREATE 7zlist 256 ALLOT
STRING-LIST: files

: translit+ LOWER-CASE translit S"  " S" _" StringReplace S" @" S" _" StringReplace S" '" S" " StringReplace ;

Action:
S" e:\ftp\files\tmp\" ftp_folder PLACE \ папка фтп
300 PAUSE
SEND-KEYS: "@{F11}"
PAUSE: 300
CRLF CLIPBOARD CRLF S+ S+ zclip ZPLACE LAS-FREE
zclip ASCIIZ> S" /(\r\n)?#2.*(\r\n)?=/i" RE-ALL
   $0 files!
;RE-ALL

3 S" http" DROP
""
files(
   NODE@ ONLYNAME translit+ CRLF S+ S+
)files
" %CRLF%Да — просто так%CRLF%Нет — в zip" S+
DROP 0 MessageBoxA LAS-FREE
VK_LSHIFT KEY-PRESSED?
VK_RSHIFT KEY-PRESSED?
OR IF
   \ ссылка для локальной сети
   S" http://192.168.0.1/tmp/" lan_ftp_link PLACE \ url, добавляемое к файлу
   \ S" ftp://192.168.0.1/tmp/" lan_ftp_link PLACE \ url, добавляемое к файлу
ELSE
   \ ссылка на внешний IP
   S" http://x.x.x.x/tmp/" lan_ftp_link PLACE \ url, добавляемое к файлу
   \ S" ftp://x.x.x.x/tmp/" lan_ftp_link PLACE \ url, добавляемое к файлу
THEN
CASE
6 OF
   files(
      NODE@ ftp_folder COUNT NODE@ ONLYNAME translit+ S+ FCOPY LAS-FREE
      GetLastError
      IF
         MSG: "%NODE@%%crlf%FILE-CREATE error: %GetLastError%"
      ELSE
         lan_ftp_link COUNT NODE@ ONLYNAME translit+ S+ NODE! LAS-FREE
      THEN
   )files
   ""
   files(
      NODE@ CRLF S+ S+
   )files
   CLIPBOARD! LAS-FREE
   xRes 20 / 9 * yRes 20 / 9 * OSD-POS
   S" Verdana" yRes 20 / 0x00A000 OSD-FONT
   S" DONE" OSD
   500 PAUSE
   OSD-CLEAR
ENDOF
7 OF
   TEMP_FOLDER " %YY%%MM%%DD%%hh%%mm%%ss%_7z\" S+ 7zfolder PLACE
   DIR-DELETE: "%7zfolder COUNT%"
   GetLastError 18 =
   GetLastError 2 =
   OR
   IF
      7zfolder COUNT DIR-CREATE
      \ копируем файлы:
      files(
         FILE-COPY: "%NODE@%" "%7zfolder COUNT%"
         GetLastError
         IF
            MSG: "FILE-COPY error: %GetLastError%"
         ELSE
            7zfolder COUNT NODE@ ONLYNAME S+ NODE!
         THEN
      )files
      TEMP_FOLDER GetTickCount N>S S+ 7zlist PLACE
      files(
         FILE-APPEND: "%7zlist COUNT%" "%NODE@%%CRLF%"
      )files

      WIN-INPUT-TEXT: "http" "имя для архива:" "%0 files#@ ONLYNAME translit+ FILENAME2NAME&EXT 2DROP%" 0 0=
      IF
         translit+ filename PLACE
      ELSE
         GET-CUR-TIME
         " %YY%%MM%%DD%%hh%%mm%%ss%" filename PLACE
      THEN
      NormalPriority SWHide
      START-APPW: "c:\Program Files\7-Zip\7z.exe" -tzip a -r -scsWIN "%ftp_folder COUNT%%filename COUNT%.zip" @%7zlist COUNT%
      ExitCodeProc 0 <>
      IF
         MSG: "7z return error %ExitCodeProc%!"
      ELSE
         lan_ftp_link COUNT filename COUNT " .zip" S+ S+ CLIPBOARD! LAS-FREE
         DIR-DELETE: "%7zfolder COUNT%"
         FILE-DELETE: "%7zlist COUNT%"
         xRes 20 / 9 * yRes 20 / 9 * OSD-POS
         S" Verdana" yRes 20 / 0x008000 OSD-FONT
         S" DONE" OSD
         500 PAUSE
         OSD-CLEAR
      THEN
   ELSE
      16 S" Error" DROP " Cannot delete %7zfolder COUNT%" DROP 0 MessageBoxA DROP
   THEN
ENDOF
ENDCASE
files LIST-FREE
)#

При нажатии да (CASE 6 OF) выдаётся ошибка
11:32:54 11744 CLASSIC-TASK-#-get_ftp_link: Internal error. Параметр задан неверно. В консоли ничего про ошибки не выводится.
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests

cron