Страницы: 1
RSS
Разбивка теста по логическому условию в PQ, Разбивка теста по логическому условию в PQ
 
Всем доброго дня!

Прошу помощи решить задачу с разбивкой текста в PQ:

К примеру имеем названия запчастей

РОЛИК НАТЯЖИТЕЛЯ РЕМНЯ МАЗ 9062005970\TD09-50-034 9062003770\9062004570
РАДИАТОР ОТОПИТЕЛЯ КАБИНЫ ВОДИТЕЛЯ МАЗ-103485 12.103.8101060-20
ШТОРА СВАРОЧНАЯ ТЕМНО-КРАСНАЯ DIN 9 (1400 ММ Х1800 ММ)
ПАТРОН 4300 VS ДЛЯ СТАРТЕРОВ НА ЗАЩЁЛКАХ D3,2*19,5


Необходимо разделить текст по кол-ву символов в пределах: 40 / остаток символов, но так, чтобы не рвать слова или неделимый цифровой текст

Результат:

РОЛИК НАТЯЖИТЕЛЯ РЕМНЯ МАЗ 9062005970\                TD09-50-034 9062003770\9062004570       (39 симв. / остаток)
РАДИАТОР ОТОПИТЕЛЯ КАБИНЫ ВОДИТЕЛЯ МАЗ           -103485 12.103.8101060-20                         (38 симв./ остаток)
ШТОРА СВАРОЧНАЯ ТЕМНО-КРАСНАЯ DIN 9                     (1400 ММ Х1800 ММ)                                (35 симв./ остаток)
ПАТРОН 4300 VS ДЛЯ СТАРТЕРОВ НА ЗАЩЁЛКАХ              D3,2*19,5                                               (40 симв./ остаток)

Смысл состоит в том, чтобы происходил поиск возможных последних разделителей (пробел, /, \, -) в левой части текста до 40 симв. и по ним делить текст на 2 части.
Если длина текста =< 40 симв., то он соответственно не дробится.
 
Код
// Таблица1
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Наименование", type text}, {"Длина текста", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Position", each if Text.Length([Наименование])<40 then Text.Length([Наименование]) else Text.PositionOf(Text.Start([Наименование], 40), " ", Occurrence.Last)),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Parts", each Record.FromList(Splitter.SplitTextByPositions({0,[Position]})([Наименование]), {"Part1", "Part2"})),
    #"Expanded {0}" = Table.ExpandRecordColumn(#"Added Custom1", "Parts", {"Part1", "Part2"}, {"Part1", "Part2"}),
    #"Trimmed Text" = Table.TransformColumns(#"Expanded {0}",{{"Part2", Text.Trim, type text}})
in
    #"Trimmed Text"
лишние столбцы потом можно удалить
F1 творит чудеса
 
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Split = Table.SplitColumn(Source,"Наименование",each let a=_,
    b=Text.Range(a,0,40),c=40-Text.PositionOfAny(Text.Reverse(b),
    {" ","/","\","-"}) in {try Text.Range(a,0,c-1) otherwise a,try
    Text.Range(a,c,Text.Length(a)-c)otherwise null},{"a","b"})
in
    Split
Страницы: 1
Наверх