Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Большие объемы данных из Excel в Delphi и обратно, 300-600 тыс. строк 
:(
    Опции темы
MacTep
Дата 21.9.2015, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Добрый день!

Почитал похожие темы, но ответа на свой вопрос не нашел.

Итак, есть достаточно большой и тяжелый excel-файл с текстовыми и числовыми данными: 300-600 тысяч строк и около 100 столбцов (размер файла около 30-80 мб). Необходимо загрузить его в программу, обработать определенные строки по определенной логике и потом сохранить изменения. Сделал свой вариант, основанный на Range. Выгружаю в память (~30 сек.), вставляю данные в VirtualTreeView (~2 минут), там редактирую (~2 минут), вставлю обратно через построчное изменение строк в исходном файле (~50 мин.). Все бы хорошо, но это не работает на компах, слабее моего домашнего, а там 16 гигов оперативки. Да и на домашнем сохранение делал такое построчное, а не тем же Range именно потому, что получил сообщение "Недостаточно памяти для выполнения операции". Отсюда и вопрос: как работать с такими большими наборами данных? Чтобы можно было программу юзать и на средней мощности компьютерах.

Может быть возможно как-то конвертить эксель в мини-базу данных или еще как-то. Рассмотрю вариант даже дополнительных специальных (может быть даже платных) компонентов.

В общем, нужен любой посильный совет. Спасибо большое.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Агрох
Дата 21.9.2015, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 6.4.2013
Где: Москва

Репутация: нет
Всего: 6



Выгружай и сохраняй не все данные, а кусками. Сначала первые сто строк, обработал, сохранил. Следующие сто строк, обработал, сохранил. Если такое вообще допустимо. Не знаю, что за данные и в чём суть обработки. Можно и не все столбцы загружать, если ты работаешь с двумя-тремя. Может тебе нужно найти только строки, содержащие определённые данные, то ещё и фильтр по содержимому строк прикрути.
Судя по тому, что обрабатываешь 2 минуты, все 600 тысяч строк и 100 столбцов тебе не нужны.
--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
MacTep
Дата 21.9.2015, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



К сожалению, вариант не подходит. Суть состоит именно в том, чтобы загрузить полностью файл. Ну или скажем, несколькло файлов более мелких, но в итоге вместе соединенных упирающихся где-то в 600к строк.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Агрох
Дата 22.9.2015, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 6.4.2013
Где: Москва

Репутация: нет
Всего: 6



Если у тебя не хватает памяти именно для загрузки всех данных, то тут ничего не поможет. Нужно сделать так, чтобы не было необходимости загружать все данные.
Насчёт мини БД, можно попробовать использовать sqlite - не требует установки, для работы нужна только dll в папке с exe-шником. Но опять же, если тебе нужно именно загрузить всё в VirtualTreeView, обработать и сохранить обратно в excel, то это тоже не поможет.
С VirtualTreeView не работал, но если основной принцип такой же как и обычных деревьев, то советую подгружать из excel наследников узла только тогда, когда узел открывается. Соответственно сохранять не всё подряд, а только те узлы, в которых были внесены изменения.
А что за данные такие? В двух словах хотя бы. И в чём суть обработки?
--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
MacTep
Дата 22.9.2015, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Скажем так, надо слепить из нескольких файлов один большой. Это список клиентов с их атрибутами всякими разными - параметров много. И все надо хранить в одном месте. И формат поменять нельзя - только эксель. Сегодня опробовал XLSReadWriteII. Дельная штука... И задачу свою выполняет. Жаль только, что дорого. Но с этим вопросом что-нибудь решим. Скорость отличная и функционала более, чем достаточно мне. Этот вариант оказался мне самым приемлемым - дешево по времени реализации, то есть менее ресурсозатратно получается как с точки зрения качества железа, на котором это все будет крутиться, так и с точки зрения затраченного времени на реализацию. )))

Это сообщение отредактировал(а) MacTep - 22.9.2015, 08:31


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1134 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.