209 похожих чатов

Приветствую ещë раз! На этот раз прикладываю файл с тестовой

выборкой. На ней всë работает, но глохнет на полном датасете в 33к строк.
Проблемные шаги обозначены приставкой PROBLEM.
Вопрос #1 в том, можно ли оптимизировать регулярку в пользовательской функции? Например, чтобы она не запускалась на каждой строке с данными, а каким-то образом один раз обрабатывала полный столбец?
Проблема #2 может и не проблема вовсе, но если чей-то цепкий взгляд сможет предложить, как второй PROBLEM шаг оптимизировать, буду крайне благодарен.

8 ответов

24 просмотра

регулярку оптимизировать нельзя - оптимизация состоит в отказе от регулярок (x as text)=> let lst = Text.SplitAny(x," :,"), nums ={"0","1","2","3","4","5","6","7","8","9"}, starts=List.Buffer(List.Skip(nums,5)), tr=List.Transform(lst,(i)=>Text.Select(i,nums)), rem = Text.Combine(List.Distinct(List.Select(tr,(i)=>Text.Length(i)=10)),", ") in rem

Ilya-Koshi Автор вопроса
Mikhail Muzykin
screenshot регулярку оптимизировать нельзя - оптимизация сост...

Огромное спасибо! В отличие от стандартной регулярки - я так и не смог понять, как это работает, видимо всë-таки постичь М мне не дано 🥲

Ilya-Koshi Автор вопроса
Maxim Zelensky
Миша, а starts ты не забыл применить?

А куда его воткнуть? Я так понял в последний шаг, но поскольку не понимаю, что происходит в этой функции примерно с середины, не уверен что смогу поправить самостоятельно.

Maxim Zelensky
Миша, а starts ты не забыл применить?

я показал принцип - там вообще не по одному документу по строке может быть

Ilya-Koshi Автор вопроса
Mikhail Muzykin
я показал принцип - там вообще не по одному докуме...

То что там несколько находит это не проблема, главное чтобы лишнее не принималось за документ, то что начинается на 0-4 это мусор

Ilya Koshi
То что там несколько находит это не проблема, глав...

(x as text)=> let lst = Text.SplitAny(x," :,"), nums ={"0","1","2","3","4","5","6","7","8","9"}, starts=List.Buffer(List.Skip(nums,5)), tr=List.Transform(lst,(i)=>Text.Select(i,nums)), rem = Text.Combine(List.Distinct(List.Select(tr,(i)=>Text.Length(i)=10 and List.Contains(starts,Text.Start(i,1)))),", ") in rem

Ilya-Koshi Автор вопроса
Mikhail Muzykin
(x as text)=> let lst = Text.SplitAny(x," :,")...

Ещë раз благодарю, на тестовом значении 2.... теперь корректно отработало! 😮‍💨😮‍💨😮‍💨

Похожие вопросы

Обсуждают сегодня

Карта сайта