Как использовать DBD::CSV для получения строки имен столбцов?
Я использую DBD::CSV, чтобы показать данные CSV. Код у меня есть:
#! perl
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect("dbi:CSV:", undef, undef, {
f_dir => ".",
f_ext => ".txt/r",
f_lock => 2,
csv_eol => "\n",
csv_sep_char => "|",
csv_quote_char => '"',
csv_escape_char => '"',
csv_class => "Text::CSV_XS",
csv_null => 1,
csv_tables => {
info => {
file => "countries.txt"
}
},
FetchHashKeyName => "NAME_lc",
}) or die $DBI::errstr;
$dbh->{csv_tables}->{countries} = {
skip_first_row => 0,
col_names => ["a","b","c","d"],
raw_header => 1,
};
my $sth = $dbh->prepare ("select * from countries limit 1");
$sth->execute;
while (my @row = $sth->fetchrow_array) {
print join " ", @row;
print "\n"
}
Файл country.txt выглядит так:
ISO_COUNTRY|COUNTRY_NAME|REGION_CODE|REGION_NAME
AF|Afghanistan|A|Asia
AX|"Aland Islands"|E|Europe
AL|Albania|E|Europe
Но когда я запустил этот скрипт, он возвращает
AF Afghanistan A Asia
Я хотел это вернуть:
ISO_COUNTRY COUNTRY_NAME REGION_CODE REGION_NAME
Кто-нибудь знает, как этого добиться, используя модуль DBD::CSV?
Другой вопрос, почему настройка атрибута col_names не вступила в силу? Как заставить его вернуть следующее?
a b c d
1 ответ
Решение
$sth->{NAME}
, $sth->{NAME_lc}
а также $sth->{NAME_uc}
вернуть ссылку на массив, содержащий имена.
my $sth = $dbh->prepare("select * from countries limit 1");
$sth->execute;
print "$_\n" for @{ $sth->{NAME} };