Скрипты для Demagog
|
|
flegont | Дата: Среда, 21.07.2021, 17:05 | Сообщение #1 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| Начало темы здесь (ссылка на архивную копию форума mytts.info)
(6.6 Mb) архивная копия начала текущей ветки с форума mytts.info - для офлайн просмотра и поиска по всем страницам
|
|
| |
wasyaka | Дата: Воскресенье, 02.01.2022, 19:07 | Сообщение #16 |
Группа: Модераторы
Сообщений: 35
Статус: Offline
| Цитата wasyaka ( ) А одним кликом? решил: PSPad editor - в два клика но в одном окне
|
|
| |
tonio_k | Дата: Понедельник, 21.02.2022, 02:24 | Сообщение #17 |
Группа: Пользователи
Сообщений: 162
Статус: Offline
| На основе функции table.unique(a) - "сортировать таблицу без дубликатов" сделал вариант функции table.duplicates(a) "сортировать таблицу только дубликаты" - добавил одну строчку
Пример работы функции в окне Демагога:
Код --Функция сортировать таблицу только дубликаты function table.duplicates(a) local q, t = {}, {} for i = 1, #a do if not q[a[i]] then q[a] = true else t[#t+1] = a end end return t end
--Пример применения функции: s = { 'саша', 'мама', 'мама', 'дядя', 'папа', 'папа', 'папа', 'куку', 'куку', 'куку', 'куку', } s = table.duplicates(s)-- сортировка вывести только дубликаты s = table.concat(s, '\r')--в текст print(s)[/i]
Если можно, то добавьте эту функцию в калькулятор (поправьте где нужно)
Сообщение отредактировал tonio_k - Понедельник, 21.02.2022, 02:28 |
|
| |
flegont | Дата: Понедельник, 21.02.2022, 10:27 | Сообщение #18 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| Интересная идея. Но эта функция "съедает" первый дубликат из каждого найденного. Надо подумать, можно ли как-то это поправить
|
|
| |
tonio_k | Дата: Понедельник, 21.02.2022, 10:31 | Сообщение #19 |
Группа: Пользователи
Сообщений: 162
Статус: Offline
| Я всегда думал, что сортировка "только дубликаты" так и работает: оригиналы удаляются, и только дубли остаются.
|
|
| |
flegont | Дата: Понедельник, 21.02.2022, 10:47 | Сообщение #20 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| Хм.... действительно Ну, тогда функция уже готова - я в ней чисто редакционные правки сделал. Можно в следующей версии включить ее.
|
|
| |
tonio_k | Дата: Понедельник, 21.02.2022, 10:53 | Сообщение #21 |
Группа: Пользователи
Сообщений: 162
Статус: Offline
| Цитата tonio_k ( ) Надо подумать, можно ли как-то это поправить
Вот такой вариант:
Код function table.duplicates(a) local q, t, d = {}, {}, {} for i0 = 1, #a do if not q[a[i0]] then q[a[i0]] = true else if not d[a[i0]] then d[a[i0]] = true t[#t+1] = a[i0] t[#t+1] = a[i0] else t[#t+1] = a[i0] end end end return t end
|
|
| |
flegont | Дата: Понедельник, 21.02.2022, 11:06 | Сообщение #22 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| Понятно, но, думаю, первый вариант (как вы уже объяснили) логичнее. Я проверил, в Демагоге "Правка - Текст - Сортировка - Только дубликаты" так и работает - удаляя оригинал и оставляя только повторяющиеся элементы
|
|
| |
tonio_k | Дата: Понедельник, 21.02.2022, 11:19 | Сообщение #23 |
Группа: Пользователи
Сообщений: 162
Статус: Offline
| Хорошо что вы обратили внимание на факт удаления оригинальных строк. При работе с большим корпусом слов, в некоторых случаях, требуется сделать подсчет строк. При этом, уникальные строки занимают львиную долю в корпусе. И вот тут удаление уникальных строк при помощи функции "сортировка только дубликаты" и пригодится. Но если эта функция, в том числе, будет удалять оригинальные строки, то это даёт [-1] к каждому результату подсчёта, что не радует. Поэтому, может функцию "только дубликаты" сделать "модальной": по умолчанию оставляет только дубликаты, а если true, то оставляет только дубликаты + оригинальные строки
|
|
| |
flegont | Дата: Понедельник, 21.02.2022, 11:29 | Сообщение #24 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| Да, можно и так.
|
|
| |
tonio_k | Дата: Вторник, 01.03.2022, 00:10 | Сообщение #25 |
Группа: Пользователи
Сообщений: 162
Статус: Offline
| Нужна помощь. При работе с помощью скрипта с файлами из разных источников, столкнулся с проблемой, когда в имени файла присутствует символ UTF8, которого нет в ANSI. В результате, когда через функцию f=OpenDialog(true) получаю список файлов, то символы utf8 заменяется на "?". Теперь получается у меня список с путями на не существующие файлы. Поэтому вопрос, может подскажете, что с этой проблемой можно сделать? Было бы здорово сделать скрипт, который будет уметь пакетно переименовать файлы так, что бы вместо UTF8 символов подставлялся другой символ '\149'.
|
|
| |
flegont | Дата: Вторник, 01.03.2022, 09:48 | Сообщение #26 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| Да, есть такая проблема Подумаю, что можно сделать
|
|
| |
flegont | Дата: Пятница, 04.03.2022, 10:51 | Сообщение #27 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| ОТЧЕТ О ПРОИСХОДЯЩЕМ
1) Юникодные символы в именах файлов при преобразовании их в кодировку ANSI могут превратиться не только в знак вопроса. Знак ? появляется, если юникодному символу не находится никакого соответствия в АNSI. В остальных случаях может произойти всё, что угодно. Знак "сердечко" становится вертикальной линией. Латинская буква с надстрочным знаком - просто теряет надстрочный знак. И т.д. и т.п. В итоге получаются имена файлов, не соответствующие реальным, и непонятно, какие символы (см. выше) изменились, но остались латинскими. Т.о. вариант с переименованием становится довольно сложным.
Получаем список имен файлов. Предполагаем, что имена - искажены. В каждом таком имени ищем символы с кодами > 127 и заменяем каждый такой символ на что-нибудь приличное, например, на знак подчеркивания. Проверяем, нет ли уже в списке произведенных замен такого имени. Если есть, то добавляем еще один знак подчеркивания.
Кроме того, среди символов с кодами > 127 надо различать символы, коды которых соответствуют русским буквам - чтобы оставлять их как они есть.
В результате, среди переименованных файлов м.б. много файлов с плохо различимыми именами. Например, любой файл с японским названием, после переименования будет состоять лишь из символов подчеркивания (и возможно, пробелов)
2) Есть другой путь. Можно в функциях WName() и AllFiles() добавить параметр utf8, по умолчанию false. Если он true, то имя файла возвращается, как строка utf8 без BOM. Такое имя нельзя будет адекватно напечатать в окно 0 командой print() или показать функциями ShowMessage() и StatusMessage(). И файл с таким именем не откроется штатными средствами Lua. Потому что Windows должна получить его имя в кодировке не utf8, а в Unicode. Впрочем, это всё - разрешимые проблемы. Например, функция WOpen(i, fname, utf8) с дополнительным параметром utf8, смогла бы открыть такой файл. Аналогично можно было бы усовершенствовать print(), ShowMessage() и StatusMessage().
Тут надо экспериментировать. Будущее покажет.
|
|
| |
tonio_k | Дата: Пятница, 04.03.2022, 11:34 | Сообщение #28 |
Группа: Пользователи
Сообщений: 162
Статус: Offline
| Была мысль искать в сторону батника, powershell или скрипта питона(демагог, вроде, стал поддлерживать запуск скриптов питона) и уже на них возложить переименование. Но ваше направление п2) выглядит более правильным. Вопрос, можно ли при этом будет из полученого названия файла в utf8 отделить путь, имя, расширение для дальнейшей работы с ними в скрипте?
|
|
| |
flegont | Дата: Пятница, 04.03.2022, 12:13 | Сообщение #29 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| По идее, да. Обратные слэши - разделители, в utf8-имени файла никуда не денутся. Так что всё должно работать.
|
|
| |
flegont | Дата: Пятница, 04.03.2022, 12:27 | Сообщение #30 |
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
| P.S. Подтверждаю: скрипты на python в Демагоге работают. Путем вызова их из скрипта на Lua Я вот думаю: не сделать ли так, чтобы Демагог выполнял их напрямую, минуя Lua? Чтобы, если в меню "Выполнить скрипт" выбран файл с расширением .py или .pyw, то Демагог выполнил бы такой скрипт, обратившись к установленому на компьютере интерпретатору python. Естественно, что в Настройках должен быть указан путь к интерпретатору python. Если нет, то Демагог должен будет выдать меню поиска папки с интерпретатором.
|
|
| |