Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Декодер | замена текста.
FREEON
сообщение 27.1.2019, 10:52
Сообщение #1


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Можно ли на базе пилота сделать скрипт который бы заменял текст в файле на нужный?
К примеру есть текстовый документ test.txt, в нем находится набор символов которые нечитаемы, но разделены к примеру запятой(или пробелом или ещё каким символом).
Код
1,2,3,4,5,11,27

Мы знаем и делаем условие что 1 это привет, 2 допустим имя Максим и так далее. Нужно чтобы пилот сканировал текст и менял символы на нужные слова и результат сохронял в нужном месте.
Примеры, готовые скрипты:
qwerty перевод на русский: Hfcrkflrf -> Раскладка

Готовый скрипт конвертирует набранный текст в неверной раскладке клавиатуры. Владение методом слепого набора, уменьшает эту вероятность, но неприятности иногда случаются. Также данный метод можно использовать для кодирования своих сообщений или легкого запоминания своих паролей.
Например:
Цитата
$GfHjKm$_Dfvgbh >>> ;ПаРоЛь;_Вампир

Код

--lua
-- Скрипт для перевода английской раскладки в русскую
-- Hfcrkflrf -> Раскладка
local file= io.open([[C:\123.txt]], "r")          -- файл с текстом
local result_file = io.open([[C:\456.txt]], "w")  -- куда сохранить результат

local t={}
t["a"]="ф"  t["b"]="и"  t["c"]="с"  t["d"]="в"  t["e"]="у"  t["f"]="а"
t["g"]="п"  t["h"]="р"  t["i"]="ш"  t["j"]="о"  t["k"]="л"  t["l"]="д"
t["m"]="ь"  t["n"]="т"  t["o"]="щ"  t["p"]="з"  t["q"]="й"  t["r"]="к"
t["s"]="ы"  t["t"]="е"  t["u"]="г"  t["v"]="м"  t["w"]="ц"  t["x"]="ч"
t["y"]="н"  t["z"]="я"  t["`"]="ё"  t["["]="х"  t["]"]="ъ"  t[";"]="ж"
t["'"]="э"  t[","]="б"  t["."]="ю"  t["/"]="."  t["A"]="Ф"  t["B"]="И"
t["C"]="С"  t["D"]="В"  t["E"]="У"  t["F"]="А"  t["G"]="П"  t["H"]="Р"
t["I"]="Ш"  t["J"]="О"  t["K"]="Л"  t["L"]="Д"  t["M"]="Ь"  t["N"]="Т"
t["O"]="Щ"  t["P"]="З"  t["Q"]="Й"  t["R"]="К"  t["S"]="Ы"  t["T"]="Е"
t["U"]="Г"  t["V"]="М"  t["W"]="Ц"  t["X"]="Ч"  t["Y"]="Н"  t["Z"]="Я"
t["{"]="Х"  t["}"]="Ъ"  t[":"]="Ж"  t['"']="Э"  t["<"]="Б"  t[">"]="Ю"
t["?"]=","  t["~"]="Ё"  t["@"]='"'  t["#"]="№"  t["$"]=";"  t["^"]=":"
t["&"]="?"

if file and result_file then     -- если файлы открылись
    for v in file:lines() do
        result_file:write(string.gsub(v, ".", t).."\r\n")  -- поиск и замена текста из таблицы 't'
    end

    file:close()
    result_file:close()
else
    log ("Файлы отсутствуют или недоступны для чтения/записи")
end

URL-decoder(декодер): %D0%A2%D0%B5%D0%BA%D1%81%D1%82 -> Текст

URL применяется всеми и везде и стал неотъемлемой частью Интернета и является идентификации ресурсов(сайтов) в браузерах. Стандарт URL использует набор символов US-ASCII. И имеет серьёзный недостаток, поскольку можно использовать лишь латинские буквы, цифры и несколько знаков пунктуации. Все другие символы необходимо перекодировать. Скрипт размещенный ниже, это, инструмент и поможет раскодировать строку, закодированную подобным алгоритмом.
Пример:
Цитата
%D0%9A%D1%83%D0%BF%D0%B8%D1%82%D1%8C >>> Купить

Код

--lua
log "clear"   log "mode compact"

local s="Вставить свой код URL"   -- << Для декодирования вставить url-код между ""
log(s)

