Splitter 5 - Splitter.SplitTextByCharacterTransition или List vs Text

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



Всем привет!

Продолжаем тему сплиттеров. До этого мы делили текст по разделителю (подстроке), который удалялся в результате разделения. Теперь рассматриваем варианты, когда нужно разделить, но сохранить все символы.

Сегодняшний пациент

Splitter.SplitTextByCharacterTransition(before as anynonnull, after as anynonnull) as function


Два аргумента - before и after - определяют наборы символов по переходу с которых на которые нужно делить. Каждый аргумент может быть представлен либо списком символов, либо функцией от символа, возвращающей true/false. Ну и смотрим пример:

let

from = {"GC2SB230","OF+65HB","GC2SB250","GC2KP250S"},

/* надо получить {"GC2SB","OF+","GC2SB","GC2KP"}

- т.е. удалить последний набор цифр и всё, что после него*/



to = List.Transform(from,(x)=>Text.Combine(List.RemoveLastN(Splitter.SplitTextByCharacterTransition({"A".."Z","+"},{"0".."9"})(x),1))),



to1 = List.Transform(from,(x)=>Text.Combine(List.RemoveLastN(Splitter.SplitTextByCharacterTransition((x)=>not List.Contains({"0".."9"},x),{"0".."9"})(x),1))),



lst = List.Buffer({"0".."9"}),

to2 = List.Transform(from,(x)=>Text.Combine(List.RemoveLastN(Splitter.SplitTextByCharacterTransition((x)=>not List.Contains(lst,x),lst)(x),1))),



txt = "0123456789",

to3 = List.Transform(from,(x)=>Text.Combine(List.RemoveLastN(Splitter.SplitTextByCharacterTransition((x)=>not Text.Contains(txt,x),(x)=>Text.Contains(txt,x))(x),1)))

in

to3


to – просто делим по двум спискам символов, это самый медленный вариант – поскольку мы перечисляем большое количество символов, предшествующих цифрам



to1 –
поступаем умнее – делим по переходу с не цифр на цифры – здесь заменили один список функцией, такое разделение будет идти шустрее



to2 –
вспомнили, что «..» - это оператор перечисления, и чтобы он не вычислялся большое количество раз, один раз получили список цифр и запихнули его в буфер – ещё бонус к скорости

и раньше я бы на этом закончил…



НО!

to3 – а кто, собственно, сказал, что проверять нужно именно список… Возьмём текст из 10 цифр и осуществим проверку на нём…

… а что из этого получилось смотрите в обзоре на Ютубе



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



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

Всех благ!

@buchlotnik