Splitter 6 - Splitter.SplitTextByRepeatedLengths, Splitter.SplitTextByLengths или когда длина имеет значение…

#АнатомияФункций - Splitter.SplitTextByRepeatedLengths, Splitter.SplitTextByLengths



Всем привет!



Продолжаем тему сплиттеров. Сегодня на повестке:

Splitter.SplitTextByRepeatedLengths(length as number, optional startAtEnd as nullable logical)

Splitter.SplitTextByLengths(lengths as list, optional startAtEnd as nullable logical)


Оба сплиттера вообще не ориентируются на подстроки и конкретные символы – их интересует только необходимая длина подстроки.



Смотрим примеры:



-приводим в божеский вид МАС-адреса (разбираем строку по 2 символа)

let

from = #table({"MAC"},{{"001A2B3C4D5E"},{"0815752B9ADC"},{"096C2ABD7534"}}),

f=(x)=>Combiner.CombineTextByDelimiter("-")(Splitter.SplitTextByRepeatedLengths(2)(x)),

to = Table.TransformColumns(from,{"MAC",f})

in

to




- делаем «красивое» текстовое представление чисел (обращаем внимание на второй аргумент – разбираем по тройкам с конца)

let

from = #table({"num"},{{1},{12},{123},{1234},{12345},{1234567},{12345678}}),

f=(x)=>Text.Combine(Splitter.SplitTextByRepeatedLengths(3,true)(Text.From(x))," "),

/*хотя можно и Number.ToText(x,"N0")*/

to = Table.TransformColumns(from,{"num",f})

in

to




- наводим порядок в номерах телефонов (задаём нужные длины с конца, обращаем внимание, что в итоге вынимаются не все символы, а только текст заданных длин):

let

from = #table({"tel"},{{"+79871234567"},{"89876543210"}}),

f=(x)=>[a=Splitter.SplitTextByLengths({2,2,3,3},true)(x),

b=Text.Format("+7 (#{0}) #{1}-#{2}-#{3}",a)][b],

to = Table.TransformColumns(from,{"tel",f})

in

to




Как-то так – функции нечасто используемые, но в отдельных случаях прям мастхев)



… демонстрация работы с комментариями, как всегда, на Ютубе



Лайк, коммент, подписка приветствуются )))



Надеюсь, было полезно.

Всех благ!

@buchlotnik