local t={}
t["%D0%90"]="А" t["%D0%91"]="Б" t["%D0%92"]="В" t["%D0%93"]="Г" t["%D0%94"]="Д" t["%D0%95"]="Е" t["%D0%81"]="Ё" t["%D0%96"]="Ж" t["%D0%97"]="З" t["%D0%98"]="И" t["%D0%99"]="Й"
t["%D0%9A"]="К" t["%D0%9B"]="Л" t["%D0%9C"]="М" t["%D0%9D"]="Н" t["%D0%9E"]="О" t["%D0%9F"]="П" t["%D0%A0"]="Р" t["%D0%A1"]="С" t["%D0%A2"]="Т" t["%D0%A3"]="У" t["%D0%A4"]="Ф"
t["%D0%A5"]="Х" t["%D0%A6"]="Ц" t["%D0%A7"]="Ч" t["%D0%A8"]="Ш" t["%D0%A9"]="Щ" t["%D0%AA"]="Ъ" t["%D0%AB"]="Ы" t["%D0%AC"]="Ь" t["%D0%AD"]="Э" t["%D0%AE"]="Ю" t["%D0%AF"]="Я"
t["%D0%B0"]="а" t["%D0%B1"]="б" t["%D0%B2"]="в" t["%D0%B3"]="г" t["%D0%B4"]="д" t["%D0%B5"]="е" t["%D1%91"]="ё" t["%D0%B6"]="ж" t["%D0%B7"]="з" t["%D0%B8"]="и" t["%D0%B9"]="й"
t["%D0%BA"]="к" t["%D0%BB"]="л" t["%D0%BC"]="м" t["%D0%BD"]="н" t["%D0%BE"]="о" t["%D0%BF"]="п" t["%D1%80"]="р" t["%D1%81"]="с" t["%D1%82"]="т" t["%D1%83"]="у" t["%D1%84"]="ф"
t["%D1%85"]="х" t["%D1%86"]="ц" t["%D1%87"]="ч" t["%D1%88"]="ш" t["%D1%89"]="щ" t["%D1%8A"]="ъ" t["%D1%8B"]="ы" t["%D1%8C"]="ь" t["%D1%8D"]="э" t["%D1%8E"]="ю" t["%D1%8F"]="я"

for v in pairs(t) do   -- добавление ключей в таблицу, если был "%D0%9A", то добавляется "%d0%9a"
    t[v:lower()]=t[v]
end

for i=32, 127 do t["%" .. string.format("%X", i)]=string.char(i) end   -- добавление ключей в таблицу, все символы ascii с 32 по 127

s=s:gsub("%%[Dd][01]%%%x%x", t)   -- замена кириллицы
s=s:gsub("%%..", t)               -- замена спецсимволов
log(s)                            -- результат

Текст задом наперед. Reverser : Зеркальный код. -> .док йыньлакреЗ

Зеркальный код использовал да Винчи в эпоху Возрождения, он в зеркальном стиле писал свои заметки, а также картины. Возможно он подсмотрел эту технику у арабов...кто знает (IMG:style_emoticons/default/smile.gif)
Данный скрипт позволяет отзеркалить текст в одну или в обратную сторону.
Пример:
Цитата
Не только Леонардо да Винчи пишет задом наперед! >>> !дерепан модаз тешип ичниВ ад одраноеЛ окьлот еН

Код

--lua
log "clear"  log "mode compact"
local s="Текст который нужно отзеркалить."
log (s)
log (s:reverse())

Азбука морзе: Morse to text -> -- --- .-. ... . - --- - . -..- -

Код Морзе, «Морзянка» — способ кодирования букв алфавита, цифр, знаков препинания и других символов при помощи длинных и коротких сигналов, так называемых «точек» и «тире».
Конвертирует латиницу в код морзе и обратно. Пример:
Цитата
Text <<->> - . -..- -

Код

--lua
log "clear"  log "mode compact"
-- Скрипт для конвертерования текста(ЛАТИНИЦА)в Азбуку Морзе или наоборот.
local text=[[Text or - . -..- -]]-- << Введите исходный текст на латинице или код Морзе и запустите скрипт.

log(text)

local t, t1, temp = {}, {}, {}
t["A"]=".-"     t["B"]="-..."   t["C"]="-.-."   t["D"]="-.."    t["E"]="."      t["F"]="..-."   t["G"]="--."
t["H"]="...."   t["I"]=".."     t["J"]=".---"   t["K"]="-.-"    t["L"]=".-.."   t["M"]="--"     t["N"]="-."
t["O"]="---"    t["P"]=".--."   t["Q"]="--.-"   t["R"]=".-."    t["S"]="..."    t["T"]="-"      t["U"]="..-"
t["V"]="...-"   t["W"]=".--"    t["X"]="-..-"   t["Y"]="-.--"   t["Z"]="--.."
for v in pairs(t) do temp[string_lower(v)]=t[v] end
for v in pairs(temp) do t[v]=temp[v] end
t["1"]=".----"  t["2"]="..---"  t["3"]="...--"  t["4"]="....-"  t["5"]="....."  t["6"]="-...."  t["7"]="--..."
t["8"]="---.."  t["9"]="----."  t["0"]="-----"  t["."]="......" t[":"]="---..." t[";"]="-.-.-." t["("]="-.--.-"
t[")"]="-.--.-" t["'"]=".----." t['"']=".-..-." t["-"]="-....-" t["/"]="-..-."  t["?"]="..--.." t["!"]="--..--"
t[","]=".-.-.-"
for v in pairs(t) do t1[t[v]]=v end   -- таблица для дешифровки, копия 't' только ключи и значения ключей поменяны местами

local x=0
for v in text:gmatch("[%.%- ]") do x=x+1 end  -- подсчёт точек, тире и слешей в строке

if x > #text*50/100 then   -- если их больше 50%, считаем что передана шифрованная строка
    text=string.gsub((text .. " "):gsub("(.-) ", t1), "  ", " ")    -- дешифруем
else
    text=string.gsub(text:gsub("(.)", "%1 "), "[^ ]", t)  -- иначе шифруем
end
log (text)

Конвертирует кириллицу в код морзе и обратно. Пример:
Цитата
Текст<<->> - . -.- ... -

Код

--lua
log "clear"  log "mode compact"

