MyTetra Share
Делитесь знаниями!
Power Query. Формулы М. Множественная текстовая замена c List.Generate
Время создания: 07.10.2021 20:18
Текстовые метки: Power Query
Раздел: !Закладки - MSO - Excel - Power Query
Запись: adgaver/mytetra_base_New/master/base/1633627087tdt5s3smkb/text.html на raw.githubusercontent.com

Главная Power Query Power Query. Формулы М. Множественная текстовая замена c List.Generate

P ower QueryФормулы М

Power Query. Формулы М. Множественная текстовая замена c List.Generate

Описание

В текстовой строке встречаются символы, слова и словосочетания, которые нужно заменить на другие, т. е. выполнить множественную замену подстроки.

Например, «Общество с ограниченной ответственностью» нужно заменить на «ООО», «Акционерное общество» на «АО» и т. д.

Решение

Для решения задачи предварительно нужно создать 2 вспомогательных таблицы.

Первая таблица содержит перечень всех замен. Вторая таблица содержит перечень аббревиатур. Вторая таблица нужна, чтобы привести аббревиатуры к нормальному виду после первой обработки.

После импорта источника и обеих вспомогательных таблиц нужно с помощью функции List.Generate создать цикл, который в каждом значении исходного столбца будет искать каждую подстроку для замены и выполнять замены, если она встретилась.

Примененные функции

Перечень всех примененных функций:

  • Text.Proper
  • List.Last
  • List.Generate
  • Text.Lower
  • List.Count
  • Text.Replace
  • Table.Buffer
  • Excel.CurrentWorkbook
  • Table.SelectColumns
  • Table.TransformColumns

Код

Код первой пользовательской функции преобразования:

(col)=>

let

source = Text.Proper(List.Last(List.Generate(()=> [index=0, txt=Text.Lower(col)],

each [index]<=List.Count(Замена_1[Найти]),

each [index=[index]+1,

txt=Text.Replace([txt],

Замена_1[Найти]{[index]},

Замена_1[Заменить]{[index]})],

each [txt])

))

in

source

Код второй пользовательской функции преобразования:

(col)=>

let

source = List.Last(List.Generate(()=> [index=0, txt=col],

each [index]<=List.Count(Замена_2[Найти]),

each [index=[index]+1,

txt=Text.Replace([txt],

Замена_2[Найти]{[index]},

Замена_2[Заменить]{[index]})],

each [txt])

)

in

source

Код запроса с решением:

let

source = Excel.CurrentWorkbook(){[Name="Гостиницы"]}[Content],


select_cols = Table.SelectColumns(source,

{"Компания"}),


transform_col_1 = Table.TransformColumns(select_cols,

{{"Компания",

ф_Замена_1,

type text}}),


transform_col_2 = Table.TransformColumns(transform_col_1,

{{"Компания",

ф_Замена_2,

type text}})


in


transform_col_2

Excel.CurrentWorkbook List.Count List.Generate List.Last Table.Buffer Table.SelectColumns Table.TransformColumns Text.Lower Text.Proper Text.Replace

Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования