Forum Webscript.Ru
Программирование => Perl => Тема начата: 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.
-
SPEED:
е предлагать следующие варианты: 1. Сохранить xls в csv - все равно может попасться файл который будет много весить и опять будет та же ошибка
м-дя, а в чем проблема считывать его не весь, а построчно и закидывать в БД?
-
Ну такой вариант в принципе я тоже продумал... :)
Но мне не нравится сама суть csv - потому что люди обычно работают в экзеле и потом им надо куда-то сохранять... с определенными разделителями...
А реально как нить из экзелевского файла брать по определенному числу строк?
-
Может тебе DBD-Excel попробовать?
-
Думал над этим вариантом тоже...
Но все равно перед тем как приконнектиться к файлу все равно придется его открывать, а это опять память, которой не хватит.
ПОэтому решил все таки csv, а если точнее то текстовый файл с разделителями табуляции.
-
Уважаемые, я столкнулся с такой же точно проблемой, и нашел кое-какие ссылки. Правда на англйском, но все почти все понятно :)
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
В принципе все об одном и том же. К сожалению, для меня не подходит "поячеечный" разбор, т.к. анализирую данные одновременно в разных ячейках. Но может, кому и пригодится..