-- Скрипт для конвертирования текста(КИРИЛЛИЦА)в Азбуку Морзе или наоборот.
local text=[[Текст или - . -.- ... -]]-- << Введите исходный текст на кириллице или код Морзе и запустите скрипт.

log(text)

local t, t1, temp = {}, {}, {}
t["А"]=".-"     t["Б"]="-..."   t["В"]=".--"    t["Г"]="--."    t["Д"]="-.."    t["Е"]="."    t["Ё"]="."
t["Ж"]="...-"   t["З"]="--.."   t["И"]=".."     t["Й"]=".---"   t["К"]="-.-"    t["Л"]=".-.." t["М"]="--"
t["Н"]="-."     t["О"]="---"    t["П"]=".--."   t["Р"]=".-."    t["С"]="..."    t["Т"]="-"    t["У"]="..-"
t["Ф"]="..-."   t["Х"]="...."   t["Ц"]="-.-."   t["Ч"]="---."   t["Ш"]="----"   t["Щ"]="--.-" t["Ь"]="-..-"
t["Ъ"]="-..-"   t["Ы"]="-.--"   t["Э"]="..-.."  t["Ю"]="..--"   t["Я"]=".-.-"
for v in pairs(t) do temp[string_lower(v)]=t[v] end
for v in pairs(temp) do t[v]=temp[v] end
t["1"]=".----"  t["2"]="..---"  t["3"]="...--"  t["4"]="....-"  t["5"]="....."  t["6"]="-...."  t["7"]="--..."
t["8"]="---.."  t["9"]="----."  t["0"]="-----"  t["."]="......" t[":"]="---..." t[";"]="-.-.-." t["("]="-.--.-"
t[")"]="-.--.-" t["'"]=".----." t['"']=".-..-." t["-"]="-....-" t["/"]="-..-."  t["?"]="..--.." t["!"]="--..--"
t[","]=".-.-.-"
for v in pairs(t) do t1[t[v]]=v end   -- таблица для дешифровки, копия 't' только ключи и значения ключей поменяны местами

local x=0
for v in text:gmatch("[%.%- ]") do x=x+1 end  -- подсчёт точек, тире и слешей в строке

if x > #text*50/100 then   -- если их больше 50%, считаем что передана шифрованная строка
    text=string.gsub((text .. " "):gsub("(.-) ", t1), "  ", " ")    -- дешифруем
else
    text=string.gsub(text:gsub("(.)", "%1 "), "[^ ]", t)  -- иначе шифруем
end
log (text)


Выражаю огромную благодарность в написании скриптов нашему великому гуру cirus .
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 11:44
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Код
--lua
local file= io.open([[C:\123.txt]], "r")          -- файл с текстом
local result_file = io.open([[C:\456.txt]], "w")  -- куда сохранить результат

local t={}
t["1"]="привет"          -- '1' заменить на 'привет'
t["2"]="Максим"          -- '2' на 'Максим'
t["11"]="Двадцать пять"

if file and result_file then     -- если файлы открылись
    for v in file:lines() do
        result_file:write(string.gsub(v, "[^,]+", t).."\r\n")  -- поиск и замена текста из таблицы 't'
    end

    file:close()
    result_file:close()
else
    log ("Файлы отсутствуют или недоступны для чтения/записи")
end
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName212
сообщение 27.1.2019, 12:24
Сообщение #3


**

Neophyte
Сообщений: 13
Регистрация: 6.10.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.068
Возраст: 28



на php обычно такое делают)

как это может быть на на пыхе


в дивел студио 3.0(2012 год! :/ ) добавить в форму кнопку и текст, (справа). Потом выбрать кнопку, слева, свойства и события, выбрать событие, добавить событие - клик, дважды на него кликнуть. Откроется редактор кода туда этот код и F5. Скомпилируется открыть папку вставить файл test.txt, запустить нажать на кнопку. Массив 0 => 'string' поменять надо под себя и компилировать.

Код
c("label1")->text;
$find_and_repeat = array (
'0' => 'Привет',
'1' => ' Максим',
'23' => ' как дела',
'45' => ' нормально реально не реально',
);
$test = 'test.txt';
$test = file_get_contents($test);
$test = explode (',', $test); // , - символ которым разделены слова!
foreach ($find_and_repeat as $key => $v)
{
    $test = str_replace($key, $v, $test);
    $newTest = fopen('new_test.txt', 'w');
    $check = fwrite($newTest , implode($test));
    fclose($newTest);
}
//print_r($test);
if($check = true)
{echo 'Заменил!!!';}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.1.2019, 13:12
Сообщение #4


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 27.1.2019, 11:44) *

Код
--lua
local file= io.open([[C:\123.txt]], "r")          -- файл с текстом
local result_file = io.open([[C:\456.txt]], "w")  -- куда сохранить результат

local t={}
t["1"]="привет"          -- '1' заменить на 'привет'
t["2"]="Максим"          -- '2' на 'Максим'
t["11"]="Двадцать пять"

if file and result_file then     -- если файлы открылись
    for v in file:lines() do
        result_file:write(string.gsub(v, "[^,]+", t).."\r\n")  -- поиск и замена текста из таблицы 't'
    end

    file:close()
    result_file:close()
else
    log ("Файлы отсутствуют или недоступны для чтения/записи")
end


С цифрами все работает на ура, а если к примеру я хочу усложнить задачу и вместо цифр использовать текст например нужно декодировать qwerty в йцукен так же по-символьно q = й
или же к примеру в морзянку:
.- = А
-... = Б
.-- = В
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.1.2019, 13:28
Сообщение #5


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
С цифрами все работает на ура, а если к примеру я хочу усложнить задачу и вместо цифр использовать текст например нужно декодировать qwerty в йцукен так же по-символьно q = й

Ну так добавляйте в правила выше:
Цитата
t["1"]="привет" -- '1' заменить на 'привет'
t["2"]="Максим" -- '2' на 'Максим'
t["11"]="Двадцать пять"



--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 13:38
Сообщение #6


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Цитата
Ну так добавляйте в правила выше:

Нужно регулярку менять, там разделитель запятая. Это уже другое условие, посимвольная замена.
Цитата
qwerty в йцукен

Код
--lua
local file= io.open([[C:\123.txt]], "r")          -- файл с текстом
local result_file = io.open([[C:\456.txt]], "w")  -- куда сохранить результат

local t={}
t["q"]="й"          -- все 'q' заменит на 'й'
t["w"]="ц"          
t["e"]="у"
t["r-"]="к"

if file and result_file then     -- если файлы открылись
    for v in file:lines() do
        result_file:write(string.gsub(v, ".", t).."\r\n")  -- поиск и замена текста из таблицы 't'
    end

    file:close()
    result_file:close()
else
    log ("Файлы отсутствуют или недоступны для чтения/записи")
end

Цитата
или же к примеру в морзянку:

Пример нужен. Как символы отличать?
.- = А - 2 символа
-... = Б - 4 символа
.--... - если это АБ, то В тут тоже можно найти .--
Тогда уж они должны быть 1 длины.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.1.2019, 13:43
Сообщение #7


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Цитата(DarkMaster @ 27.1.2019, 13:28) *

Ну так добавляйте в правила выше:

добавил
Код

t["q"]="й"          -- 'А'
t["w."]="ц"          -- '2' на 'Максим'
t["e"]="у"
t["t"]="е"
t["y"]="н"

пример:
Код

qwetty
qwerrrty q
ytreq
ytrewq

вот что выдает в результат:

qwetty
qwerrrty q
ytreq
ytrewq
(IMG:style_emoticons/default/huh.gif)

Цитата(cirus @ 27.1.2019, 13:38) *

Нужно регулярку менять, там разделитель запятая. Это уже другое условие, посимвольная замена.

Код
.gsub(v, ".", t).."\r\n")  -- поиск и замена текста из таблицы 't'


тобишь эта страка делает маску? а как понять или определить что есть что? где можно найти список ключей?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 14:04
Сообщение #8


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Цитата
.gsub(v, ".", t).."\r\n")
тобишь эта страка делает маску?

Второй параметр, это шаблон регулярного выражения, по нему находится текст и заменяется на то что задано в таблице.
Цитата
а как понять или определить что есть что?

Надо знать регулярные выражения. В гугле 'lua регулярные выражения'.

"." - означает любой символ, например, "..." - будет означать любые 3 символа
"[^,]+" - кроме запятой, любое количество символов от 1 и больше
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.1.2019, 14:31
Сообщение #9


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 27.1.2019, 13:38) *

Пример нужен. Как символы отличать?
.- = А - 2 символа
-... = Б - 4 символа
.--... - если это АБ, то В тут тоже можно найти .--
Тогда уж они должны быть 1 длины.

Понял, поищу покамись.
Правила кодирования

Здесь можно легко и просто закодировать текст в Азбуку Морзе, да не просто в обычные точки и тире, а ещё и в бинарный код!

Правила кодирования

Кодирование азбуки Морзе в бинарный код -- это просто замена точек и тире на единицы и нули, но по определённым правилам: •"Точка" кодируется цифрой 1
•"Тире" кодируется тремя единицами (ведь тире по длительности равно трём точкам)
•Между точкой и тире используется разделитель: цифра 0
•Между каждым символом используется два нуля, так можно будет отличить, что начался следующий символ

php скамуниздил

Код

<?php
/**
* Created by PhpStorm.
* User: karamush
* Date: 13.07.2018
* Time: 23:08
*/

class MorseCoder_Class {

    public $MORSE_CHAR_DELIMITER = ' ';            // разделитель между символами в обычной морзянке
    public $UNKNOWN_CHAR = '?';                    // это если перевести не удалось. неизвестный символ
    public $MORSE_DOT = '.';                       // точка
    public $MORSE_DASH = '-';                      // тире
    public $MORSE_BIN_DOT = '1';                   // бинарная точка
    public $MORSE_BIN_DASH ='111';                 // бинарное тире
    public $MORSE_BIN_DELIMITER = '0';             // разделитель между знаками одного символа
    public $MORSE_BIN_CHAR_DELIMITER = '00';       // разделитель между символами
    public $MORSE_BIN_WORD_DELIMITER = '000';      // разделитель между словами (эм. пробел?)

    const MORSE_TYPE_SIMPLE = 0;
    const MORSE_TYPE_BINARY = 1;
    const MORSE_LANGUAGE_LATIN = 1;
    const MORSE_LANGUAGE_CYRILLIC = 0;

    public $morse_type = self::MORSE_TYPE_BINARY;
    public $morse_language = self::MORSE_LANGUAGE_CYRILLIC;
    public $morse_capital = true;

