Ну... Тогда будет иметь смысл все имеющиеся интерпретаторы подогнать под питон. Будет повод изучить язык и прелесть и его возможностей. Говорят, скрипт lua немного похоже на скрипты питон.
Python - громоздкий - занимает на компе ~ 30-35 мб. И медленный. Зато у него уйма сторонних библиотек, написанных на Си, оттого быстрых. Любую из них легко присоединить к уже установленному на компе python. Например, библиотеку математических вычислений numpy. При включенном Интернете один раз ввести с консоли команду: pip install numpy. Или библиотеку графики для создания удобного интерфейса в питон-скрипте, с кнопками, менюшками, окошками и т.п.: pip install wxPython С каждым такой инсталляцией, размер папки с питоном на компе - растет. Эдакий получается комбайн, в соответствии с нуждами конкретного пользователя.
Возможность для Демагога выполнять питон-скрипты - это чтобы не изобретать свои велосипеды, а ездить на чужих Если на питоне решена какая-то важная задача, то нет смысла заново всё это переписывать на Lua (поправка: на самом деле, иногда есть).
Общие принципы - одинаковые с любым языком программирования высокого уровня. К синтаксису легко привыкнуть. За одним исключением.
Гвидо ван Россум, создатель python, решил научить программистов аккуратно писать программы. Поэтому для операторов do и if в питоне НЕТ завершающего оператора end !!! Как же отличить, где кончается, например, цикл?! А по количеству отступов в операторах, следующих за оператором цикла. ВСЁ, ЧТО ИМЕЕТ ОДИНАКОВОЕ КОЛИЧЕСТВО ОТСТУПОВ - ОТНОСИТСЯ К ЦИКЛУ Не забудьте после цикла вернуть величину отступа к той, что была до цикла. Вся программа становится похожей на стихи Маяковского - сплошные лесенки Упаси боже, дрогнет палец и добавится лишний пробел - эту "ошибку" в работе программы хрен сразу найдешь. По-моему, такое включение "пустых" символов ПРОБЕЛА / ТАБУЛЯЦИИ в логику(!) программы - сомнительная фишка. Но фанаты питона ею очень гордятся.
В остальном - язык годный, писать программы достаточно легко.
Дата: Понедельник, 28.03.2022, 10:31 | Сообщение #33
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитатаwasyaka ()
Пошёл другим путём, получилось даже удобней
Возможно, вам покажется удобным скрипт по генерации правил DIC (я сам его активно использую для разовых операций) В окно1 вставляем строки, которые будут в левой части правила те же строки вставляем в окно2 - это будут строки правой части правил В окне2 делаем нужные нам изменения (меняем регистр/применяем словари/делаем замены) Далее запускаем скрипт:
Код
n1=WActive() n2=n1+1 a = Input('УКАЖИТЕ НОМЕРА ДВУХ ОКОН ДЛЯ СКЛЕЙКИ В ПРАВИЛО',{'ЛЕВАЯ ЧАСТЬ ПРАВИЛА. ОКНО №'..'='..n1,'ПРАВАЯ ЧАСТЬ ПРАВИЛА. ОКНО №'..'='..n2};) if a == nil then goto HALT end a[1] = tonumber(a[1]) a[2] = tonumber(a[2]) w0=WText(a[1]) w1=WText(a[2]) w0= string.split(w0,'\r\n') w1= string.split(w1,'\r\n') for k=1, #w0 do w0[k]=w0[k]..'='..w1 [k]end w0=table.concat(w0, '\r') WNew(0,w0) WActive(0) ::HALT::
Вводим номера окон и на выходе получаем готовый словарь DIC в котором левая часть правил берется из окна1, а правая - из окна2
Цитатаwasyaka ()
@([А-Я]+)\=([А-я]+)?(Г)=$1\=$2гэ@([А-Я]+)\=([А-я]+)?(Д)=$1\=$2дэ И т.д. и несколько раз (в случае повторений букв)
Если взять на вооружение скрипт, который я вам предлагаю, то для решения вашей задачи можно сделать словарь DIC
Для словарей *.rex, которые применяются в сборках от tonio_k и используют "ИНДЕКСНЫЙ МЕТОД" Признаки такого словаря:
- словарь в названии содержит слово index Например: 20_REX_Замены от waska(index).rex
- правила внутри словаря rex разбиты по ключевым словам, которые начинаются с решетки. Например: ###адреса
Скрипт сортирует правила по ключевым словам (с привязным к ним правилам). Последовательность правил в пределах ключевого слова не меняется. Если будет обнаружен дубликат в ключевых словах, то сортировка прерывается с выводом дубликатов, пока не будет исправлена ситуация с дублированием ключевых слов. В окне Демагога открываем словарь. Копируем его содержимое в соседнее окно и применяем скрипт.
Дата: Понедельник, 06.02.2023, 22:08 | Сообщение #36
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Это из темыPicobook TTS Offline - Страница 9 - MyTTS (форум) (ucoz.net) Касательно реализации Быстрого алгоритма словарных замен на python. Да, сие работает, но подтверждено на практике мнение о медлительности питона. Как только дело дошло до обработки правил, содержащих более одного слова, а так же для режимов учета/не учета регистра при заменах, так сразу производительность просела на порядок. В общем, вот...
# Текст "Release-that-Witch_Освободите-эту-Ведьму.txt" измененный по "95.NEW_Орфоэпия(phoneme).dic (0:01:12) ReleasethatWitch, освобод+Ите эту в+Едьму ф+Айл был сгенерирован про+Ектом ранобехаб орг.Не для комерческого исп+Ользования, Том 1глав+А 1. С сег+Одняшнего дня я насл+Едный принц.,Ченг Ян поч+Увствовал, что ктото зв+Ал его. в+Аше выс+Очество, прош+У, пр+Оснитесь… Он отверн+Улся, но голоса, кот+Орые он сл+Ышал, не исч+Езли. на с+Амом д+Еле они, наобор+От, ст+Али д+Аже гр+Омче. зат+Ем он поч+Увствовал, что ктото остор+Ожно д+Ёргает его за рук+Ав. в+Аше выс+Очество, мой насл+Едный пр+Инц! Ченг Ян р+Езко откр+Ыл глаза. хорош+О знак+Омая ему обстан+Овка исч+Езла, раб+Очего стола нигд+Е не б+Ыло, и прив+Ычные перегор+Одки, спл+Ошь ус+Еянные почт+Овыми адресами пропали.
Результат Демагога для этого объемистого теста: 0:00:18
В питон-скрипте удалось реализовать все фишки Быстрого алгоритма, включая отдельно стоЯщие звездочки. Типа все * *ло=всё ло А так же спецсимвол $ учета регистра: $СССР=Советский Союз Тестировалось также на сумасшедшем словаре Michelangelo.dic, результат замен полностью совпал с выданным Демагогом. Кроме цифр времени выполнения
1. D:\0 - Unicode\Demagog-U64\~proba-obrazec~.txt2. D:\0 - Unicode\Demagog-U64\~proba1~.txt ~ 100% ≠ 3 = 1402014 0:00:00 # Текст "Benedict_Lee_1_Thunderstorm_over_the_World.txt" измененный по "Michelangelo.dic" (0:00:18)¶Мир – та<к называют потомки землян ставшую их новой ро<диной планету и её единственный, раскинувшийся от полюса< до полюса< материк, к кат<о<рому кр # Текст "Benedict_Lee_1_Thunderstorm_over_the_World.txt" измененный по "Michelangelo.dic"(0:01:03)¶Мир – та<к называют потомки землян ставшую их новой ро<диной планету и её единственный, раскинувшийся от полюса< до полюса< материк, к кат<о<рому кр
Интересно совпало: объемистый тест на 2.9 млн простых правил, в основном слово=замена, с небольшим включением правил для словосочетаний; и словарь Michelangelo.dic на 37 тыс. диковинных правил, половина из которых - правила со звездочками. Время выполнения - обоих тестов практически одинаковое, только Демагог выигрывает в скорости больше, чем в 3 раза.
P.S. Что-то ни спойлеры не работают, ни картинки не вставляются... Ну да бог с ними...
Подскажите, а Демагог (64 бит) "из коробки" умеет через скрипт для питона посчитать хеш сумму файла? Вот такой черновик в интернете нашёл:
Код
import hashlib def get_hash_md5(filename): with open(filename, 'rb') as f: m = hashlib.md5() while True: data = f.read(8192) if not data: break m.update(data) return m.hexdigest()
Взял отсюда: https://badeud.ru/post/2/ Если Демагог умеет, то можно сделать пример что бы можно было через диалог выбрать файлы и результат вывел в структуре как выводится в Тотал Командере в виде тестовых строк:
heshsum_md1*filename1 heshsum_md2*filename2
(Хешсумма, разделитель звёздочка, имя файла)
с сохранением результата в файл
Сообщение отредактировал tonio_k - Вторник, 28.11.2023, 17:06
А мне хотелось, что бы, например, можно было хеш получить у видео файла в 2Гб. Т.е. тут нужен не текстовый подход. Вот тут пример ещё нашёл. В самом конце статьи говорят, что код подходит для получения хеша у видео файла.
Вот где я ошибся с вашим примером - каждый раз забываю записывать обратный слэш на питоновский манер \\ С одинарным обратным слэшем имя файла воспринимается как ошибочная строка.
# hash-test def get_hash_md5(filename): with open(filename, 'rb') as f: m = hashlib.md5() while True: data = f.read(8192) if not data: break m.update(data) return m.hexdigest()
# Test
fn = 'd:\\0 - Unicode\\Demagog-A64\\ЖИЗНЬ.txt' x = get_hash_md5(fn) print(fn,x)
import hashlib from profiles.mygui import OpenDialog from profiles.myfunc import StrSave
def get_hash_md5(filename): with open(filename, 'rb') as f: m = hashlib.md5() while True: data = f.read(8192) if not data: break m.update(data) return m.hexdigest()
# Test
a = OpenDialog(True)
s = '' for i in range(len(a)): s += a+'*'+get_hash_md5(a)+'\r\n'
P.S. Форум, к сожалению, съедает всё, что в квадратных скобках. В предпоследней строчке должно быть не просто s += a ... s += а квар.скобку открыть i квадр.скобку закрыть ...