Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Pq Замена последнее не пустое по столбцу на null
 
Доброго времени суток всем!
Есть запрос для массовой обработки файлов, написал код, который вполне себе работает.
Но со временем файлы будут добавляться.
Часть избыточного, как мне кажется, кода привел в примере.
Помогите сократить количество шагов
Благодарю
 
а можно поподробнее - не пустое по столбцу или по строке? строк всегда одна или могут быть варианты?
Каждому For свой Next
 
buchlotnik, строка всегда одна - у меня это группировка по двум столбцам в общем коде

мне кажется я вроде встречал на форуме решение похожей задачи,
поиском что-то ничего пока найти не получилось,
поэтому решение наверно избыточное по кол-ву шагов, но рабочее
возможно кто-нибудь предложит более универсальное решение
 
чутка быстрее
Код
let
    from = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    f=(x)=>[    a = x{0}, 
                b = List.PositionOf(Record.ToList(a),null,Occurrence.Last,(s,c)=>c<>s),
                c = Table.FromRecords({Record.TransformFields(a,{Table.ColumnNames(x){b},(x)=>null})})][c],
    to = f(from)
in 
    to
Каждому For свой Next
 
Еще варик:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    Replaced = Table.ReplaceValue(Source,0,0,(x,y,z)=>null,{Table.ColumnNames(Source){List.Count( List.RemoveLastN( Table.ToRows( Source ){0}, each _=null ) )-1}})
in
    Replaced
Изменено: PooHkrd - 25 фев 2021 22:31:41
Вот горшок пустой, он предмет простой...
 
интересно по скорости (среднее по 1000 запусков):
Изменено: buchlotnik - 25 фев 2021 22:57:17
Каждому For свой Next
 
buchlotnik, я еще по решениям от Андрея VG обратил внимание, что работа с записями обычно дает самые быстрые результаты.
Вот горшок пустой, он предмет простой...
 
PooHkrd, так а ReplaceValue разве не построчно идёт? Для меня просто загадка, почему в скорости проигрывает
Каждому For свой Next
 
Ещё вариант:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    cols = Table.ColumnNames(Source),
    f = (l,n)=>List.RemoveLastN(l,n),
    x = Record.ToList(Source{0}),
    list = f(f(x, each _ = null),1),
    result = #table(cols,{}) & #table(List.FirstN(cols,List.Count(list)),{list})
in
    result

Возможно, с List.Buffer на шагах cols и list было бы чуток быстрее.

Изменено: Aleksei_Zhigulin - 26 фев 2021 00:36:45
 
на 100 прогонах

Табличка в одну строку, буфер только память тратит похоже
Изменено: buchlotnik - 26 фев 2021 07:24:23
Каждому For свой Next
 
Благодарю, всех за ваши варианты решения
Изучаю
Изменено: Mirdv - 26 фев 2021 08:07:12
 
Доброе время суток.
А так, понатырив у вас коллеги.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    colNames = Table.ColumnNames(Source),
    row = Table.ToRows(Source){0},
    colId = List.PositionOf(row, null, Occurrence.Last, (s, c) => s <> c),
    transformList = {{colNames{colId}, (x) => null}},
    result = Table.TransformColumns(Source, transformList)
in
    result
Изменено: Андрей VG - 26 фев 2021 08:14:42
 
Андрей, большое спасибо за код)
 
Mirdv, а другим участникам - спасибо - у них не код разве?!
 
Андрей, я ни про кого не забыл
пост #11
 
Цитата
Mirdv написал:
пост #11
Упс :(  Приношу свои извинения.
 
Цитата
Андрей VG написал:
А так
на 100 прогонах (комп не домашний, чутка медленнее):
Каждому For свой Next
 
buchlotnik, в общем код от ТС на втором месте. Уделал нас всех как бог черепаху!  :D
Mirdv, как видите не всегда краткость кода полезна для скорости его выполнения. Так что не выпендривайтесь и слушайте вашу любимую песню Валенки! пользуйтесь своим кодом.  ;)
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
код от ТС на втором месте
ну да и при этом мой только
Цитата
buchlotnik написал:
чутка быстрее
и вообще собственноручно написанный он всегда понятнее и приятнее в обращении, ИМХО

ещё помучал комп на работе, ничего не поменялось, кроме абсолютных величин:
Изменено: buchlotnik - 26 фев 2021 12:12:06
Каждому For свой Next
 
PooHkrd )))
Я померял время выполнения своего запроса
Сейчас пытаюсь прикрутить код от buchlotnik
просто интересно понять сколько времени выиграю на обработке 22 файлов
Познавательно это все, спасибо!
Страницы: 1
Читают тему (гостей: 1)
Наверх