Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсинг очень большого csv файла
 
 автор: t4f   (23.01.2007 в 17:54)   письмо автору
 
 

Здраве будьте!
У меня есть csv файл - 7000 строк. Пробовал использовать свой очень простой класс - internal server error.
Вот мой класс:

<?
class Csv2Array
{
    private 
$csvFile = array();
    private 
$separator;
    private 
$array = array();
    
    public function 
__construct($csvFile$separator)
    {
        
$this->csvFile file($csvFile);
        
$this->separator $separator;
        
$this->setArray();
    }
    
    private function 
setArray()
    {
        
//$i=0;
        //echo 'start <br>';
        
foreach($this->csvFile as $ar)
        {
            
//$i++;
            
$this->array[] = explode($this->separator$ar);
            
//echo 'str '.$i.'<br>';
        
}
        
//echo 'end <br>';
    
}
    
    public function 
getArray()
    {
        return 
$this->array;
    }
}
?>


грубо говоря, класс принимает файл и возвращает массив.

Помогите разобраться с классом, да и просто с этой ситуацией, чтобы он парсил достаточно большие массивы.

   
 
 автор: Trianon   (23.01.2007 в 17:55)   письмо автору
 
   для: t4f   (23.01.2007 в 17:54)
 

чем Вам не подошла fgetcsv()?

   
 
 автор: t4f   (23.01.2007 в 18:01)   письмо автору
 
   для: Trianon   (23.01.2007 в 17:55)
 

тем, что надо определять максимальную длину строки.

   
 
 автор: Trianon   (23.01.2007 в 19:03)   письмо автору
 
   для: t4f   (23.01.2007 в 18:01)
 

По-моему, это меньшее зло.
Просто резать строки по сепараторам - грубейшее нарушение. Строчки с полями, содержащими кавычки и сами сапараторы, будут прочтены с ошибками.
Кстати, в PHP 5 считать длину не треуется.
Но в любом случае - это меньшее зло. Не говоря уже о том, что хорошим файлом в 7 тысяч строк, скрипт можно просто завалить на INSUFFITIENT MEMORY.

   
 
 автор: t4f   (26.01.2007 в 12:09)   письмо автору
 
   для: Trianon   (23.01.2007 в 19:03)
 

А как быть, если разделитель не по умолчанию, а к.л. другой символ, например, #? Ведь объявление функции array fgetcsv ( resource handle [, int length [, string delimiter [, string enclosure]]] ) и параметр разделителя стоит на третьем месте.

   
 
 автор: Trianon   (26.01.2007 в 12:24)   письмо автору
 
   для: t4f   (26.01.2007 в 12:09)
 

Поскольку php5 может и не оказаться, а пробежаться по файлу - недолго, я макс.размер строки считаю в любом случае, если Вы об этом.
Но мне ни разу не попадались csv с левыми разделителями.

Я как-то попроовал написать оптимизированную версию парсера csv.
Овчинка выделки не стоит. Всё равно встроенная реализация быстрее. Хотя и глупее.

   
 
 автор: t4f   (26.01.2007 в 13:30)   письмо автору
 
   для: Trianon   (26.01.2007 в 12:24)
 

Понятно. Спасибо. У меня как раз разделители - #

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования