Часто для работы скрипта требуется ввод каких то данных, например, для заполнения полей при подаче объявлений на доски,
заполнении виз или форм подачи заявок на кредиты и т.д. Эти данные можно брать из баз данных,
из текстовых файлов различного формата, со страниц вашего сайта, из почтовых ящиков.
Но одним из наиболее удобных форматов являются данные представленные в формате csv файлов.
Это файлы, каждая строка которых содержит данные для заполнения одной формы или объявления,
значения которых разделены ; и могут быть взять в кавычки — «.
К примеру вот строка из файла данных для нашего скрипта публикации объявлений на доске Slando:
1 |
Peugeot 508 Allure 2.0HDI 2012;Транспорт;Легковые автомобили;Peugeot;508;37638;Белый;2012;Автомат;Дизель;2000;4000;Частное лицо;0953203020;Безопасность: ABD, ABS, ESP, Иммобилайзер, Ксеноновые фары, Подушка безопасности (Airbag), Серворуль, Сигнализация, Центральный замок.Комфорт: Бортовой компьютер, Датчик света, Климат контроль, Кожаный салон, Круиз контроль, Мультируль, Омыватель фар, Парктроник, Подогрев зеркал, Подогрев сидений, Сенсор дождя, Усилитель руля, Эл. стеклоподъемники, Электропакет. Мультимедиа: CD, DVD, MP3, Акустика, Магнитола, Система навигации GPS.Автомобиль с тест-драйва, на учете не стоял. Комплектация Allure + ксенон + сигнализация + передний парктроник + белый перламутр.;img1.jpg,img2.jpg;Киевская;Киев;iltaua |
Вот о том как работать с такими данными мы и расскажем в этой статье.
Итак, у нас есть файл data.csv в котором содержатся следующие данные:
1 2 3 4 |
value1;value2;value3;value4 value11;value12;value13;value14 value21;value22;value23;value24 value31;value32;value33;value34 |
Рассмотрим способы получения этих данных в скрипт.
Первый и самый примитивный способ это использование php функций file и explode. Ниже приведён пример скрипта,
который использует эти функции для разбора csv файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php $xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // путь к данным $data_path="data/data.csv"; // читаем в массив $arr_data=file($data_path); // выводим в окно отладки результат print_r($arr_data); // пройдёмся по всему массиву данных foreach($arr_data as $item) { // получаем в массив данные разделённые ; $arr_item=explode(";",$item); // смотрим результат print_r($arr_item); // используем данные echo $arr_item[0]."<br>"; echo $arr_item[1]."<br>"; echo $arr_item[2]."<br>"; echo $arr_item[3]."<br>"; } // Quit $app->quit(); ?> |
В результате работы скрипта в окне отладки мы увидим следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
Array ( [0] => value1;value2;value3;value4 [1] => value11;value12;value13;value14 [2] => value21;value22;value23;value24 [3] => value31;value32;value33;value34 ) Array ( [0] => value1 [1] => value2 [2] => value3 [3] => value4 ) value1 value2 value3 value4 Array ( [0] => value11 [1] => value12 [2] => value13 [3] => value14 ) value11 value12 value13 value14 Array ( [0] => value21 [1] => value22 [2] => value23 [3] => value24 ) value21 value22 value23 value24 Array ( [0] => value31 [1] => value32 [2] => value33 [3] => value34 ) value31 value32 value33 value34 |
Минус данного способа внутри данных нельзя использовать разделители. В нашем случае это «;» .
В php для работы с csv файлами есть функции fgetcsv и str_getcsv.
Функция fgetcsv читает строку из файла и разбирает данные CSV. Она похожа на функцию fgets(),
только дополнительно делает анализ строки на формат CSV и возвращает разобранные поля в виде массива.
Возвращает FALSE в случае ошибки или прочитав полностью файл.Пустая строка будет возвращена в виде массива,
содержащего один элемент null, ошибки в данном случае не будет.
Ниже приведём пример использования этой функции для файла data.csv:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // путь к данным $data_path="data/data.csv"; $row = 1; $handle = fopen($data_path, "r"); while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { $num = count($data); echo "<p> $num полей в строке $row: <br /></p>\n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "<br />\n"; } } fclose($handle); // Quit $app->quit(); ?> |
str_getcsv — данная функция выполняет разбор строки в формате CSV и возвращает массив с полученными из строки полями.
То есть она работает аналогично explode, но только конкретно для csv строк. Таким образом, эта функция будет корректно разбирать csv данные,
в том числе и с содержанием спецсимволов, например:
1 |
value31;value32;"value34;123";value33 |
в результате работы explode будем иметь:
1 2 3 4 5 |
value31 value32 "value34 123" value33 |
в результате работы функции str_getcsv
1 2 3 4 |
value31 value32 value34;123 value33 |
Пример скрипта с использованием str_getcsv:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php $xhe_host ="127.0.0.1:40111"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // путь к данным $data_path="data/data.csv"; // читаем в массив $arr_data=file($data_path); // выводим в окно отладки результат //print_r($arr_data); // пройдёмся по всему массиву данных foreach($arr_data as $item) { // получаем в массив данные разделённые ; $arr_item=str_getcsv($item,";"); // смотрим результат print_r($arr_item); // используем данные echo $arr_item[0]."<br>"; echo $arr_item[1]."<br>"; echo $arr_item[2]."<br>"; echo $arr_item[3]."<br>"; } // Quit $app->quit(); ?> |
В результате работы скрипта имеем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Array ( [0] => value1 [1] => value2 [2] => value3 [3] => value4 ) value1 value2 value3 value4 Array ( [0] => value11 [1] => value12 [2] => value13 [3] => value14 ) value11 value12 value13 value14 Array ( [0] => value21 [1] => value22 [2] => value23 [3] => value24 ) value21 value22 value23 value24 Array ( [0] => value31 [1] => value32 [2] => value33 [3] => value34 ) value31 value32 value33 value34 |
Так же в интернете можно найти множество самописных классов php,
которые работают с файлами в csv формате и использовать их в скриптах для Human Emulator,
как впрочем любые классы написание на php.