Страницы: 1
RSS
PQ; Замена значений с интервалом.
 
День добрый, господа!
Какой функцией можно провернуть следующие:
Бочка меда Стакан воды Кружок альпиниста    на
Бочок меда, Стакан воды, Кружок альпиниста, ...
т.е. каждый второй пробел заменить на запятую?

Table.ReplaceValue как понял, это не предусматривает.
За ранее благодарю за подсказку  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Своей собственной. Или макросом - если нужно в этом же месте.
примерно так
Код
Function ЗАМЕНА_ПРОБЕЛА(Cel$) As String
    Dim A, i&
    A = Split(Cel)
    For i = 1 To UBound(A) - 1 Step 2
        A(i) = A(i) & ","
    Next
    ЗАМЕНА_ПРОБЕЛА = Join(A)
End Function
Изменено: Михаил С. - 13.11.2018 17:39:25
 
Вот такой вариант:
Код
let
    Источник = "Бочка меда Стакан воды Кружок альпиниста",
    ВСписок = Text.Split(Источник, " "),
    Четные = List.Alternate(ВСписок,1,1),
    Нечетные = List.Difference(ВСписок, Четные),
    Сбор = List.Zip({Нечетные, Четные}),
    ТекстЧерезПробел = List.Transform(Сбор, each Text.Combine(_, " ")),
    ТекстЧерезЗапятую = Text.Combine(ТекстЧерезПробел, ",")
in
    ТекстЧерезЗапятую

Но стопудово как-то можно перебрать все пробелы и каждый второй заменить на запятую.
Изменено: PooHkrd - 13.11.2018 18:10:24
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Но стопудово как-то можно перебрать все пробелы и каждый второй заменить на запятую.
стандартными функциями в одной ячейке? Нет
 
Михаил С., я имел ввиду в PQ. Вроде ТС просил решение именно в этом инструменте.
Вот горшок пустой, он предмет простой...
 
Код
// SplitBy2ndSpace
let
    Source = "Бочка меда Стакан воды Кружок альпиниста",
    Spaces = List.PositionOf(Text.ToList(Source)," ",Occurrence.All),
    SplitPositions = {0} & List.Alternate(Spaces,1,1),
    SplitBySecondSpace = Splitter.SplitTextByPositions(SplitPositions)(Source),
    Combined = Text.Combine(SplitBySecondSpace,",")
in
    Combined
F1 творит чудеса
 
Михаил С.,Макросы не подходят, т.к. перед и после нужно обрабатывать через  PQ
Максим Зеленский, PooHkrd, Завтра испробую, отпишусь
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
PooHkrd, Ваш метод применил, спасибо!
Но тут же нашел значения, которые не подходят под это решение. Нужно думать о другом подходе.  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, мой попробовали?
F1 творит чудеса
 
Так?
Код
Sub test()
    Const txt1$ = "Бочка меда Стакан воды Кружок альпиниста"
    Dim i&, txt$, j&
    For i = 1 To Len(txt1)
        If Mid(txt1, i, 1) = " " Then j = j + 1
        If j = 2 Then txt = txt & ", ": j = 0 Else txt = txt & Mid(txt1, i, 1)
    Next i
    MsgBox txt
End Sub

Опа, не заметил, что макрос не подходит, но на всяк случай оставлю, авось кому пригодится  :D
Изменено: Nordheim - 14.11.2018 16:23:38
"Все гениальное просто, а все простое гениально!!!"
 
Максим Зеленский, Нет, я когда методом PooHkrd, сделал, сразу увидел погрешности и переключился на них.
Вас это, надеюсь, не обидит? ))
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, отнюдь :)
Просто любопытно, решает ли мой метод задачу с учетом погрешностей
F1 творит чудеса
Страницы: 1
Наверх