Skittles
|
|
1 | |
Запись огромного количества строк из массива в файл Excel21.01.2010, 15:55. Показов 6453. Ответов 4
Метки нет (Все метки)
Предположим, что есть очень большой массив строковых данных (рассчитываем на пару миллионов, в идеале - 8 с хвостиком). Возможно, этот массив будет разбиваться на более мелкие. Но задача стоит в другом: как этот массив данных записать в файл xls максимально быстро на средней машине?
Реплики по поводу того, что это не целесообразно, не принимаются: у нас очень большая организация, начальство задачу поставило, мне ее нужно решить. Для справки: Текстовый файл с выгруженным в него массивом этих данных в 700 тыс. строк весит порядка 20 метров. |
21.01.2010, 15:55 | |
Ответы с готовыми решениями:
4
Парсинг строк из огромного текстового файла из конца в начало средствами VBA Excel быстро Запись в файл только тех строк, длина которых не менее заданного количества символов Запись в файл массива строк Запись всего массива строк в файл |
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
|
|
21.01.2010, 17:37 | 2 |
если нужно все очень так быстро пиши на Си,если все таки на джава юзай либу JExcel
0
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|
21.01.2010, 19:08 | 3 |
Skittles, откуда массив. в каком первоначальном виде он представлен?
соглашусь с Mecid, на Сишнике быстрее получиться, можно даже поэксперементировать. примерчик исходных данных если не сложно выложите, не обязательно рабочии, просто для понимания, что откуда перегнать. можно типовые данные, а я их сам размножу. если желание попробовать не пройдёт выложу итог сравнения
1
|
Skittles
|
||||||
22.01.2010, 18:33 | 4 | |||||
Mecid, проблема в том, что не в моей компетенции решать на чем писать. стоит задача сделать это на Java. JExcel - библиотека, официально не использующаяся у нас на предприятии, и чтобы ввести ее в "оборот" нужно каждой инстанции доказывать ее необходимость (месяц примерно), а потом еще пару месяцев вводить в эксплуатацию.
TanT, массив на данный момент ввыводится из базы данных (даже не подскажу какая именно СУБД) в текстовый файл. кстати все несколько плачевней: массив из 120 тыс. строк весит 20 метров. но сейчас другими людьми разрабатывается метод, который будет заполнять таблицу в БД. но и тут еще вопрос не решенный. вообще моя задача состоит в том, чтобы извлеченные данные в ArrayList из любого файла (эти данные заранее выгружаются в ArrayList другим методом, написанным другим человеком; код, который на данный момент действует, могу кинуть) записать в в эксэлевский файл, оформленный в своего рода отчет. структура строк и пример на данный момент выглядят следующим образом: собственно метод, который сейчас "работает", но весьма медленно. public void WriteXLS(HashMap sheets)
пс: править и сокращать было лень. думаю, для ознакомления вполне сойдет... извините, если что (: |
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|
24.01.2010, 09:44 | 5 |
Skittles, сейчас смотрю ваш ответ и у меня возникают некоторые вопросы по структуре, получается, что для формирования отчёта выполняются следующие действия:
1. вытащить данные из базы, записав из в фаил 2. считать все данные из файла в ArrayList (вот тут вопрос, я правильно понял что все или всётаки построчно?) 3. распарсить\преобразовать строку к виду шаблона и записать в экселевский фаил имхо, структура должна быть типа 1. вытащить данные из базы, записав из в фаил (раз так повелось) 2. сформировать пустой экселевский документ с указанными настройками + вычислить пути и время + тот интерфейс который используется в вашем примере, только вынести это всё в отдельные методы, в общем произвести всю подготовку 3. запустить один цикл чтения строк из файла, полученного в п.1 и после прочтения каждой строки разбирать её согласно вашим условиям в этом случае минимум съэкономятся ресурсы на хранение всего объёма данных в памяти и на его чтение. так же не совсем понятна необходимость анализа jComboBox_TK в процессе преобразования, значение может меняться? или оно всё таки статично с начала преобразования массива данных. если так, то можно провести анализ до преобразования и передовать в итоговый метод разбора соответсвующий флаг. анализ булевской переменной быстрее, чем анализ текста в вашем объекте. ещё немного можно съэкономить на цикле for (int i = 0; i < keys.length; i++) если заменить на for (int i = keys.length; --i>=0; ) экономия ощущается при больших значениях keys.length;, однако это применимо, если вам не важен порядок следования Итого: 1. структурировать код, разбив его на методы: "инициализация", "парсинг" 2. избавиться от массива (если возможно) 3. уменьшить издержки на анализ условий 4. по эксперементировать с временем выполнения методов - завести таймер и вычислять время выполнения метода в данный момент для меня не совсем очевидны некоторые проверки, так как я не владею всей информацией, в том числе состоянием объектов jComboBox_TK и подобного. в общем высказался, не уверен, что всё конструктивно, поправите если где-то заблуждаюсь
0
|
24.01.2010, 09:44 | |
24.01.2010, 09:44 | |
Помогаю со студенческими работами здесь
5
Запись в файл строк/и в виде байтого массива Запись массива в файл и чтение из него строк Запись в текстовый файл двумерный массива из n-строк и m-столбцов Добавление в ListBox огромного количества данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |