Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Сентябрь 2019, 16:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как открыть файл csv объемом 1.7Гб в LO Calc  (Прочитано 914 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dd4
Участник
**
Offline Offline

Сообщений: 28


« Стартовое сообщение: 30 Март 2019, 17:19 »

Добрый день.
Имеется файл объемом около 1,7Гб в формате csv. При попытке открыть его в ЛО - пишет, что недостаточно памяти.
Порезал его на куски по 10000 строк - открывается без проблем.
Но мне нужно делать поиск информации в таком файле - а каждый раз открывать по 10000 строк очень накладно по времени.
Как решить вот такую проблему?
Спасибо.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 30 Март 2019, 17:31 »

Когда я столкнулся с подобным монстром, я очень быстро бросил попытки открыть эту гадость в таблице. Сразу переключился на конечную задачу - поиск и отбор нужных данных.
Файл на 90% состоял из "мусора", который для моей задачи был не нужен - какие-то дурацкие километровые ссылки на какие-то изображения, многословные описания... А выбрать из всей этой каши нужно было только колонки с артикулом, ценой и количеством.
Поэтому задачу решал макросом - открывал файл как обычный текстовый, читал его строка за строкой, с помощью SPLIT() по символу разделителю разрезал на отдельные поля, выбирал нужные в массив... "Нужные" - это в смысле, только нужные колонки и только те, что соответствовали правилам отбора - с ненулевыми количествами и положительными ценами
В самом конце создавал новую книгу Calc и вставлял получившийся массив с помощью .setDataArray()
Получилось довольно быстро, минут в пять уложился.
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
dd4
Участник
**
Offline Offline

Сообщений: 28


« Ответ #2: 30 Март 2019, 17:44 »

Да, Вы правы - из этого файла меня интересует только данные, которые указаны лишь в двух колонках.
читал его строка за строкой, с помощью SPLIT()
Т.е. Вы просматривали каждую запись? Если так, то мне не надо таким образом просматривать записи - надо просто инфо из двух колонок.
На 100 000 строк файл в формате csv занимает почти 24Мб, в формате ods (остались только нужные мне 2 колонки) - около 4Мб.
Разбил по 500 000 строк в файле. Получается, что в исходном файле более 7 000 000 строк. Я их смогу отрыть в ЛО и удалить ненужные мне столбцы. Уменьшится объем.
Подскажите, как их смотреть в одном документе? ЛО ведь не откроет файл на такое количество строк?
« Последнее редактирование: 30 Март 2019, 18:01 от dd4 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 30 Март 2019, 18:11 »

А, это не проблема - сейчас подготовлю "козу" из того старого кода... подожди немного, в текст комментариев набросаю, чтобы понятно было

UPD. Погоди, 7 миллионов строк? Так они по любому в таблицу не влезут... Тебе их просто перепаковать в другой файл надо? Или отбирать некоторые из этих строк по какому-то условию будешь и их меньше станет?
« Последнее редактирование: 30 Март 2019, 18:14 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
dd4
Участник
**
Offline Offline

Сообщений: 28


« Ответ #4: 30 Март 2019, 18:22 »

Да, очень много строк. Нужны все.
Я вот 500 000 строк (удалив ненужные колонки, осталось только 2) сохранил в формате ods.
Попробую сделать файл, в котором будет несколько листов с 1 000 000 строк каждый.
Останется потом только разобраться, как делать фильтр по всем листам одной книги.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 30 Март 2019, 18:32 »

Останется потом только разобраться, как делать фильтр по всем листам одной книги.
Так я ведь к этому и клоню - может быть стоит сразу отфильтровать? По каким условиям? Вхождение текста? Значение больше нуля? Что-то другое? Или вообще просто просуммировать отфильтрованное?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 468


« Ответ #6: 30 Март 2019, 19:12 »

7 млн строк нужно обрабатывать не в Calc
Записан

С уважением,
Михаил Каганский
dd4
Участник
**
Offline Offline

Сообщений: 28


« Ответ #7: 30 Март 2019, 19:43 »

7 млн строк нужно обрабатывать не в Calc
Согласен. Но я в этих вопросах не разбираюсь.
Все эти данные я получил с официальных сайтов - ничего пиратского.
Файл "Исходный.csv" - это отрезанный кусочек от большого файла. Файл "Результат.ods" - это то, что мне надо: 3 колонки, ну и более 7млн. строк, в которых еще и поиск надо будет делать.

* Файлы.zip (15.15 Кб - загружено 3 раз.)
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #8: 30 Март 2019, 20:03 »

Три колонки? Ты в Результат 4 колонки впихнул...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 468


« Ответ #9: 30 Март 2019, 20:13 »

Воспользуйтесь Base. При создании соединения подключитесь к имеющейся БД типа "текст".
Записан

С уважением,
Михаил Каганский
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #10: 30 Март 2019, 20:19 »

7 млн строк нужно обрабатывать не в Calc
Ой, это верно... Как по мне, файлы такого размера вообще не стоит обрабатывать - потерять его втихаря да и дело с концом... Место на диске освободится  Подмигивающий

А если серьёзно, то случаи бывают разные. Я с монстром столкнулся, когда помогал приятелю-индусу обработать такой файл. Приятель занимается конвертацией прайс-листов от разных поставщиков в фиксированный CSV-формат для выгрузки на сайт. Обычно входные файлы пристойного размера, в Calc'е обрабатываются быстро и аккуратно, все эти различные кодировки, разные форматы разделителей, разная логика для разных поставщиков - всё это работает хорошо и быстро. И приятель выстроил за несколько лет довольно стройную систему макросов, которая устойчиво работала пока не пришёл этот файл, гигантское исключение из правил. Пихать ещё один дополнительный инструмент в отлаженную систему очень не хотелось. Вот и пришлось изгаляться... Там, кстати, всё закончилось хорошо - результат был где-то полторы тысячи строк, в лист поместились.

В общем, "коза" решения выглядит вот так

Но для обработки именно этого файла - mikekaganski прав - лучше использовать Base

* ConvertVeryBigFile.ods (10.81 Кб - загружено 4 раз.)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
dd4
Участник
**
Offline Offline

Сообщений: 28


« Ответ #11: 31 Март 2019, 07:07 »

В общем, "коза" решения выглядит вот так
Подскажите, пожалуйста, как пользоваться? (Макросы я нашел, а вот что делать дальше?).
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #12: 31 Март 2019, 07:42 »

Ну, что?.. в 10-ой строке меняешь "F:\Upwork\Новые вопросы\Файлы\Исходный" на полный путь к твоему гигантскому файлу, нажимаешь F5, чтобы запустить макрос на выполнение, и идёшь выбирать Президента... Когда вернёшься, на экране будет открыта новая книга с пачкой листов "Результат 0", "Результат 1" и так далее, в которых и будут отобранные данные
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
dd4
Участник
**
Offline Offline

Сообщений: 28


« Ответ #13: 31 Март 2019, 08:54 »

и идёшь выбирать Президента
спс...ок Улыбка
Записан
Rafik
Форумчанин
***
Offline Offline

Сообщений: 95


« Ответ #14: 1 Апрель 2019, 08:29 »

Можно было этот монстр, нужные колонки, попробовать загнать в БД Base и оттуда запросом вытаскивать интересующие (отфильтрованные) строки. Будет работать если, конечно, размер вытаскиваемых данных не больше лимита по строкам в calc ЛО.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!