Скрипты для Demagog
Модератор: flegont
- tonio_k
- V.I.P.
-
Скрипты для Demagog
тогда рассмотрите такое пожелание:
дать возможность через скрипт в это поле выводить текстовую информацию на время работы скрипта. Сейчас, Пока работает скрипт, все равно "при наведении на них мышью." - не работает, а так, можно будет как прогресс-статус работы скрипта свой в это поле выводить - без всяких текстовых сообщений поверх экрана. " Скромный минимализм"

- flegont
- V.I.P.
-
Скрипты для Demagog
Я подобные опыты уже делал. Именно для какого-нибудь отображения прогресса. Например, последовательное печатание процента выполнения. Не работает, и я пока не понял, почему.
- tonio_k
- V.I.P.
-
Скрипты для Demagog
Подскажите, как можно решить такую задачу.
Нужно вставить абзац \r между двумя строками если выполнены любое из 2 условий:
1) длина сравниваемых строк отличается
2) последние 5 символов сравниваемых строк отличаются
Пример текста:
Нужно вставить абзац \r между двумя строками если выполнены любое из 2 условий:
1) длина сравниваемых строк отличается
2) последние 5 символов сравниваемых строк отличаются
Пример текста:
► Показать
- flegont
- V.I.P.
-
Скрипты для Demagog
Код: Выделить всё
s = WText(1) -- в окне 1 содержится тестовый текст
a = string.split(s,'\r')
for i = 1,#a-1 do
if (#a[i] ~= #a[i+1]) or (string.sub(a[i],-5) ~= string.sub(a[i+1],-5)) then
a[i] = a[i]..'\r'
end
end
s = table.concat(a,'\r')
print(s)
► Показать
- balaamster
- Обыватель
-
Скрипты для Demagog
Изменён скрипт YaTTS.lua - при "склейке" аудиофрагментов именование файлов теперь имеет вид "имя файла книги_nnnn.mp3", где nnnn - порядковый номер. Если была запущена озвучка несохранённой вкладки, то именование имеет вид "tmp_doc_nnnn.mp3"
Внесены небольшие "косметические" правки в окно "YaTTS Configurator"
- tonio_k
- V.I.P.
-
Скрипты для Demagog
Код: Выделить всё
local function TextSortAndDelDubl(dubltext)
local r = string.split(dubltext,'\r') -- преобразовываем текст в ТАБЛИЦУ
r = table.sortuniq(r) -- сортируем и удаляем дубликаты в ТАБЛИЦЕ
r = table.concat(r,'\r') -- преобразовываем ТАБЛИЦУ в текст
return r
end
s=WText(1) -- применить к окну 1
s=TextSortAndDelDubl(s) -- удаляем дубликаты
print(s)
- А ты включай нас в свои гениальные планы, - посоветовал Денис, - и все будет путём. Ты посмотри, какая команда у тебя подобралась! Один Алекс чего стоит. Шесть медведей навскидку, и ни одна свинья даже хрюкнуть не успела. Всех наповал! Алекс, скажи честно, как тебе это удаётся?
- А ты включай нас в свои гениальные планы, - посоветовал Денис, - и всё будет путём. Ты посмотри, какая команда у тебя подобралась! Один Алекс чего стоит. Шесть медведей навскидку, и ни одна свинья даже хрюкнуть не успела. Всех наповал! Алекс, скажи честно, как тебе это удаётся?
Вопрос, почему сортировка меняет местами эти 2 строки? между строками разница только в символе Ё - а он идет после Е
- flegont
- V.I.P.
-
Скрипты для Demagog
Это в русском алфавите Ё идет после Е. А в юникоде это не так. Можно написать в окне Демагога русский алфавит, и ставя текстовый курсор перед очередной буквой, смотреть их коды в строке состояния. На Ё будет выпадение из возрастающей последовательности. Код Ё меньше кода Е, вот строки и меняются местами при сортировке.
- tonio_k
- V.I.P.
-
Скрипты для Demagog
сначала было рванулся прямо в функции замену "е" рус. на "е" лат. сделать, с возвратом обратно после отработки функции, но сообразил, что это чревато ситуацией когда начало строки с буквы "е" начинается. Такая замена эту строку выше строк начинающихся с русской буквы "а" может переместить
. Мда... это исключение с Ё надо как то запомнить 


- lplee
- Обыватель
-
Скрипты для Demagog
Работает ли Демагог с новой версией Яндекс ТТС, где нужно вводить не ключ разработчика, а токен?
- balaamster
- Обыватель
-
Скрипты для Demagog
На текущий момент связка "Demagog + Яндекс TTS-скрипты" работает только со "старой" версией сервиса, где используется ключ разработчика.
Адаптации под "новую" версию сервиса, с токеном, обещать не могу, но, если появится большое количество свободного времени, то посмотрю, как можно адаптировать скрипты под него.
- tonio_k
- V.I.P.
-
Скрипты для Demagog
подскажите, можно ли через скрипт сделать:
Содержимое буфера обмена в переменную s
s="изменен_"..s
измененную Переменную s поместить в буфер обмена
В итоге что бы можно было скопировать текст в любом источнике (Ctrl+C),
открыть окно Демагога и запустить выше указанный скрипт,
Вернуться в источник и вставить из буфера обмена измененный скриптом текст (Ctrl+V).
Содержимое буфера обмена в переменную s
s="изменен_"..s
измененную Переменную s поместить в буфер обмена
В итоге что бы можно было скопировать текст в любом источнике (Ctrl+C),
открыть окно Демагога и запустить выше указанный скрипт,
Вернуться в источник и вставить из буфера обмена измененный скриптом текст (Ctrl+V).
- balaamster
- Обыватель
-
Скрипты для Demagog
Можно:
Код: Выделить всё
--буфер в переменную
s = Clipboard()
--изменяем s
s = "изменён_"..s
--переменную в буфер
Clipboard(s)
- tonio_k
- V.I.P.
-
Скрипты для Demagog
пожелание к доработке: склеивание аудио файлов что бы происходило в одном окне (без мелькания открывания и закрывания окон к каждому файлу) Может это можно сделать через применение консольной команды к предварительно созданному созданному плейлисту?
- tonio_k
- V.I.P.
-
Скрипты для Demagog
Version 7.30.377
Я два дня ломал голову, почему у меня сломались раньше нормально работающие скрипты - словари с фонемами стали некорректно работать (вставлять со знаки вопроса в кодировке). Вроде нигде по ходу скрипта текст в переменную не переносил и словари применяются к окну а не к переменной... Оказалось, что я в настройках самого Демагога (Файл кодировка) как то раз изменил кодировку сохранения на ANSI а вернуть на UTF8 - благополучно забыл. А WSave() сохраняет именно так, как в настройках указано.
Что бы избежать подобных ситуаций и расширить возможности сохранения в файл через WSave() пожелание к функции Settings(o) - добавить возможность менять кодировку сохранения файла.
Я два дня ломал голову, почему у меня сломались раньше нормально работающие скрипты - словари с фонемами стали некорректно работать (вставлять со знаки вопроса в кодировке). Вроде нигде по ходу скрипта текст в переменную не переносил и словари применяются к окну а не к переменной... Оказалось, что я в настройках самого Демагога (Файл кодировка) как то раз изменил кодировку сохранения на ANSI а вернуть на UTF8 - благополучно забыл. А WSave() сохраняет именно так, как в настройках указано.
Что бы избежать подобных ситуаций и расширить возможности сохранения в файл через WSave() пожелание к функции Settings(o) - добавить возможность менять кодировку сохранения файла.
- tonio_k
- V.I.P.
-
Скрипты для Demagog
Код: Выделить всё
tom = 1 -- начальная нумерация тома
tom = Input('АВТОМАТИЧЕСКАЯ НУМЕРАЦИЯ',{'Начать нумерацию с цифры:'..'='..tom})
tom = tom[1]
print(tom+1)
Математически верно, но вот в плане озвучки звучит как "два точка ноль"
Если переменную tom округлить:
Код: Выделить всё
tom = math.floor(tom[1]) -- округление до целого числа
результат 2 - то есть как надо без ноля.
Вопрос, это особенность lua или функции Input() ?
- flegont
- V.I.P.
-
Скрипты для Demagog
Это особенность и Lua и функции Input() - возвращающей все введенные данные, как строки, Здесь строка (string), изображающая число, автоматически преобразуется в число (number) при сложении с 1.
Результат:
string
1
2.0
ВОТ, КАК ПРАВИЛЬНО:
Результат:
number
1
2
Код: Выделить всё
tom = 1 -- начальная нумерация тома
tom = Input('АВТОМАТИЧЕСКАЯ НУМЕРАЦИЯ',{'Начать нумерацию с цифры:'..'='..tom})
tom = tom[1]
print(type(tom)) -- увидим, что тип введенного значения - строка!
print(tom) -- печать строки tom
print(tom+1) -- автоматическое преобразование результата в число и печать
Результат:
string
1
2.0
ВОТ, КАК ПРАВИЛЬНО:
Код: Выделить всё
tom = 1 -- начальная нумерация тома
tom = Input('АВТОМАТИЧЕСКАЯ НУМЕРАЦИЯ',{'Начать нумерацию с цифры:'..'='..tom})
tom = tonumber(tom[1]) -- номер тома - число!
print(type(tom))
print(tom)
print(tom+1)
number
1
2
- tonio_k
- V.I.P.
-
Скрипты для Demagog
так как любая ошибка в lua (в скрипте или в функции) останавливает выполнение скрипта - решил взять эту особенность на вооружение:
Код: Выделить всё
--ФУНКЦИИ:
function CancelScript()
local txt_cancel = 'ПОЛЬЗОВАТЕЛЬ ВРУЧНУЮ ПРЕРВАЛ РАБОТУ СКРИПТА!'
if Cancel() then
Gauge(0) -- убираем зеленую полосу прогресса
StatusMessage(txt_cancel)
error('\r\r\r'..AnsiToUtf8(txt_cancel,true)..'\r\r',0)
end
end
function AnsiToUtf8(s,hasbom)
local q = {}
local bom = '\239\187\191'
local u, a, b, k
-- russian unicode table
q['А'] = 1040
q['Б'] = 1041
q['В'] = 1042
q['Г'] = 1043
q['Д'] = 1044
q['Е'] = 1045
q['Ж'] = 1046
q['З'] = 1047
q['И'] = 1048
q['Й'] = 1049
q['К'] = 1050
q['Л'] = 1051
q['М'] = 1052
q['Н'] = 1053
q['О'] = 1054
q['П'] = 1055
q['Р'] = 1056
q['С'] = 1057
q['Т'] = 1058
q['У'] = 1059
q['Ф'] = 1060
q['Х'] = 1061
q['Ц'] = 1062
q['Ч'] = 1063
q['Ш'] = 1064
q['Щ'] = 1065
q['Ъ'] = 1066
q['Ы'] = 1067
q['Ь'] = 1068
q['Э'] = 1069
q['Ю'] = 1070
q['Я'] = 1071
q['Ё'] = 1025
--
q['а'] = 1072
q['б'] = 1073
q['в'] = 1074
q['г'] = 1075
q['д'] = 1076
q['е'] = 1077
q['ж'] = 1078
q['з'] = 1079
q['и'] = 1080
q['й'] = 1081
q['к'] = 1082
q['л'] = 1083
q['м'] = 1084
q['н'] = 1085
q['о'] = 1086
q['п'] = 1087
q['р'] = 1088
q['с'] = 1089
q['т'] = 1090
q['у'] = 1091
q['ф'] = 1092
q['х'] = 1093
q['ц'] = 1094
q['ч'] = 1095
q['ш'] = 1096
q['щ'] = 1097
q['ъ'] = 1098
q['ы'] = 1099
q['ь'] = 1100
q['э'] = 1101
q['ю'] = 1102
q['я'] = 1103
q['ё'] = 1105
--
u = ''
for i = 1,#s do
b = string.sub(s,i,i)
if string.byte(b) < 128 then
u = u..b
else
k = q[b]
if k == nil then a = '?' else a = utf8.char(k) end
u = u..a
end
end
if hasbom then u = bom..u end
return u
end
Код: Выделить всё
-- ПРИМЕР
for i = 1,1000000000 do
a = i
CancelScript()
end
::HALT::
ShowMessage(a)
► Показать
*функция function AnsiToUtf8 - применяется для корректного отображения русских букв в информационном сообщении об ошибке lua
- flegont
- V.I.P.
-
Скрипты для Demagog
Русско-английский вариант:
Код: Выделить всё
-- Cancel script when user pressed global hotkey Break
function CancelScript()
local msg, umsg
if CurrentLang() == 'Russian' then
msg = 'СКРИПТ ПРЕРВАН ПОЛЬЗОВАТЕЛЕМ!'
umsg = AnsiToUtf8(msg,true)
else
msg = 'SCRIPT TERMINATED BY USER!'
umsg = msg
end
if Cancel() then
Gauge(0) -- remove progress bar (if was activated)
StatusMessage(msg)
error(umsg..'\r\r',0)
end
end
- flegont
- V.I.P.
-
Скрипты для Demagog
У приведенной выше функции AnsiToUtf8() есть серьезный недостаток. Если в тексте встретятся символы с кодами > 127 и < 256, но не являющиеся русскими буквами, то при конвертации они превратятся в знак вопроса "?"
Вот полная конвертация AnsiToUtf8() и Utf8ToAnsi() для cp1251.
(будет добавлена в calculator.lua в вер. 378)
Вот полная конвертация AnsiToUtf8() и Utf8ToAnsi() для cp1251.
(будет добавлена в calculator.lua в вер. 378)
Код: Выделить всё
-- Full convert ANSI <---> UTF-8 for cp1251 code page --
local ansi_decode={
[128]='\208\130',[129]='\208\131',[130]='\226\128\154',[131]='\209\147',[132]='\226\128\158',[133]='\226\128\166',
[134]='\226\128\160',[135]='\226\128\161',[136]='\226\130\172',[137]='\226\128\176',[138]='\208\137',[139]='\226\128\185',
[140]='\208\138',[141]='\208\140',[142]='\208\139',[143]='\208\143',[144]='\209\146',[145]='\226\128\152',
[146]='\226\128\153',[147]='\226\128\156',[148]='\226\128\157',[149]='\226\128\162',[150]='\226\128\147',[151]='\226\128\148',
[152]='\194\152',[153]='\226\132\162',[154]='\209\153',[155]='\226\128\186',[156]='\209\154',[157]='\209\156',
[158]='\209\155',[159]='\209\159',[160]='\194\160',[161]='\209\142',[162]='\209\158',[163]='\208\136',
[164]='\194\164',[165]='\210\144',[166]='\194\166',[167]='\194\167',[168]='\208\129',[169]='\194\169',
[170]='\208\132',[171]='\194\171',[172]='\194\172',[173]='\194\173',[174]='\194\174',[175]='\208\135',
[176]='\194\176',[177]='\194\177',[178]='\208\134',[179]='\209\150',[180]='\210\145',[181]='\194\181',
[182]='\194\182',[183]='\194\183',[184]='\209\145',[185]='\226\132\150',[186]='\209\148',[187]='\194\187',
[188]='\209\152',[189]='\208\133',[190]='\209\149',[191]='\209\151'
}
local utf8_decode={
[128]={[147]='\150',[148]='\151',[152]='\145',[153]='\146',[154]='\130',[156]='\147',[157]='\148',[158]='\132',[160]='\134',[161]='\135',[162]='\149',[166]='\133',[176]='\137',[185]='\139',[186]='\155'},
[130]={[172]='\136'},
[132]={[150]='\185',[162]='\153'},
[194]={[152]='\152',[160]='\160',[164]='\164',[166]='\166',[167]='\167',[169]='\169',[171]='\171',[172]='\172',[173]='\173',[174]='\174',[176]='\176',[177]='\177',[181]='\181',[182]='\182',[183]='\183',[187]='\187'},
[208]={[129]='\168',[130]='\128',[131]='\129',[132]='\170',[133]='\189',[134]='\178',[135]='\175',[136]='\163',[137]='\138',[138]='\140',[139]='\142',[140]='\141',[143]='\143',[144]='\192',[145]='\193',[146]='\194',[147]='\195',[148]='\196',
[149]='\197',[150]='\198',[151]='\199',[152]='\200',[153]='\201',[154]='\202',[155]='\203',[156]='\204',[157]='\205',[158]='\206',[159]='\207',[160]='\208',[161]='\209',[162]='\210',[163]='\211',[164]='\212',[165]='\213',[166]='\214',
[167]='\215',[168]='\216',[169]='\217',[170]='\218',[171]='\219',[172]='\220',[173]='\221',[174]='\222',[175]='\223',[176]='\224',[177]='\225',[178]='\226',[179]='\227',[180]='\228',[181]='\229',[182]='\230',[183]='\231',[184]='\232',
[185]='\233',[186]='\234',[187]='\235',[188]='\236',[189]='\237',[190]='\238',[191]='\239'},
[209]={[128]='\240',[129]='\241',[130]='\242',[131]='\243',[132]='\244',[133]='\245',[134]='\246',[135]='\247',[136]='\248',[137]='\249',[138]='\250',[139]='\251',[140]='\252',[141]='\253',[142]='\254',[143]='\255',[144]='\161',[145]='\184',
[146]='\144',[147]='\131',[148]='\186',[149]='\190',[150]='\179',[151]='\191',[152]='\188',[153]='\154',[154]='\156',[155]='\158',[156]='\157',[158]='\162',[159]='\159'},[210]={[144]='\165',[145]='\180'}
}
local nmdc = {
[36] = '$',
[124] = '|'
}
function AnsiToUtf8(s, hasbom)
local bom = '\239\187\191'
local r, b = ''
for i = 1, s and s:len() or 0 do
b = s:byte(i)
if b < 128 then
r = r..string.char(b)
else
if b > 239 then
r = r..'\209'..string.char(b - 112)
elseif b > 191 then
r = r..'\208'..string.char(b - 48)
elseif ansi_decode[b] then
r = r..ansi_decode[b]
else
r = r..'_'
end
end
end
if hasbom then r = bom..r end
return r
end
function Utf8ToAnsi(s)
local bom = '\239\187\191'
local a, j, r, b = 0, 0, ''
if string.sub(s,1,3) == bom then s = string.sub(s,4,#s) end
for i = 1, s and s:len() or 0 do
b = s:byte(i)
if b < 128 then
if nmdc[b] then
r = r..nmdc[b]
else
r = r..string.char(b)
end
elseif a == 2 then
a, j = a - 1, b
elseif a == 1 then
a, r = a - 1, r..utf8_decode[j][b]
elseif b == 226 then
a = 2
elseif b == 194 or b == 208 or b == 209 or b == 210 then
j, a = b, 1
else
r = r..'_'
end
end
return r
end
-- End of full convert ANSI <---> UTF-8 --
- flegont
- V.I.P.
-
Скрипты для Demagog
Скрипт, работающий с файлом в кодировке utf-8, содержащем транскрипцию IPA (МФА).
Используется недокументированная особенность функции LoadFromFile(fname, allformats)
Без 2-го параметра = true она читает файл побайтно, без автоматического преобразования в ansi.
Казалось очевидным, что таким способом можно корректно прочесть только файл в кодировке ansi. На самом деле, правильно читаются и файлы в кодировке utf-8
Используется недокументированная особенность функции LoadFromFile(fname, allformats)
Без 2-го параметра = true она читает файл побайтно, без автоматического преобразования в ansi.
Казалось очевидным, что таким способом можно корректно прочесть только файл в кодировке ansi. На самом деле, правильно читаются и файлы в кодировке utf-8

Код: Выделить всё
-- ПРОВЕРКА PLS-СЛОВАРЯ НА ДУБЛИКАТЫ
-- Важно! Файл словаря должен быть в кодировке UTF-8
fname = 'ЙЦУКЕН.pls' -- файл словаря, укажите свой
a = LoadFromFile(fname) -- побайтная загрузка файла в кодировке ansi или utf-8
s = table.concat(a,'\r') -- словарь загружен в строку s
-- При попытке отобразить такую utf8-строку командами print() или ShowMessage()
-- на месте кириллицы и МФА-транскрипции будут кракозябры. Но, можно сохранить в файл :)
--SaveToFile({s},'sss.txt') -- отладочная проверка!
-- Список секций словаря
a = {}
pos = 1
for i = 1,#s do
k, z = string.find(s,'<lexeme>',pos,true)
if k then
pos = z+1
ke, ze = string.find(s,'</lexeme>',pos,true)
if ke then
b = string.sub(s,k,ze)
a[#a+1] = b
pos = ze+1
end
end
end
table.sort(a)
-- В сортированном списке секций дубликаты идут подряд
d = {}
for i = 1,#a-1 do
if a[i] ~= '' then
for j = i+1,#a do
if a[j] == a[i] then -- найдена секция-дубликат
d[#d+1] = a[j]
a[j] = ''
else
break
end
end
end
StatusMessage('Проверено '..math.ceil(100*i/#a)..'%')
end
-- Сохраняем результат
SaveToFile(d,'_out_.txt')
ShowMessage(fname..'\r'..'Найдено дубликатов '..#d..'\r'..'Результат в файле _out_.txt')
StatusMessage('')
- tonio_k
- V.I.P.
-
Скрипты для Demagog
Интересно, а побайтное открытие быстрее будет, чем:a = LoadFromFile(fname) -- побайтная загрузка файла в кодировке ansi или utf-8
WOpen(0,fname); a=WText(0) ?
это я размышляю в сторону склеивания файлов (в частности несколько словарей в один)
- flegont
- V.I.P.
-
Скрипты для Demagog
Через WText() мы всегда будем получать только ansi-строку, но никогда не получим utf-8
Следовательно, вся МФА-транскрипция превратится в знаки ???....
Следовательно, вся МФА-транскрипция превратится в знаки ???....
- tonio_k
- V.I.P.
-
Скрипты для Demagog
это я неудачный пример привел.
имелось в виду склеивание файлов по схеме:
Код: Выделить всё
dic = HomeFolder('dic')
WOpen(0,dic..'70.ФОНЕМЫ Dopolneniya строчные.dic')
WAdd(-1,0)
WOpen(0,dic..'75.ФОНЕМЫ-ОМО.dic')
WAdd(-1,0)
WOpen(0,dic..'78.ФОНЕМЫ.dic')
WAdd(-1,0)
WNew(0)
WAdd(0,-1)
WSave(0,"#ФОНЕМЫ.dic")
Код: Выделить всё
dic = HomeFolder('dic')
a1 = LoadFromFile(dic..'70.ФОНЕМЫ Dopolneniya строчные.dic')
s1 = table.concat(a1,'\r') -- словарь загружен в строку s
a2 = LoadFromFile(dic..'75.ФОНЕМЫ-ОМО.dic')
s2 = table.concat(a2,'\r') -- словарь загружен в строку s
a3 = LoadFromFile(dic..'78.ФОНЕМЫ.dic')
s3 = table.concat(a3,'\r') -- словарь загружен в строку s
s=s1..s2..s3
SaveToFile({s},'#ФОНЕМЫ.dic')
- flegont
- V.I.P.
-
Скрипты для Demagog
В Lua загрузка больших файлов действительно происходит очень быстро. Так что, если есть уверенность, что файл в ansi или utf8 кодировке, то вполне можно этим воспользоваться.
- tonio_k
- V.I.P.
-
Скрипты для Demagog
Оказывается при склеивании файлов в моем примере в тело текста попадает символы Utf-8 BOM - думаю они и создают проблему с возможной ошибкой определения кодировки при открытии файла. Вопрос, как его почистить?
- flegont
- V.I.P.
-
Скрипты для Demagog
В сообщении #421 дан исходный текст функции Utf8ToAnsi(s)
В ней как раз есть фрагмент - чистка строки s от BOM:
В ней как раз есть фрагмент - чистка строки s от BOM:
Код: Выделить всё
local bom = '\239\187\191'
if string.sub(s,1,3) == bom then s = string.sub(s,4,#s) end
- tonio_k
- V.I.P.
-
Скрипты для Demagog
Сделал две функции по работе с переменными хранящимися в файле. Первая - для считывания значения, вторая - для перезаписи значения в файл.
Содержимое файла с переменными должен быть в виде:
Шапка (-любой текст)
переменная=значение
переменная=значение
переменная=значение
Пример содержимого файла с переменными:
Функции:
Пример применения:
Пример 1
Пример 2
Вопрос
, - не понятно, почему если в первом примере убрать ремарку у
то при повторном запуске число в файле вдруг начинает увеличивается ....
Содержимое файла с переменными должен быть в виде:
Шапка (-любой текст)
переменная=значение
переменная=значение
переменная=значение
Пример содержимого файла с переменными:
Код: Выделить всё
::Мои настройки::
simbol=10800
Mess=Внимание проверить на ошибки!
f_fail=dic\\СПИСОК СЛОВАРЕЙ 03 DIC СЛОВАРИ.lua
Код: Выделить всё
--Найти переменную в файле и получить её значение
function ReadValueFromFile(value,f_path)
local s = LoadFromFile(f_path,true)
s = table.concat(s, '\r') -- преобразовываем список в ТЕКСТ
f_peremen = value
start_pos, end_pos = string.find(s, "\013"..f_peremen.."=[^\r]+",1)
fnd = string.sub(s,start_pos,end_pos)
fnd = string.sub(s,start_pos+1+#f_peremen+1,end_pos)
return fnd
end
--Найти переменную в файле и ПЕРЕЗАПИСАТЬ её значение
function RewriteValueToFile(value,variable_value, f_path)
local s = LoadFromFile(f_path,true)
s = table.concat(s, '\r') -- преобразовываем список в ТЕКСТ
f_peremen = value
znach = variable_value
start_pos, end_pos = string.find(s, "\013"..f_peremen.."=[^\r\n]+",1)
s = string.sub(s,1,start_pos)..f_peremen.."="..znach..string.sub(s,end_pos,#s)
s = string.gsub(s, '\r', '\r\n')--что бы в блокноте нормально открывал
SaveToFile({s}, f_path)
return s
end
Пример 1
Код: Выделить всё
is="$мои переменные.txt"
simbol=ReadValueFromFile("simbol",is)--найти переменную в файле и присвоить значение
--simbol = tonumber(simbol)--переменную переводим в числовой формат
simbol=simbol-1
print(simbol)
RewriteValueToFile("simbol",simbol, is) -- перепишем полученное новое значение simbol
Код: Выделить всё
is="$мои переменные.txt"
f_fail=ReadValueFromFile("f_fail",is)--открыть файл по пути, взятого из файла с переменными
WOpen(0,f_fail)
Вопрос

Код: Выделить всё
--simbol = tonumber(simbol)-переменную переводим в числовой формат
- flegont
- V.I.P.
-
Скрипты для Demagog
Ничего такого не увидел
Всё прекрасно работает: число в файле при каждом запуске уменьшается на 1, и совпадает с тем, которое отображается в окне "0 - Статистика". Независимо от того, заремлена или нет строка: simbol = tonumber(simbol)

- tonio_k
- V.I.P.
-
- flegont
- V.I.P.
-
Скрипты для Demagog
Да, какая-то нерегулярная ошибка. На некоторых начальных значениях работает, на других как бы наложение со сдвигом одной строки-числа на другую. А преобразование в число и обратно добавляет остроты в блюдо - за счет периодического отрезания символов .0
В общем, где-то путаница с позициями, когда из текста вырезается значение, потом куда-то измененное вставляется.
Но всё решаемо. Нет надобности превращать считанную из файла таблицу строк в единый текст.
Работаем непосредственно с нею. Учтем, что каждая строка таблицы (за исключением комментариев #блаблабла) имеет вид "name=value".
В общем, где-то путаница с позициями, когда из текста вырезается значение, потом куда-то измененное вставляется.
Но всё решаемо. Нет надобности превращать считанную из файла таблицу строк в единый текст.
Работаем непосредственно с нею. Учтем, что каждая строка таблицы (за исключением комментариев #блаблабла) имеет вид "name=value".
Код: Выделить всё
#Мои настройки
simbol=10800
Mess=Внимание проверить на ошибки!
f_fail=dic\\СПИСОК СЛОВАРЕЙ 03 DIC СЛОВАРИ.lua
Код: Выделить всё
--Найти переменную в файле по имени и получить её значение
-- Замечание. Имя переменной НЕ может начинаться с символа #
function ValueFromFile(name, f_path)
local t = LoadFromFile(f_path,true)
for i = 1,#t do
local a = string.split(t[i],'=')
if a[1] and string.sub(a[1],1,1) ~= '#' and a[1] == name then
return a[2]
end
end
end
--Найти переменную в файле и ПЕРЕЗАПИСАТЬ её значение
function ValueToFile(name, value, f_path)
local t = LoadFromFile(f_path,true)
for i = 1,#t do
local a = string.split(t[i],'=')
if a[1] == name then
t[i] = name..'='..value
end
end
SaveToFile(t,f_path)
end
--Пример 1
is = "$мои переменные.txt"
simbol = ValueFromFile("simbol",is)--найти переменную в файле и присвоить значение
simbol = tonumber(simbol) --переменную переводим в числовой формат
simbol = simbol-1
print(simbol)
ValueToFile("simbol",simbol, is) -- перепишем полученное новое значение simbol
--Пример 2
is = "$мои переменные.txt"
f_fail = ValueFromFile("f_fail",is)--открыть файл по пути, взятого из файла с переменными
WOpen(0,f_fail)
- flegont
- V.I.P.
-
Скрипты для Demagog
Версия 7.30.378 (сборка от 31.08.2019)
Добавлены функции встроенного интерпретатора:
table.save(t, f) - сохранить таблицу t в файл f
table.load(f) - загрузить таблицу из файла f
Пример использования:
Добавлены функции встроенного интерпретатора:
table.save(t, f) - сохранить таблицу t в файл f
table.load(f) - загрузить таблицу из файла f
Пример использования:
Код: Выделить всё
-- создаем таблицу значений, которые требуется
-- сохранить для дальнейшего использования
t = {}
t.simbol = 10000
t.Mess = 'Внимание, проверить на ошибки!'
t.file = [[dic\СПИСОК СЛОВАРЕЙ 03 DIC СЛОВАРИ.lua]]
t.Ans = false
-- сохраняем таблицу в файл
table.save(t,'$MySettings.txt')
-- читаем таблицу (другое имя взято для чистоты эксперимента) из файла
d = table.load('$MySettings.txt')
-- любое сохраненное значение доступно по имени, например:
ShowMessage(d.Mess)
-- значения сохраняются с учетом их типов, проверим:
for k, v in pairs(d) do
ShowMessage(k..' = '..tostring(v))
end
- flegont
- V.I.P.
-
Скрипты для Demagog
Версия 378 сборка от 24.09.2019
Добавлена опция командной строки: /a "имя скрипта.lua"
Пример использования со скриптом, написанным balaamster:
Результат:
Demagog будет запущен свернутым в значок, и откроет в первом свободном окне или окне Статистики файл "Пророк.txt". Это окно станет активным. А скрипт YaTTS.lua отправит текст из активного окна сервису Яндекс, и получит обратно готовую аудиокнигу. По окончании работы Demagog автоматически закроется.
Добавлена опция командной строки: /a "имя скрипта.lua"
Пример использования со скриптом, написанным balaamster:
Код: Выделить всё
chcp 1251
start /min Demagog.exe "d:\Books\Пророк.txt" /a "d:\Demagog\_Tests_\YaTTS.lua" /m /q
Demagog будет запущен свернутым в значок, и откроет в первом свободном окне или окне Статистики файл "Пророк.txt". Это окно станет активным. А скрипт YaTTS.lua отправит текст из активного окна сервису Яндекс, и получит обратно готовую аудиокнигу. По окончании работы Demagog автоматически закроется.