17 - На М - кодируем/декодируем тексты с помощью кода Вижинера
Вставка
- Опубліковано 8 бер 2024
- Решаем задачку по кодированию/декодированию информации в таблице с использованием, так называемого, кода Вижинера (многоалфавитный код и придумал его НЕ Вижинер)
пы.сы. уже после записи посетила мысль, что проверять нужно не только null, поэтому правильнее функцию f изложить так:
if x is text then [a=Text.ToList(x),b=Text.Combine(List.Transform(List.Zip({a,List.Positions(a)}),g))][b] else x
Код целиком (вместо нижнего подчёркивания ставим знак больше):
(tbl,key,cr)=_
let
lst=List.Buffer({"А".."Е","Ё","Ж".."Я","а".."е","ё","ж".."я","A".."Z","a".."z","0".."9"," ",",",".",":","-"}),
c=if cr=0 then 1 else -1,
d=Record.FromList(List.Positions(lst),lst),
e=List.Buffer(List.Transform(Text.ToList(key),(x)=_Record.Field(d,x))),
n=List.Count(lst),
f=(x)=_if x is text then [a=Text.ToList(x),b=Text.Combine(List.Transform(List.Zip({a,List.Positions(a)}),g))][b] else x,
g=(x)=_lst{Number.Mod(n+Record.Field(d,x{0})+c*(e{Number.Mod(x{1},List.Count(e))}+1),n)},
to=Table.TransformColumns(tbl,{},f)
in
to
Пост на канале тут - t.me/pbi_pq_from_tank/252
Кому интересно:
мой курс по Power Query - akademia-excel.ru/powerquery?...
телега тут- t.me/pbi_pq_from_tank - Наука та технологія
Спасибо, Михаил. Все замечательно работает. Если поля дата или числа - все кроме них и меняется. Если и они нужны - типизация и тоже шифруется - дешифруется )). В итоге быстрое обезличивание данных.
Огонь решение!. Спасибо.
Отлично, только для форума не очень, ведь таблица для решения, а цифры превращаются в текст, поэтому кто захочет выложить выгрузку , например из 1с, для помощи, нарушиться смысл таблицы(
Если бы текст шифровался текстом а числа числами, и конечно же в выделенном диапазоне (работать с полями в которых не понятно нужны они или нет -кошмар😮)
Спасибо за Ваш разбор.
функция не шифрует числовые значения - так что смысл не исказится, да и простую замену только букв уже пару раз обсуждали в чате