|
Автор |
Сообщение |
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Привет!
Дэн, есть такая проблема... В твоей книге вчера смотрел пример создания php-скриптом csv-файла. Всё работает нормально до тех пор, пока не проскакивают предложения (или даже короткие фразы в два слова), т.е. в случае, когда значение для столбца состоит из нескольких слов, вся строка в csv сливается в один (первый) столбец, игнорируя символ перехода в новый столбец строки (.
Гугл с Яндексом не помог, поэтому обращаюсь к тебе
Последний раз редактировалось: Veter (Вс Сен 04, 2011 4:04 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Дай свой код, я поправлю. Сейчас лень искать, в какой именно главе. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Код: |
$handle = fopen("datas/shop/exel/export.csv", "w") or die ("Ошибка при создании файла! Обратитесь к Веб-Мастеру.");
$base_list = array(
'ID_товара;Название_товара;Title;Descriptions;Keywords;ID_размера;Название_размера;Цена;Старая_цена;Вес;Статус;'
);
foreach($base_list as $base_line) fputcsv($handle, split(',', $base_line));
$sql = sed_sql_query("SELECT * FROM $db_tovars t, $db_tovars_sizes ts, $db_sizes s, $db_sizes_groups sg
WHERE ts.ts_tovarid=t.tovar_id
AND s.size_id=ts.ts_sizeid
AND sg.sg_id=s.size_groupid");
while ($res = sed_sql_fetcharray($sql))
{
$list_tovar_id = $res['tovar_id'];
$list_tovar_name = iconv("UTF-8", "CP1251", $res['tovar_name']);
$list_tovar_title = iconv("UTF-8", "CP1251", $res['tovar_title']);
$list_tovar_description = iconv("UTF-8", "CP1251", $res['tovar_description']);
$list_tovar_keywords = iconv("UTF-8", "CP1251", $res['tovar_keywords']);
$general_list = array(
$list_tovar_id.';'.$list_tovar_name.';'.$list_tovar_title.';'.$list_tovar_description.';'.$list_tovar_keywords.';',
);
foreach($general_list as $general_line) fputcsv($handle, split(',', $general_line));
}
fclose($handle);
|
|
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Трабла решается переопределение функции fputcsv
<?php
function sputcsv($row, $delimiter = ',', $enclosure = '"', $eol = "\n")
{
static $fp = false;
if ($fp === false)
{
$fp = fopen('php://temp', 'r+'); // see http://php.net/manual/en/wrappers.php.php - yes there are 2 '.php's on the end.
// NB: anything you read/write to/from 'php://temp' is specific to this filehandle
}
else
{
rewind($fp);
}
if (fputcsv($fp, $row, $delimiter, $enclosure) === false)
{
return false;
}
rewind($fp);
$csv = fgets($fp);
if ($eol != PHP_EOL)
{
$csv = substr($csv, 0, (0 - strlen(PHP_EOL))) . $eol;
}
return $csv;
}
// test
$rows = array
(
array('blue, sky', 'green, lime', 'red', 'black'),
array('white', 'gold', 'purple, imperial', 'grey, slate'),
array('orange, burnt', 'pink, hot', 'violet', 'indigo'),
);
if (PHP_EOL == "\r\n")
{
$eol = "\n";
}
else
{
$eol = "\r\n";
}
foreach($rows as $row)
{
echo nl2br(sputcsv($row, ',', '"', $eol));
}
?>
Вот тут еще есть несколько примеров
http://php.net/manual/ru/function.fputcsv.php |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Спасибо! |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Вот еще пример:
из CSV в БД
Код: |
$f = fopen('basa2.csv','r');
include "config.php";
mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname);
$q = "delete from ua_sbit";
mysql_query($q) or die(mysql_error());
while($array=fgetcsv($f, 1024, ';')) {
$n = $array[0];
$email = $array[1];
$n = mysql_real_escape_string($n);
$q = "insert into ua_sbit values(0, '$n', '$email')";
echo $q . "<br>";
mysql_query($q) or die(mysql_error());
}
fclose($f);
|
|
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Угу, но с этим проблем вроде бы нет |
|
Вернуться к началу |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Код: |
if (PHP_EOL == "\r\n")
{
$eol = "\n";
}
else
{
$eol = "\r\n";
}
|
Дэн, не объяснишь, зачем это? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
у меня идет чтение с файла, разница в символе конца строки, на UNIX - \n, на Маках \n\r, на винде \r\n, соответственно и контроль самого символа EOL |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Так для Excel там разделитель нужен точка с запятой, оно другое не понимает |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Ой, да, не заметил.
В общем, проблему решить не получилось. Такое дело: скрипту я передаю
Код: |
$base_list = array(
array('ID товара;Название товара;ID размера;Размер;Вес;Цена;Старая цена;Статус;')
); |
А он в Exel записывает
Код: |
"ID товара;Название товара;ID размера;Размер;Вес;Цена;Старая цена;Статус;" |
Из-за кавычек Exel всё сливает в один столбец. Если кавычки удалить через блокнот и потом открыть в Exel'е, то всё нормально отображается. Вопрос: как запретить добавлять кавычки "вокруг" массива? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
А не пробовал сам формировать CSV? CSV - это обычный текстовый файл, просто пиши в него строки и усе |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Я делаю систему управления товарами магазина через Exel. Т.е. качаем файл с сервера, редактируем цены, вес и пр., и загружаем файл обратно (обновляя базу из csv, разумеется). |
|
Вернуться к началу |
|
|
Veter
Участник тусовки
Зарегистрирован: 01.07.2009 Сообщения: 86 Откуда: Московская обл.
|
|
|
|
Ден, есть какие-т мысли по поводу Exel'я? Почему он кавычки вставляет? |
|
Вернуться к началу |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|