Splitter 3 - Splitter.SplitTextByDelimiter, Splitter.SplitTextByAnyDelimiter или когда порядок имеет значение…

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



Всем привет!

Продолжаем разбор сплиттеров. Сегодняшние пациенты:

Splitter.SplitTextByDelimiter(delimiter as text, optional quoteStyle as nullable number) as function

Splitter.SplitTextByAnyDelimiter(delimiters as list, optional quoteStyle as nullable number, optional startAtEnd as nullable logical) as function


Первый делит текс по указанному разделителю, второй – по набору разделителей.

Вместо кучи слов смотрим на пример:

let

from = #table({"num","txt"},{{1,"мама мыла раму"},{2,"мама мыла раму"},{3,"мама,мыла, раму"},{4,"мамаоченьмылачастораму"}}),

to = Table.SplitColumn(from,"txt",Splitter.SplitTextByDelimiter(" ")),

to1 = Table.SplitColumn(from,"txt",Splitter.SplitTextByAnyDelimiter({" "})),

to2 = Table.SplitColumn(from,"txt",Splitter.SplitTextByAnyDelimiter({" "," "})),

to3 = Table.SplitColumn(from,"txt",Splitter.SplitTextByAnyDelimiter({" "," "})),

to4 = Table.SplitColumn(from,"txt",Splitter.SplitTextByAnyDelimiter({" "," ",", ",","})),

to5 = Table.SplitColumn(from,"txt",Splitter.SplitTextByAnyDelimiter({" "," ",", ",",","очень","часто"}))

in

to5


to, to1 - поделилось только по пробелу

to2,to3 - сравниваем результат, выясняем, что порядок имеет значение

to4, to5 – просто демонстрация, что набор разделителей может быть разным



Что касается дополнительных аргументов, тоже есть кейс:

let

from = Excel.CurrentWorkbook(){[Name="Таблица"]}[Content],

to = Table.AddColumn(from,"Номер",(x)=>List.Last(Splitter.SplitTextByDelimiter("ИИН/БИН ",QuoteStyle.None)(x[#"Наименование бенефициара / отправителя"]))),

to1 = Table.AddColumn(from,"Номер",(x)=>List.Last(Splitter.SplitTextByAnyDelimiter({"ИИН/БИН "},null,true)(x[#"Наименование бенефициара / отправителя"])))

in

to1


to -решили проблему через quoteStyle, to1 – через startAtEnd



Ну и на закуску просто прикольный пример, тоже про сплиттеры )))

let

from = Excel.CurrentWorkbook(){[Name="Таблица"]}[Content],

f=(x)=>Function.Invoke(Record.FromList,List.Zip(List.Split(Splitter.SplitTextByAnyDelimiter({", "," "})(x),2))),

tr = Table.TransformColumns(from,{"Данные",f}),

nms = List.Distinct(List.Combine(List.Transform(tr[Данные],Record.FieldNames))),

to = Table.ExpandRecordColumn(tr, "Данные",nms)

in

to




А что тут к чему смотрите в обзоре на Ютубе



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



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

Всех благ!

@buchlotnik