С Perl, как я могу использовать dbh csv_tables для чтения строки CSV из стандартного ввода? - PullRequest
2 голосов
/ 25 декабря 2011

Ниже приведен пример использования dbh csv_tables для чтения файла CSV в базу данных.Однако у меня уже есть строка CSV, которую я хочу использовать с dbh csv_tables.Как бы я прочитал строку из стандартного ввода вместо файла?

#!/usr/bin/perl
use strict;
use warnings;
use DBI;

# Connect to the database, (the directory containing our csv file(s))

my $dbh = DBI->connect("DBI:CSV:f_dir=.;csv_eol=\n;");

# Associate our csv file with the table name 'prospects'

$dbh->{'csv_tables'}->{'prospects'} = { 'file' => 'prospects.csv'};

# Output the name and contact field from each row

my $sth = $dbh->prepare("SELECT * FROM prospects WHERE name LIKE 'G%'");
$sth->execute();
while (my $row = $sth->fetchrow_hashref) {
    print("name = ", $row->{'Name'}, "  contact = ", $row->{'Contact'}. "\n");
}
$sth->finish();

Приветствия

Лиам

1 Ответ

1 голос
/ 26 декабря 2011

DBD :: CSV подклассы DBD :: File , который в свою очередь использует IO :: File для дескриптора файла CSV. Мы можем переопределить поведение открытия файла DBD :: CSV, установив f_dontopen в true, что не позволяет DBD :: File открывать файл, переданный DBD :: CSV.

$dbh->{'csv_tables'}->{'prospects'} = { f_dontopen => 1 };

Тогда нам просто нужно предоставить наш собственный IO::File объект, который указывает на стандартный ввод.

my $io = new IO::File;
$io->fdopen(fileno(STDIN),'r');
$dbh->{'csv_tables'}->{'prospects'} = { fh => $io, f_dontopen => 1 };

Собираем все это вместе:

# Connect to the database
my $dbh = DBI->connect("DBI:CSV:;csv_eol=\n;");

# Associate stdin the table name 'prospects'
my $io = new IO::File;
$io->fdopen(fileno(STDIN),'r');
$dbh->{'csv_tables'}->{'prospects'} = { fh => $io, f_dontopen => 1 };

# Output the name and contact field from each row
my $sth = $dbh->prepare("SELECT * FROM prospects WHERE name LIKE 'G%'");
$sth->execute();
while (my $row = $sth->fetchrow_hashref) {
    print("name = ", $row->{'name'}, "  contact = ", $row->{'contact'}. "\n");
}
$sth->finish();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...