CSV (Comma-Separated Values в переводе «значения разделённые запятыми») – текстовый формат файла, как правило используется для хранения табличных данных. В файле подобного типа строки таблицы соответствуют текстовой строке, поля же в свою очередь разделяются запятыми. На практике CSV-файлы используются довольно часто. Как правило посредством файлов выполняется различного рода экспорт и импорт данных. В системе битрикс с CSV-файлами приходится работать часто, и в самом Framework-е битрикса реализованы API-классы для выполнения различного рода действий над файлами.
В данном посту мы рассмотрим пример импорта CSV-файла посредством API-битрикса. В качестве входных данных в примере используется содержимое переменной $_FILES. Как мы знаем данные в $_FILES попадают при отправке файлов с формы сайта. Саму форму мы пропустим, т.к. там ничего особенного для демонстрации нет. После отправки файла на сервер, для его импорта, предварительно его следует прочитать. Чтение файла мы будем производить посредством класса CCSVData. Для этого следует подключить библиотеку с классом.
require_once ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/csv_data.php");
После подключения файла с классом, создаём объект – экземпляр класса CCSVData.
$csvFile = new CCSVData('R', true);
Параметр «R» – мы указываем, что будет использован разделитель при чтении данных файла. Кроме того, мы можем указать фиксированные поля, для этого используется символ F. Второй параметр обозначает содержание заголовков в первой строке (true). Данные параметры можно пропустить, и задать посредством отдельных методов:
$csvFile->SetFieldsType($fields_type); $csvFile->SetFirstHeader();
Далее следует указать CSV-файл, который мы хотим импортировать.
$csvFile->LoadFile($_FILES['csv']['tmp_name']);
Затем указываем разделитель, который будет использован для чтения данных из файла. Среди допустимых параметров «\t» — табуляция, запятая, пробел либо точка с запятой.
$csvFile->SetDelimiter(',');
По результату проходимся аналогично выборке данных из БД.
while ($arRes = $csvFile->Fetch()){ echo '<pre>'; print_r ($arRes); echo '</pre>'; }
В итоге, у нас получается довольно компактный код, который позволяет довольно просто импортировать данные из файла, и выполнять уже с ними какие-либо действия на сайте.
require_once ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/csv_data.php"); $csvFile = new CCSVData('R', true); $csvFile->LoadFile($_FILES['csv']['tmp_name']); $csvFile->SetDelimiter(','); while ($arRes = $csvFile->Fetch()){ echo '<pre>'; print_r ($arRes); echo '</pre>'; }
Работать с CSV можно практически в любой части сайта где есть возможность подключения этого класса. И в качестве файла можно указать не только файл из массива $_FILES, но и из локальной директории сайта.