使用Perl的DBI::CSV模块。解析csv时获取空字符串的未定义
我在Perl中使用DBI::CSV模块来解析我的CSV并对数据运行查询 我的数据是这样的使用Perl的DBI::CSV模块。解析csv时获取空字符串的未定义,perl,csv,perl-module,dbi,Perl,Csv,Perl Module,Dbi,我在Perl中使用DBI::CSV模块来解析我的CSV并对数据运行查询 我的数据是这样的 1001|23|1|loading 1012|25||loading 我希望第二行的第三个字段是未定义的,这是我无法实现的。我得到的字段是一个空字符串,而不是undef,这是我尝试过的一段代码 use strict; use warnings "all"; use Text::CSV_XS; use DBI; my $dbh = DBI->connect( "dbi:CSV:
1001|23|1|loading
1012|25||loading
我希望第二行的第三个字段是未定义的,这是我无法实现的。我得到的字段是一个空字符串,而不是undef,这是我尝试过的一段代码
use strict;
use warnings "all";
use Text::CSV_XS;
use DBI;
my $dbh = DBI->connect( "dbi:CSV:", undef, undef, {
csv_sep_char => "|",
f_dir => ".",
csv_eol => "\n",
csv_empty_is_undef => 1,
csv_blank_is_undef => 1,
csv_quote_char => undef,
csv_escape_char => undef,
csv_always_quote => undef,
f_ext => ".csv",
f_enc => "utf-8",
csv_class => "Text::CSV_XS",
RaiseError => 1,
PrintError => 1
}
);
my @cols = ("col1", "col2", "col3", "col4");
$dbh->{'csv_tables'}{'info'} = { 'file' => "file.csv", col_names => \@cols };
my $result =$dbh->selectall_hashref( "select col1,col2,col3,col4 from info where col1 = 1012", "col1")
#gives the following result
0 HASH(0x992573c)
1012 => HASH(0x9900e90)
'col1' => 1012
'col2' => '25'
'col3' => ''
'col4' => 'loading'
我希望col3的值在这里是未定义的。这里的任何帮助我都将不胜感激。谢谢更换:
$dbh->{'csv_tables'}{'info'} = { 'file' => "file.csv", col_names => \@cols };
与:
结果:
$VAR1 = {
'1012' => {
'col3' => undef,
'col1' => '1012',
'col2' => '25',
'col4' => 'loading'
}
};
您将@cols声明为一个数组,但随后为其分配一个数组引用,即只初始化其第一个元素。请勿将方括号用于数组,仅用于数组引用:
my @cols = ( "col1", "col2", "col3", "col4" );
我已经添加了您的建议,但我仍然得到了与空字符串相同的结果。我运行了您的代码和示例,并得到了您要求的理想输出,因此我不知道您的代码有什么问题,您的上述代码与您正在运行的代码完全相同吗?是的,它完全相同。您看到我的
$result
转储了吗?它将您的代码用于我的次要修复是的,但不确定为什么我没有得到预期的结果
my @cols = ( "col1", "col2", "col3", "col4" );