Сталкивались ли вы с ситуацией, когда нужно обработать данные, где слова написаны без пробелов? Например, такие строки как «ЗакупкаУПоставщика» выглядят нечитаемыми и неудобными для дальнейшей работы. В этой статье мы рассмотрим простой способ решения данной проблемы при помощи инструмента Power Query от Microsoft Excel или Power BI.
Что мы будем делать?
- Добавим пробелы между словами, начинающимися с заглавной буквы.
- Переведем все буквы, кроме первой, в нижний регистр (строчные).
- Сделаем исключение для аббревиатур.
- Создаем переменную "Данные", в которую один раз сохраняем данные для преобразования.
- Сохраняем первую букву в переменой "ПерваяБуква" с помощью функции Text.Start.
- Сохраняем все остальные букву в переменой "ОстальныеБуквы" с помощью функции Text.Middle.
- В переменной "Пробелы" добавляем пробелы перед заглавными буквами, для этого:
- Преобразуем "ОстальныеБуквы" в список отдельных символов с помощью функции Text.ToList.
- Если символ является заглавной буквой, перед ним добавляется пробел. Для этого используем функцию List.Transform, которая последовательно применяет заданную операцию (добавление пробела перед заглавными буквами) к каждому элементу списка символов, для этого нам помогут следующие функции:
- Для проверки каждого символа на принадлежность списку заглавных букв используем функцию Text.Upper.
- А в случае, если буква заглавная, чтобы сцепить ее с остальным текстом, который переведем в нижний регистр, используем функцию Text.Lower.
- Сцепляем все полученные символы в строку с помощью функции Text.Combine.
- Сцепляем первую букву и все остальное буквы.
- Замещаем последовательность "е а э с" на "ЕАЭС" с помощью функции Text.Replace
Вариант без комментариев:
Данные = [Операция],
ПерваяБуква = Text.Start(Данные, 1),
ОстальныеБуквы = Text.Middle(Данные, 1),
Пробелы = Text.Combine( List.Transform(Text.ToList(ОстальныеБуквы),each if _ = Text.Upper(_) then " " & Text.Lower(_) else _ ) ), Сборка = ПерваяБуква & Пробелы, ТекстФинал = Text.Replace(Сборка, "е а э с", "ЕАЭС")in
ТекстФинал
Ниже формула с комментариями:
Данные = [Операция],
// Сохраняем первую букву в переменой:
ПерваяБуква = Text.Start(Данные, 1),
// Сохраняем все остальные букву в переменой:
ОстальныеБуквы = Text.Middle(Данные, 1),
// Добавляем пробелы перед заглавными буквами: Пробелы = Text.Combine(// Функция последовательно применяет заданную операцию (добавление пробела перед заглавными буквами) к каждому элементу списка символов: List.Transform( // Исходная строка преобразуется в список отдельных символов:Text.ToList(ОстальныеБуквы), // Каждый символ проверяется на принадлежность списку заглавных букв. Если символ является заглавной буквой, перед ним добавляется пробел: each if _ = Text.Upper(_) then " " & Text.Lower(_) else _ ) ), // Сцепляем первую букву и все остальное буквы, которые переводим в нижний регистр: Сборка = ПерваяБуква & Пробелы, // Замещаем последовательность "е а э с" на "ЕАЭС": ТекстФинал = Text.Replace(Сборка, "е а э с", "ЕАЭС")in
ТекстФинал
Вид функции в Расширенном редакторе запросов:

Заключение
Теперь ваши данные будут выглядеть красиво и удобно для анализа! Этот подход позволит вам быстро автоматизировать обработку данных даже если они содержат большое количество записей.
Надеюсь, этот небольшой лайфхак поможет вам сэкономить время и упростить работу с большими объемами информации. Удачи в ваших проектах и до новых встреч!
