Часто для работы скрипта требуется ввод каких то данных, например, для заполнения полей при подаче объявлений на доски,
заполнении виз или форм подачи заявок на кредиты и т.д. Эти данные можно брать из баз данных,
из текстовых файлов различного формата, со страниц вашего сайта, из почтовых ящиков.
Но одним из наиболее удобных форматов являются данные представленные в формате csv файлов.
Это файлы, каждая строка которых содержит данные для заполнения одной формы или объявления,
значения которых разделены ; и могут быть взять в кавычки — «.
К примеру вот строка из файла данных для нашего скрипта публикации объявлений на доске Slando:
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 в котором содержатся следующие данные:
value1;value2;value3;value4 value11;value12;value13;value14 value21;value22;value23;value24 value31;value32;value33;value34
Рассмотрим способы получения этих данных в скрипт.
Первый и самый примитивный способ это использование php функций file и explode. Ниже приведён пример скрипта,
который использует эти функции для разбора csv файла:
<?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]."
";
echo $arr_item[1]."
";
echo $arr_item[2]."
";
echo $arr_item[3]."
";
}
// Quit
$app->quit();
?>
В результате работы скрипта в окне отладки мы увидим следующее:
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:
<?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 " $num полей в строке $row:
\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "
\n";
}
}
fclose($handle);
// Quit
$app->quit();
?>
str_getcsv — данная функция выполняет разбор строки в формате CSV и возвращает массив с полученными из строки полями.
То есть она работает аналогично explode, но только конкретно для csv строк. Таким образом, эта функция будет корректно разбирать csv данные,
в том числе и с содержанием спецсимволов, например:
value31;value32;"value34;123";value33
в результате работы explode будем иметь:
value31 value32 "value34 123" value33
в результате работы функции str_getcsv
value31 value32 value34;123 value33
Пример скрипта с использованием str_getcsv:
<?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]."
";
echo $arr_item[1]."
";
echo $arr_item[2]."
";
echo $arr_item[3]."
";
}
// Quit
$app->quit();
?>
В результате работы скрипта имеем:
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.