|
|
|
| Здраве будьте!
У меня есть 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;
}
}
?>
|
грубо говоря, класс принимает файл и возвращает массив.
Помогите разобраться с классом, да и просто с этой ситуацией, чтобы он парсил достаточно большие массивы. | |
|
|
|
|
|
|
|
для: t4f
(23.01.2007 в 17:54)
| | чем Вам не подошла fgetcsv()? | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2007 в 17:55)
| | тем, что надо определять максимальную длину строки. | |
|
|
|
|
|
|
|
для: t4f
(23.01.2007 в 18:01)
| | По-моему, это меньшее зло.
Просто резать строки по сепараторам - грубейшее нарушение. Строчки с полями, содержащими кавычки и сами сапараторы, будут прочтены с ошибками.
Кстати, в PHP 5 считать длину не треуется.
Но в любом случае - это меньшее зло. Не говоря уже о том, что хорошим файлом в 7 тысяч строк, скрипт можно просто завалить на INSUFFITIENT MEMORY. | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2007 в 19:03)
| | А как быть, если разделитель не по умолчанию, а к.л. другой символ, например, #? Ведь объявление функции array fgetcsv ( resource handle [, int length [, string delimiter [, string enclosure]]] ) и параметр разделителя стоит на третьем месте. | |
|
|
|
|
|
|
|
для: t4f
(26.01.2007 в 12:09)
| | Поскольку php5 может и не оказаться, а пробежаться по файлу - недолго, я макс.размер строки считаю в любом случае, если Вы об этом.
Но мне ни разу не попадались csv с левыми разделителями.
Я как-то попроовал написать оптимизированную версию парсера csv.
Овчинка выделки не стоит. Всё равно встроенная реализация быстрее. Хотя и глупее. | |
|
|
|
|
|
|
|
для: Trianon
(26.01.2007 в 12:24)
| | Понятно. Спасибо. У меня как раз разделители - # | |
|
|
|