Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> из mysql в csv, изменить форматирование вывода 
:(
    Опции темы
Suic2
Дата 17.7.2012, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.5.2012

Репутация: нет
Всего: нет



Простая программа, делает запрос к mysql и выводит в csv файл
Код

#!/usr/bin/perl

use Text::CSV_XS;
use DBI;
use Time::Local;

my $d_s = 'DBI:mysql:база:localhost';
my $dbh = DBI->connect($d_s, "пользователь", "пароль") or die "Can't connect to $d_s: $DBI::errstr";
my $sth = $dbh->prepare(qq{SELECT users.id, users.ip, users.fio FROM users});
$sth->execute();
$name=timelocal(localtime()).$$;
open $fh, ">>", "/tmp/$name.csv" or die "$name.csv: $!";
my $csv = Text::CSV_XS->new ({binary=>1,eol=>"\n",sep_char=>";"});
while($s=$sth->fetchrow_arrayref())
{
    $csv->print ($fh, $s);
}
close $fh;
$sth->finish();
$dbh->disconnect;

получается такой файл
Код

id;ip;"ФИО"
id;ip;"ФИО"
.............
id;ip;"ФИО"


проблемма заключается в том, что когда в базе не указан ip, то получается так:
Код

id;ip;"ФИО"
id;"ФИО"

а хотелось бы так:
Код

id;ip;"ФИО"
id;;"ФИО" или id;"";"ФИО"

что исправить?

Это сообщение отредактировал(а) Suic2 - 17.7.2012, 15:10
PM MAIL   Вверх
vadiml
Дата 17.7.2012, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



А зачем для этого использовать perl?

mysql и сам умеет делать csv файлы, и Вашей ошибки там не будет.

$mysql -h хост -u юзер -pпароль база -e 'запрос' > ответ.csv

Разделители можно задать стандартными для mysq средствами.
PM MAIL Jabber   Вверх
Suic2
Дата 17.7.2012, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.5.2012

Репутация: нет
Всего: нет



 smile 
вопрос был не в выборе средства. по моему, конкретный вопрос требует конкретного ответа
естественно есть много способов вывода в файл из бд, но я не просто так выбрал perl от нечего делать
PM MAIL   Вверх
sir_nuf_nuf
Дата 17.7.2012, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Цитата(vadiml @  17.7.2012,  15:44 Найти цитируемый пост)
А зачем для этого использовать perl?

Для добра же!


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Pfailed
Дата 17.7.2012, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Насколько помню так происходит когда переменная = undef.
Замените undef на пустые строки. Ну и параметр always_quote в конструкторе $csv, возможно, нужно установить.
Код

...
$csv->print ($fh, [map { $_ // '' } @$s]);
...



--------------------
PM MAIL   Вверх
Suic2
Дата 18.7.2012, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.5.2012

Репутация: нет
Всего: нет



Спасибо, работает smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.