    // символы и цифры
    private $codes_symbols = [
        '1' => '.----',
        '2' => '..---',
        '3' => '...--',
        '4' => '....-',
        '5' => '.....',
        '6' => '-....',
        '7' => '--...',
        '8' => '---..',
        '9' => '----.',
        '0' => '-----',
        '.' => '......',
        ',' => '.-.-.-',
        ':' => '---...',
        ';' => '-.-.-.',
        '(' => '-.--.-',
        ')' => '-.--..', // TODO: использовал собственный символ для закрывающей скобки. опасно :)
        '\'' => '.----.',
        '`' => '.----.',
        '"' => '.-..-.',
        '-' => '-....-',
        '/' => '-..-.',
        '?' => '..--..',
        '!' => '--..--',
        ' ' => '-...-', // знак раздела, пробел, короче, WTF?!
        "\n" => '-.-..',    // TODO: ещё один добавленный символ. Символ переноса строки!
        "\r" => '-.-..-',   // TODO: ай-ай-ай!
        '@' => '.--.-.',
        '[END]' => '..-.-'
    ];

    // латинский алфавит
    private $codes_latin = [
        'A' => '.-',
        'B' => '-...',
        'C' => '-.-.',
        'D' => '-..',
        'E' => '.',
        'F' => '..-.',
        'G' => '--.',
        'H' => '....',
        'I' => '..',
        'J' => '.---',
        'K' => '-.-',
        'L' => '.-..',
        'M' => '--',
        'N' => '-.',
        'O' => '---',
        'P' => '.--.',
        'Q' => '--.-',
        'R' => '.-.',
        'S' => '...',
        'T' => '-',
        'U' => '..-',
        'W' => '.--',
        'X' => '-..-',
        'Y' => '-.--',
        'Z' => '--..',
        'V' => '...-',
        'CH' => '---.',
        'SH' => '----',
        'Ñ' => '-..-',
        'É' => '..-..',
        'Ü' => '..--',
        'Ä' => '.-.-'
    ];

    // кириллический алфавит
    private $codes_cyrillic = [
        'А' => '.-',
        'Б' => '-...',
        'В' => '.--',
        'Г' => '--.',
        'Д' => '-..',
        'Е' => '.',     'Ё' => '.',
        'Ж' => '...-',
        'З' => '--..',
        'И' => '..',
        'Й' => '.---',
        'К' => '-.-',
        'Л' => '.-..',
        'М' => '--',
        'Н' => '-.',
        'О' => '---',
        'П' => '.--.',
        'Р' => '.-.',
        'С' => '...',
        'Т' => '-',
        'У' => '..-',
        'Ф' => '..-.',
        'Х' => '....',
        'Ц' => '-.-.',
        'Ч' => '---.',
        'Ш' => '----',
        'Щ' => '--.-',
        'Ь' => '-..-',  'Ъ' => '-..-',
        'Ы' => '-.--',
        'Э' => '..-..',
        'Ю' => '..--',
        'Я' => '.-.-',
    ];

    public function __construct() {

    }

    /**
     * Получить текущий полный алфавит, но с приоритетом языка,
     * чтоб в первую очередь шифровалось или дешифровалось на текущем языке,
     * но отсутствующие символы чтобы тоже были. Плюс цифры и другие символы.
     *
     * @return array
     */
    private function get_current_full_alphabet() {
        $alphabet = ($this->morse_language == self::MORSE_LANGUAGE_CYRILLIC) ? array_merge($this->codes_cyrillic, $this->codes_latin) : array_merge($this->codes_latin, $this->codes_cyrillic);
        return array_merge($alphabet, $this->codes_symbols);
    }

    /**
     * Переводит обычный символ в его Морзе-символ
     * @param $char
     *
     * @return mixed|string
     */
    function char_to_morse($char) {
        $char = mb_strtoupper($char);
        return array_key_exists($char, $this->get_current_full_alphabet()) ? $this->get_current_full_alphabet()[$char] : $this->UNKNOWN_CHAR;
    }

    /**
     * Приводит строку с морзянкой к общему формату, заменяя звёздочки на точки и т.д.
     * @param $morse_text
     *
     * @return string
     */
    function prepare_morse_text($morse_text) {
        $morse_text = str_replace('*', '.', $morse_text);
        $morse_text = str_replace('_', '-', $morse_text);
        return $morse_text;
    }

    function mbStringToArray($string, $encoding = 'UTF-8') {
        $strlen = mb_strlen($string);
        $str_array = [];
        while ($strlen) {
            $str_array[] = mb_substr($string, 0, 1, $encoding);
            $string = mb_substr($string, 1, $strlen, $encoding);
            $strlen = mb_strlen($string, $encoding);
        }
        return $str_array;
    }

    /**
     * Переводит Морзе-код символа в его обычный символ
     * @param $morse_char
     *
     * @return string
     */
    function morse_to_char($morse_char) {
        // сначала к единому формату тире и точек привести нужно символ
        $morse_char = $this->prepare_morse_text($morse_char);
        return in_array($morse_char, $this->get_current_full_alphabet()) ? array_search($morse_char, $this->get_current_full_alphabet()) : $this->UNKNOWN_CHAR;
    }

