Страницы: 1
RSS
Разобрать строку на столбцы
 
Добрый день!
Имеется банковская выписка (citibank)
со строчками вида:
Скрытый текст

Как разбить данный текст на столбцы?
количество пробелов между "фрагментами" разное, так же могут быть пробелы в названии точки оплаты.
начало строки имеет несколько фиксированных видов.
ВХОДЯЩИЙ ПЕРЕВОД НА КАРТУ
ВХОДЯЩИЙ ПЛАТЕЖ В РУБЛЯХ
ДОСРОЧНЫЙ ВОЗВРАТ
ЭЛЕКТРОННЫЙ ПЛАТЕЖ
ДОСРОЧНЫЙ ВОЗВРАТ
РАЗМЕЩЕНИЕ ДЕПОЗИТА
итд
Karim
 
как раз то что разное количество пробелов дает возможность разбивать по фиксированным количествам символов.
По вопросам из тем форума, личку не читаю.
 
не все так просто (для меня)
в конце строки пробелы одинарные (выделил красным)
В первой половине разной длины (выделил синим)

Изменено: K M - 07.11.2019 00:37:29
Karim
 
K M, файл можно было прикрепить и здесь. И не картинку, а Excel-файл.
 
del
Изменено: K M - 07.11.2019 00:37:04
Karim
 
K M, зачем тут цитата? Тем более, что Вы не поняли моё сообщение. Что Вы добавили? Опять ссылку?
Повторю:
Цитата
Юрий М написал:
файл можно было прикрепить и здесь
 
Типичный текст фиксированной ширины.
Сначала удалить в конце " RUB". Затем к ячейкам с текстом применяется Данные - Текст по столбцам. Разбивка и формат данных каждого столбца понятен.
Тут можно даже макрос руками не писать - Макрорекордер почти всё запишет как надо.
 
Не на все строки срабатывает разбивка с фиксированной шириной столбца, есть операции на 50р, а есть и на 50 000р и все сползает
Karim
 
Вариант в Power Query
Код
 = let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Split = Table.SplitColumn(Source, "Столбец1", 
        (a)=> let 
            a = Text.Replace(a," RUB",""),
            b = Table.AddIndexColumn(Table.FromColumns({Text.PositionOf(a,"   ",3)}),"i",0),
            c = Table.Group(b, {"Column1","i"}, {{"a", each List.Last(_[Column1])}},0,
                    (current,checked)=>Number.From((checked[Column1]-current[Column1])>3*(checked[i]-current[i]))
                )[a],
            d = Splitter.SplitTextByPositions({0}&c)(a), 
            e = List.Transform(d,each Text.Trim(_)),
            f = Text.Split(List.Last(e)," ")
        in List.RemoveLastN(e,1)&f
    )            
in
    Table.TransformColumnTypes(Split,{
        {"Столбец1.4", type number}, 
        {"Столбец1.5", type time}, 
        {"Столбец1.6", Int64.Type}, 
        {"Столбец1.7", type number}
    },"en-us")
 
хорошо что в PQ есть кнопки :)
в примере бы все проблемные моменты
Изменено: artyrH - 07.11.2019 07:53:09
 
Спасибо!
Буду  пробовать
и еще, подскажите, вот пример 2 из https://www.planetaexcel.ru/techniques/7/5366/

При добавлении в модуль, функция LastWord не появляется, в чем может быть проблема?
Код
Function LastWord(txt As String, Optional delim As String = " ", Optional n As Integer = 1) As String
    arFragments = Split(txt, delim)
    LastWord = arFragments(UBound(arFragments) - n + 1)
End Function
Изменено: K M - 08.11.2019 10:46:14
Karim
 
Цитата
Андрей Лящук,подскажите, как воспользоваться Вашим кодом?
Karim
 
Цитата
При добавлении в модуль, функция LastWord не появляется, в чем может быть проблема?
Функцию в стандартный модуль, появляется в категории: Определенные пользователем
Страницы: 1
Наверх