Forum Webscript.Ru

Программирование => Perl => Тема начата: SPEED от 19 Октября 2004, 15:21:12

Название: Чтение Excel файла
Отправлено: SPEED от 19 Октября 2004, 15:21:12
Ситуация следующая.
На хостинге стоят ограничения по используемой памяти скриптом.
Файл xls весит более чем 1 мб и в нем более 5000 строк данных.
Необходимо перенести данный файл в БД MySQL.

Использую ParseExcel

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;

my $oExcel = new Spreadsheet::ParseExcel;
my $oFmtR = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => "CP1251");
my $oBook = $oExcel->Parse("$file", $oFmtR);

но последнюю строчку данного кода скрипт не заканчивает по причине нехватки памяти процессу. Проверил у себя локально perl заюзал порядка 40 мб памяти, на хостинге же отведено 32 мегабайта.

Какие будут предложения по поводу реализации перевода данных из экзеля в БД MySQL?

Не предлагать следующие варианты:
1. Сохранить xls в csv - все равно может попасться файл который будет много весить и опять будет та же ошибка
2. Разбить файл на более мелкие

Мне приходит в голову что можно попробовать брать по, например, 100 строчек из файла. Но как это реализовать на parseexel?

Ну вообщем пишите какие будут предложения.
Желательно учитывать следующее:
1. файл может весить до 20мб
2. количество записей может быть до 100000.
Название: Чтение Excel файла
Отправлено: Green Kakadu от 20 Октября 2004, 01:55:25
Цитировать
SPEED:
е предлагать следующие варианты: 1. Сохранить xls в csv - все равно может попасться файл который будет много весить и опять будет та же ошибка

м-дя, а в чем проблема считывать его не весь, а построчно и закидывать в БД?
Название: Чтение Excel файла
Отправлено: SPEED от 20 Октября 2004, 11:53:54
Ну такой вариант в принципе я тоже продумал... :)
Но мне не нравится сама суть csv - потому что люди обычно работают в экзеле и потом им надо куда-то сохранять... с определенными разделителями...

А реально как нить из экзелевского файла брать по определенному числу строк?
Название: Чтение Excel файла
Отправлено: BonJorno от 21 Октября 2004, 06:49:07
Может тебе DBD-Excel попробовать?
Название: Чтение Excel файла
Отправлено: SPEED от 21 Октября 2004, 11:03:17
Думал над этим вариантом тоже...
Но все равно перед тем как приконнектиться к файлу все равно придется его открывать, а это опять память, которой не хватит.

ПОэтому решил все таки csv, а если точнее то текстовый файл с разделителями табуляции.
Название: Чтение Excel файла
Отправлено: plushpooh от 20 Марта 2005, 16:23:30
Уважаемые, я столкнулся с такой же точно проблемой, и нашел кое-какие ссылки. Правда на англйском, но все почти все понятно :)

http://perlmonks.thepen.com/379743.html

http://www.hippo2000.info/cgi-bin/KbWikiE/KbWiki.pl?cmd=disp&page=Spreadsheet%3A%3AParseExcel%3A%3ADump

http://www.log2.net/Code/xls2html.pl

В принципе все об одном и том же. К сожалению, для меня не подходит "поячеечный" разбор, т.к. анализирую данные одновременно в разных ячейках. Но может, кому и пригодится..