    /**
     * Переводит строку обычного текста в морзянку, ставя также разделитель после каждого символа.
     * @param $plain_text
     *
     * @return string
     */
    function text_to_morse($plain_text) {
        $plain_text = $this->mbStringToArray(mb_strtoupper($plain_text));
        $result = '';
        foreach ($plain_text as $char) {
            $result .= $this->char_to_morse($char) . $this->MORSE_CHAR_DELIMITER;
        }
        return $result;
    }

    /**
     * Переводит морзянку в обычный человеческий текст.
     *
     * @param      $morse_text
     *
     * @return string
     */
    function morse_to_text($morse_text) {
        $morse_chars = explode($this->MORSE_CHAR_DELIMITER, $morse_text);
        $result = '';
        foreach($morse_chars as $char) {
            $result .= $this->morse_to_char($char);
        }

        return $this->morse_capital ? $result : mb_strtolower($result);
    }

    /**
     * Переводит бинарную морзянку в морзянку обычную.
     * @param $morse_bin_text
     *
     * @return string
     */
    function morse_bin_to_morse($morse_bin_text) {
        $result = '';
        $bin_morse_chars = explode($this->MORSE_BIN_CHAR_DELIMITER, $morse_bin_text);
        foreach ($bin_morse_chars as $bin_morse_char) {
            $bin_morse_char = str_replace($this->MORSE_BIN_DASH, $this->MORSE_DASH, $bin_morse_char);
            $bin_morse_char = str_replace($this->MORSE_BIN_DOT, $this->MORSE_DOT, $bin_morse_char);
            $bin_morse_char = str_replace($this->MORSE_BIN_DELIMITER, '', $bin_morse_char);
            $result .= $bin_morse_char . $this->MORSE_CHAR_DELIMITER;
        }
        return rtrim($result, $this->MORSE_CHAR_DELIMITER);
    }

    /**
     * Переводит морзянку в бинарную морзянку.
     * @param $morse_text
     *
     * @return string
     */
    function morse_to_morse_bin($morse_text) {
        $result = '';
        $morse_text = $this->prepare_morse_text($morse_text);
        for($i=0; $i<strlen($morse_text);$i++) {
            switch ($morse_text[$i]) {
                case $this->MORSE_DOT: $result .= $this->MORSE_BIN_DOT . $this->MORSE_BIN_DELIMITER; break;
                case $this->MORSE_DASH: $result .= $this->MORSE_BIN_DASH . $this->MORSE_BIN_DELIMITER; break;
                case $this->MORSE_CHAR_DELIMITER: $result .= $this->MORSE_BIN_DELIMITER; break; // добавляем ещё один нолик, а не два нуля. Потому что с предыдущего символа нолик ещё есть
            }
        }
        return $result;
    }

    /**
     * Текст в бинарную морзянку
     * @param $plaint_text
     *
     * @return string
     */
    function text_to_morse_bin($plaint_text) {
        return $this->morse_to_morse_bin($this->text_to_morse($plaint_text));
    }

    /**
     * Бинарную морзянку в текст
     *
     * @param      $morse_bin
     *
     * @return string
     */
    function morse_bin_to_text($morse_bin) {
        return $this->morse_to_text($this->morse_bin_to_morse($morse_bin));
    }

    /**
     * Закодировать открытый текст в бинарную морзянку или в обычную
     * (зависит от параметра morse_type)
     * @param $plain_text
     *
     * @return string
     */
    function morse_encode($plain_text) {
        return ($this->morse_type == self::MORSE_TYPE_BINARY) ? $this->text_to_morse_bin($plain_text) : $this->text_to_morse($plain_text);
    }

    /**
     * Раскодировать закодированный текст из бинарной морзянки или из обычной
     * (зависит от параметра morse_type)
     * @param $encoded_text
     *
     * @return string
     */
    function morse_decode($encoded_text) {
        return ($this->morse_type == self::MORSE_TYPE_BINARY) ? $this->morse_bin_to_text($encoded_text) : $this->morse_to_text($encoded_text);
    }


}

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.1.2019, 16:18
Сообщение #10


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Есчо вопрос... Можно ли к примеру делать перекодировку из буфера(для экономия времени и без лишнего гемора)? Тобишь что б перекодировал текст который находится в буфере обмена и результат замены выдавал обратно в буфер(или лог).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 16:25
Сообщение #11


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Перевод текста в Азбуку Морзе в бинарном виде и обратно
Код
--lua
log "clear"  log "mode compact"
local t={}  -- таблица с символами
t[".-"]="A"
t["-..."]="B"
t["-.-."]="C"

local x="ACDBA"   -- строка для шифровки, буквы 'D' в таблице нет, поэтому она останётся как есть
log("Строка для шифрования:\r\n" .. x)
log()

-- текст в Азбуку Морзе в бинарном виде:
--    A           B             C               -- символы
--    .-00        -...00        -.-.00          -- между символами 00
--    .0-00       -0.0.0.00     -0.0-0.00       -- между точкой и тире 0
--    10-00       -01010100     -010-0100       -- точки меняются на 1
--    1011100     11101010100   1110101110100   -- тире на 111

local s=""
for w in x:gmatch(".") do         -- поиск любого символа
    local break_=0
    for i, value in pairs(t) do   -- обход массива в посках ключа
        if value == w then        -- если нашлось
            s=s .. string.gsub(string.gsub(string.gsub(i, "(.)", "%10") .. "0", "%.", "1"), "%-", "111")  -- замена символа, к примеру 'A' на 1011100
            break_ = 1    -- флаг что символ зашифрован
            break
        end
    end
    if break_ == 0 then s=s .. w .. "00" end   -- если символа нет в таблице, то он остаётся как есть, т. е. не шифруется
