List.Accumulate vs List.Zip - или нестандартная замена в тексе
#АнатомияФункций – List.Accumulate
Всем привет!
В чат принесли задачку по замене в тексте последовательности из нескольких длинных тире на слеш. Поскольку обычные тримы с реплейсами в этой ситуации не работают, пришлось поколдовать. По этому поводу вариант просто на функциях:
Вариант с if then else:
И вариант с аккумулятором:
Ну а о том, насколько медленный аккумулятор или короче=быстрее, рассказывается, как обычно, рассказывается на Ютубе
Лайк, коммент, подписка приветствуются )))
Надеюсь, было полезно.
Всех благ!
@buchlotnik
#АнатомияФункций – List.Accumulate
Всем привет!
В чат принесли задачку по замене в тексте последовательности из нескольких длинных тире на слеш. Поскольку обычные тримы с реплейсами в этой ситуации не работают, пришлось поколдовать. По этому поводу вариант просто на функциях:
let
f=(x)=>[lst = Text.ToList(x),
zip = Text.Replace(Text.Combine(List.Transform(List.Select(List.Zip({lst,List.Skip(lst)}),(x)=>x<>{"—","—"}),(x)=>x{0})),"—","/")][zip],
from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
to = Table.TransformColumns(from,{"txt",f})
in
to
Вариант с if then else:
let
f=(x)=>[lst = Text.ToList(x),
zip = Text.Combine(List.Transform(List.Zip({lst,List.Skip(lst)}),(x)=>if x{0}<>"—" then x{0} else if x{1}="—" then "" else "/"))][zip],
from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
to = Table.TransformColumns(from,{"txt",f})
in
to
И вариант с аккумулятором:
let
f=(x)=>List.Accumulate(Text.ToList(x),"",(s,c)=>if c<>"—" then s&c else if Text.EndsWith(s,"/") then s else s&"/"),
from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
to = Table.TransformColumns(from,{"txt",f})
in
to
Ну а о том, насколько медленный аккумулятор или короче=быстрее, рассказывается, как обычно, рассказывается на Ютубе
Лайк, коммент, подписка приветствуются )))
Надеюсь, было полезно.
Всех благ!
@buchlotnik