Удаляем текст в скобках (без регулярок и СМС)

#АнатомияФункций – приёмы



Всем привет!

Сегодня разбираем задачку «Как можно в столбце удалить все значения в скобках?».



Для начала решим «строго по условию»:

let

f=(x)=>[a=List.Transform(List.Split({-1}&List.RemoveLastN(Text.PositionOfAny(x,{"(",")"},Occurrence.All),1),2),(x)=>{x{0}+1,x{1}-x{0}-1}),

b=Text.Combine(Splitter.SplitTextByRanges(a)(x))][b],



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

to = Table.TransformColumns(from,{"Столбец1",f})

in

to


Делим строго по скобкам… но как-то сложно и медленно.

ОК, что насчёт рекурсии?

let

f=(x)=>[a=Text.PositionOf(x,"("),

b=if a = -1 then x else @f(Text.RemoveRange(x,a,Text.PositionOf(x,")")-a+1))][b],



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

to = Table.TransformColumns(from,{"Столбец1",f})

in

to


Так, как минимум, быстрее, да и поприкольнее.



Вот только надо ли оно всё?

Если больше не к чему привязаться – надо, а в конкретном случае можно:

let

f=(x)=>Text.Combine(List.Transform(Text.Split(x,", "),(x)=>Text.Split(x,"("){0}),", "),

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

to = Table.TransformColumns(from,{"Столбец1",f})

in

to


let

f=(x)=>Text.Combine(List.Select(Text.SplitAny(x,"(,"),(x)=>not Text.Contains(x,")")),","),

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

to = Table.TransformColumns(from,{"Столбец1",f})

in

to


let

f=(x)=>Text.Combine(List.Alternate(Text.SplitAny(x,"(,"),1,1,1),", "),

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

to = Table.TransformColumns(from,{"Столбец1",f})

in

to


Бонус на формулах и объяснение того, что тут к чему, как всегда, смотрим на Ютубе

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



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

Всех благ!

@buchlotnik