Страницы: 1
RSS
PQ. Разделить текст на строки
 
Добрый вечер.
Колонка запроса содержит текст типа "А.В.С (9, 10, 11)".
Помогите, пожалуйста, это преобразовать в три строки из примера: "А.В.С (9), А.В.С (10), А.В.С (11)"?
Как разделять на строки - разобрался, а вот с заменой кусков текста пока туговато... Не догоняю, как применить https://docs.microsoft.com/ru-ru/powerquery-m/text-replace
-----------------------------
вопрос решил методом проб и ошибок, тему можно удалить
Изменено: jeka-irbis - 26.12.2019 23:31:41
 
"в лоб":
Код
let
    from = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],
    split = Table.SplitColumn(from, "РД", Splitter.SplitTextByEachDelimiter({"("}, QuoteStyle.Csv, false), {"РД.1", "РД.2"}),
    rep = Table.ReplaceValue(split,")","",Replacer.ReplaceText,{"РД.2"}),
    split2 = Table.ExpandListColumn(Table.TransformColumns(rep, {{"РД.2", Splitter.SplitTextByDelimiter(", ")}}), "РД.2"),
    add = Table.AddColumn(split2, "РД", each [РД.1]&" ("&[РД.2]&")"),
    to = Table.RemoveColumns(add,{"РД.1", "РД.2"})
in
    to
Соблюдение правил форума не освобождает от модераторского произвола
 
Еще вариант:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],
    SplitColumnByFirstSpace = Table.SplitColumn(Source, "РД", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"РД.1", "РД.2"}),
    ReplacedValue = Table.ReplaceValue(SplitColumnByFirstSpace,", ","),(",Replacer.ReplaceText,{"РД.2"}),
    SplitColumnToRows = Table.ExpandListColumn(Table.TransformColumns(ReplacedValue, {{"РД.2", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "РД.2"),
    MergedColumns = Table.CombineColumns(SplitColumnToRows,{"РД.1", "РД.2"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"РД")
in
    MergedColumns

Абсолютно все шаги сделаны кнопульками, только переименованы слегка для красоты
Вот горшок пустой, он предмет простой...
 
del
Изменено: artyrH - 27.12.2019 11:39:51 (уже есть такое же)
 
Ещё вариант:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],
    replace = Table.ReplaceValue(Source,0,0,(a,b,c)=>let x = Text.BetweenDelimiters(a,"(", ")"), y = Text.Split(a, x) in List.Transform(Text.Split(x, ", "), each y{0}&_&y{1}),{"РД"}),
    expand = Table.ExpandListColumn(replace, "РД")
in
    expand
 
Aleksei_Zhigulin, Вы тоже не сможете раскрыть подробности создания шага replace? какие были предварительные шаги в процессе создания этого шага?
а то решение интересное, а как делается это решение - не понимаю .  
 
artyrH, читайте эту тему. Там Максим Зеленский подробно разбирал, как можно вместо стандартных риплейсеров сочинять свои собственные.
Вот горшок пустой, он предмет простой...
 
artyrH, вот в этой теме публиковал картинку, которая позволяет понять, что такое a, b, c. А дальше просто описываем, что мы хотим сделать с каждым значением в столбце "РД" (т.е. a) - найти список чисел между разделителями и оставить между разделителями только по одному числу из списка.
 
PooHkrd, Aleksei_Zhigulin, спасибо. Очень информативно!
Страницы: 1
Наверх