end
log ("Строка в бинарном виде:\r\n" .. s)   -- строка в бинарном виде
log()

local ss=""
for w in s:gmatch("(.-)00") do  -- поиск символа, помним что между символами 00
    if w:match("[01]+") then    -- если символ шифрованный
       ss=ss .. string.gsub(string.gsub(string.gsub(w:gsub("111", "-"), "1", "."), "0", ""), ".+", t)
    else
       ss=ss .. w   -- иначе не шифрованный, дописываем как есть
    end
end
log ("Расшифрованная строка:\r\n" .. ss)

Цитата
Можно ли к примеру делать перекодировку из буфера(для экономия времени и без лишнего гемора)? Тобишь что б перекодировал текст который находится в буфере обмена и результат замены выдавал обратно в буфер(или лог).

Можно. http://uopilot.tati.pro/index.php?title=Clipboard_(Lua)
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.1.2019, 17:44
Сообщение #12


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 27.1.2019, 16:25) *

Перевод текста в Азбуку Морзе в бинарном виде и обратно
Код
--lua
log "clear"  log "mode compact"
local t={}  -- таблица с символами
t[".-"]="A"
t["-..."]="B"
t["-.-."]="C"

local x="ACDBA"   -- строка для шифровки, буквы 'D' в таблице нет, поэтому она останётся как есть
log("Строка для шифрования:\r\n" .. x)
log()

-- текст в Азбуку Морзе в бинарном виде:
--    A           B             C               -- символы
--    .-00        -...00        -.-.00          -- между символами 00
--    .0-00       -0.0.0.00     -0.0-0.00       -- между точкой и тире 0
--    10-00       -01010100     -010-0100       -- точки меняются на 1
--    1011100     11101010100   1110101110100   -- тире на 111

local s=""
for w in x:gmatch(".") do         -- поиск любого символа
    local break_=0
    for i, value in pairs(t) do   -- обход массива в посках ключа
        if value == w then        -- если нашлось
            s=s .. string.gsub(string.gsub(string.gsub(i, "(.)", "%10") .. "0", "%.", "1"), "%-", "111")  -- замена символа, к примеру 'A' на 1011100
            break_ = 1    -- флаг что символ зашифрован
            break
        end
    end
    if break_ == 0 then s=s .. w .. "00" end   -- если символа нет в таблице, то он остаётся как есть, т. е. не шифруется
end
log ("Строка в бинарном виде:\r\n" .. s)   -- строка в бинарном виде
log()

local ss=""
for w in s:gmatch("(.-)00") do  -- поиск символа, помним что между символами 00
    if w:match("[01]+") then    -- если символ шифрованный
       ss=ss .. string.gsub(string.gsub(string.gsub(w:gsub("111", "-"), "1", "."), "0", ""), ".+", t)
    else
       ss=ss .. w   -- иначе не шифрованный, дописываем как есть
    end
end
log ("Расшифрованная строка:\r\n" .. ss)


Можно. http://uopilot.tati.pro/index.php?title=Clipboard_(Lua)

Сирус ты конечно иноплонетянин, в хорошем смысле этого слова, типа мега-мозг (IMG:style_emoticons/default/biggrin.gif)
Но объясни чо куда пихать и откуда достовать (IMG:style_emoticons/default/laugh.gif)
Код

t[".-"]="A"
t["-..."]="B"
t["-.-."]="C"
t["-.."]="D"
t["."]= "E"
t["..-."]="F"
t["--."]="G"
t["...."]="H"
t[".."]="I"
t[".---"]="J"
t["-.-"]="K"
t[".-.."]="L"
t["--"]="M"
t["-."]="N"
t["---"]="O"
t[".--."]="P"
t["--.-"]="Q"
t[".-."]="R"
t["..."]="S"
t["-"]="T"
t["..-"]="U"
t[".--"]="W"
t["-..-"]="X"
t["-.--"]="Y"
t["--.."]="Z"


Строка для шифрования:
ACZBA
Строка в бинарном виде:
101110011101011101001110111010100111010101001011100
Расшифрованная строка:
ACZBA
Проверил текст в бинарный код шифрует верно, но чо то не работает точка-тире.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 18:26
Сообщение #13


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Цитата
но чо то не работает точка-тире.

Пример приведите что не работает.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.1.2019, 18:40
Сообщение #14


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 27.1.2019, 18:26) *

Пример приведите что не работает.

ну в обратном виде не работает, берем туже букву A:
Строка для шифрования:
.-
Строка в бинарном виде:
.00-00
Расшифрованная строка:
.- (должно быть А)
пример 2 буква C, имеем:
Строка для шифрования:
C
Строка в бинарном виде:
1110101110100
Расшифрованная строка:
C (должно быть -.-. не?)
(IMG:style_emoticons/default/sad.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 19:14
Сообщение #15


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Цитата
ну в обратном виде не работает, берем туже букву A:
Строка для шифрования:
.-

Причём тут точки и тире, они используются как промежуточное звено при конвертации 'A' в '1011100' и обратно из '1011100' в 'A'.
Прочитайте правила кодирования:
Цитата
Кодирование азбуки Морзе в бинарный код -- это просто замена точек и тире на единицы и нули

Вы же не будете печатать азбукой морзе? Скрипт переводит символы в точки и тире, а потом точки и тире в единицы и нули.
Такого кода: '.-.-...-..-..-.' не будет, потому что невозможно понять сколько тут символов. Или надо добавлять разделитель между символами.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.1.2019, 20:10
Сообщение #16


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Набросал по шаблону скрипт для перевода текста раскладки клавиатуры, но возникает конфликт в закомментированных строчках как разрешить? реально ли?
Цитата

--t["""]="Э"
--t["@"]="""

Hfcrkflrf -> Раскладка

Код

--lua
-- Скрипт для перевода английской раскладки в русскую
-- Hfcrkflrf -> Раскладка
local file= io.open([[C:\123.txt]], "r")          -- файл с текстом
local result_file = io.open([[C:\456.txt]], "w")  -- куда сохранить результат

local t={}
t["a"]="ф"          -- все 'a' заменит на 'ф'
t["b"]="и"
t["c"]="с"
t["d"]="в"
t["e"]="у"
t["f"]="а"
t["g"]="п"
t["h"]="р"
t["i"]="ш"
t["j"]="о"
t["k"]="л"
t["l"]="д"
t["m"]="ь"
t["n"]="т"
t["o"]="щ"
t["p"]="з"
t["q"]="й"
t["r"]="к"
t["s"]="ы"
t["t"]="е"
t["u"]="г"
t["v"]="м"
t["w"]="ц"
t["x"]="ч"
t["y"]="н"
t["z"]="я"
t["`"]="ё"
t["["]="х"
t["]"]="ъ"
t[";"]="ж"
t["'"]="э"
t[","]="б"
t["."]="ю"
t["/"]="."
t["A"]="Ф"
t["B"]="И"
t["C"]="С"
t["D"]="В"
t["E"]="У"
t["F"]="А"
t["G"]="П"
t["H"]="Р"
t["I"]="Ш"
t["J"]="О"
t["K"]="Л"
t["L"]="Д"
t["M"]="Ь"
t["N"]="Т"
t["O"]="Щ"
t["P"]="З"
t["Q"]="Й"
t["R"]="К"
t["S"]="Ы"
t["T"]="Е"
t["U"]="Г"
t["V"]="М"
t["W"]="Ц"
t["X"]="Ч"
t["Y"]="Н"
t["Z"]="Я"
t["{"]="Х"
t["}"]="Ъ"
t[":"]="Ж"
--t["""]="Э"
t["<"]="Б"
t[">"]="Ю"
t["?"]=","
t["~"]="Ё"
--t["@"]="""
t["#"]="№"
t["$"]=";"
t["^"]=":"
t["&"]="?"

if file and result_file then     -- если файлы открылись
    for v in file:lines() do
        result_file:write(string.gsub(v, ".", t).."\r\n")  -- поиск и замена текста из таблицы 't'
    end

    file:close()
    result_file:close()
else
    log ("Файлы отсутствуют или недоступны для чтения/записи")
end

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 20:27
Сообщение #17


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Код
--lua
local s1 = '"Hello!"'        -- в одинарных кавычках допускаются двойные
local s2 = "'Hello!'"        -- в двойных кавычках допускаются одинарные
local s3 = [['"Hello!"']]    -- в двойных квадратных скобках допускаются любые символы
log (s1)
log (s2)
log (s3)
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.1.2019, 21:02
Сообщение #18


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26576
Пользователь №: 16.971
Возраст: 29



Код
t["<"]="Б"
t[">"]="Ю"
t["?"]=","

В луа хоть весь код можно писать в 1 строку.
Код
t["<"]="Б"   t[">"]="Ю"    t["?"]=","

Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.1.2019, 21:08
Сообщение #19


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
local s3 = [['"Hello!"']] -- в двойных квадратных скобках допускаются любые символы

local s4 = [====['"Hello!"']====]
расширенный вариант двойных скобок. В таком варианте допускаются вложенные двойные скобки. Количество знаков = может быть любым, но одинаковым при открытии и закрытии. Все остальное будет считаться текстом.

Сообщение отредактировал DarkMaster - 27.1.2019, 21:08


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 28.1.2019, 1:16
Сообщение #20


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1320
Пользователь №: 18.346
Возраст: 25



Помогите создать маску для url-декодера... (IMG:style_emoticons/default/unsure.gif)
у нас буквы пишутся в таком виде состоят из 6 символов из которых 3 постоянные(подчеркнуты в примере):
Г = %d0%93
р = %d1%80
некоторые символы(их немного ; : @ & = + $ , / ? % # [ ]) по 3 знака, где 1й постоянный, 2-ой не d
пробел = %20 или же =+
# = %23
{ = %7B
есче иногда к примеру в коде используются буквы разных регистров, например буква Я может быть записана в таком виде %d0%af или же %D0%AF но маленькая буква я может быть представлена в таком виде %d1%8f или %D1%8F. Можно ли учесть для разных регистров маску или необходимо их дублировать?
Вот так пишется слово Код => %D0%9A%D0%BE%D0%B4
если записать через пробел то будет так %D0%9A+%D0%BE+%D0%B4
или так %D0%9A%20%D0%BE%20%D0%B4
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

4 страниц V  1 2 3 > » 
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 12:14
Designed by Nickostyle