Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

FputCSV - слияние столбцов [РЕШЕНО]
На страницу 1, 2  След.
 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
Veter

Участник тусовки


Зарегистрирован: 01.07.2009
Сообщения: 86
Откуда: Московская обл.

СообщениеДобавлено: Ср Авг 24, 2011 5:52 pm    Заголовок сообщения: FputCSV - слияние столбцов [РЕШЕНО]
Ответить с цитатой

Привет!

Дэн, есть такая проблема... В твоей книге вчера смотрел пример создания php-скриптом csv-файла. Всё работает нормально до тех пор, пока не проскакивают предложения (или даже короткие фразы в два слова), т.е. в случае, когда значение для столбца состоит из нескольких слов, вся строка в csv сливается в один (первый) столбец, игнорируя символ перехода в новый столбец строки (Wink.

Гугл с Яндексом не помог, поэтому обращаюсь к тебе Smile


Последний раз редактировалось: Veter (Вс Сен 04, 2011 4:04 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Авг 24, 2011 5:59 pm    Заголовок сообщения:
Ответить с цитатой

Дай свой код, я поправлю. Сейчас лень искать, в какой именно главе.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Veter

Участник тусовки


Зарегистрирован: 01.07.2009
Сообщения: 86
Откуда: Московская обл.

СообщениеДобавлено: Ср Авг 24, 2011 6:05 pm    Заголовок сообщения:
Ответить с цитатой

Код:

$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
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Авг 24, 2011 6:20 pm    Заголовок сообщения:
Ответить с цитатой

Трабла решается переопределение функции 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
Откуда: Московская обл.

СообщениеДобавлено: Ср Авг 24, 2011 6:25 pm    Заголовок сообщения:
Ответить с цитатой

Спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Авг 24, 2011 6:37 pm    Заголовок сообщения:
Ответить с цитатой

Вот еще пример:

из 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
Откуда: Московская обл.

СообщениеДобавлено: Ср Авг 24, 2011 6:58 pm    Заголовок сообщения:
Ответить с цитатой

Угу, но с этим проблем вроде бы нет Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Veter

Участник тусовки


Зарегистрирован: 01.07.2009
Сообщения: 86
Откуда: Московская обл.

СообщениеДобавлено: Ср Авг 24, 2011 7:02 pm    Заголовок сообщения:
Ответить с цитатой

Код:

 if (PHP_EOL == "\r\n")
 {
 $eol = "\n";
 }
 else
 {
 $eol = "\r\n";
 }

Дэн, не объяснишь, зачем это?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Авг 24, 2011 7:08 pm    Заголовок сообщения:
Ответить с цитатой

у меня идет чтение с файла, разница в символе конца строки, на UNIX - \n, на Маках \n\r, на винде \r\n, соответственно и контроль самого символа EOL
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Veter

Участник тусовки


Зарегистрирован: 01.07.2009
Сообщения: 86
Откуда: Московская обл.

СообщениеДобавлено: Ср Авг 24, 2011 7:29 pm    Заголовок сообщения:
Ответить с цитатой

Скрин

Всё= не работает Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Авг 24, 2011 7:41 pm    Заголовок сообщения:
Ответить с цитатой

Так для Excel там разделитель нужен точка с запятой, оно другое не понимает
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Veter

Участник тусовки


Зарегистрирован: 01.07.2009
Сообщения: 86
Откуда: Московская обл.

СообщениеДобавлено: Чт Авг 25, 2011 1:19 pm    Заголовок сообщения:
Ответить с цитатой

Ой, да, не заметил.

В общем, проблему решить не получилось. Такое дело: скрипту я передаю
Код:
$base_list = array(
         array('ID товара;Название товара;ID размера;Размер;Вес;Цена;Старая цена;Статус;')
         );

А он в Exel записывает
Код:
"ID товара;Название товара;ID размера;Размер;Вес;Цена;Старая цена;Статус;"

Из-за кавычек Exel всё сливает в один столбец. Если кавычки удалить через блокнот и потом открыть в Exel'е, то всё нормально отображается. Вопрос: как запретить добавлять кавычки "вокруг" массива?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Авг 25, 2011 2:42 pm    Заголовок сообщения:
Ответить с цитатой

А не пробовал сам формировать CSV? CSV - это обычный текстовый файл, просто пиши в него строки и усе Question
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Veter

Участник тусовки


Зарегистрирован: 01.07.2009
Сообщения: 86
Откуда: Московская обл.

СообщениеДобавлено: Чт Авг 25, 2011 2:56 pm    Заголовок сообщения:
Ответить с цитатой

Я делаю систему управления товарами магазина через Exel. Т.е. качаем файл с сервера, редактируем цены, вес и пр., и загружаем файл обратно (обновляя базу из csv, разумеется).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Veter

Участник тусовки


Зарегистрирован: 01.07.2009
Сообщения: 86
Откуда: Московская обл.

СообщениеДобавлено: Чт Авг 25, 2011 6:59 pm    Заголовок сообщения:
Ответить с цитатой

Ден, есть какие-т мысли по поводу Exel'я? Почему он кавычки вставляет?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис