我的模块 DBD :: CSV v0.30有问题。 自更新到newes版本以来,fetchrow_hashref生成的散列中的所有头都是小写而不是混合大小写。
最终数据将被提交到mysql数据库,列标题应该是大小写混合。
这是我使用 DBD :: CSV
的脚本my $csv_dbh = DBI->connect("DBI:CSV:f_dir=\.;csv_eol=\n");
$csv_dbh->{f_dir} = $ElementConfig->{_DIR} if defined($ElementConfig->{_DIR});
$csv_dbh->{csv_sep_char} = "$Seperator" if (defined($Seperator));
$csv_dbh->{csv_eol} = $csv_eol if (defined($csv_eol));
$csv_dbh->{csv_allow_whitespace} = $csv_allow_whitespace if (defined($csv_allow_whitespace));
my $CSV_Select;
unless (defined($ref_FullSQLSt)) {
// Standard "SELECT * FROM filname.txt"
$CSV_Select = "SELECT ".${$ref_CSVSelect}." FROM $File ".${$ref_CSVWhere};
} else {
$CSV_Select = ${$ref_FullSQLSt};
}
my $sth = $csv_dbh->prepare($CSV_Select);
my $res = $sth->execute();
while (my $row = $sth->fetchrow_hashref()) {
my $PKeys = $index;
if (defined($ElementConfig->{_FILES}->{$File}->{_dkey})) {
my $NewPKeys = "";
for my $key (split (/\s*\,\s*/,$ElementConfig->{_FILES}->{$File}->{_dkey})) {
if (defined($row->{$key})) {
$NewPKeys .= $row->{$key};
}
}
$PKeys = $NewPKeys if ($NewPKeys);
}
unless (defined($DataHash->{$DBConfig->{TBLPREFIX} . $ElementConfig->{_FILES}->{$File}->{_dtbl}}->{$PKeys})) {
$DataHash->{$DBConfig->{TBLPREFIX} . $ElementConfig->{_FILES}->{$File}->{_dtbl}}->{$PKeys} = $row;
$index ++;
}
}
这是csv文件的snipet:
CELL DATE avgRxLevUl avgRxLevDl RXQUALUL0
RTAL3D 08.12.2009 15:50 -96.25072834 -92.32065149 179594
实际fetchrow_hashref如下所示:
$var-> {
'cell' => 'RTAL3D',
'date' => '08.12.2009',
'avgrxlevu1' => -96.25072834
...
}
我用$ sth-> fetchrow_hashref()方法尝试了几件事。我使用参数“NAME”,“NAME_lc”和“NAME_uc”。第一个和第二个将标题转换为小写,第三个转换为大写。
感谢您的帮助。
答案 0 :(得分:4)
如果您使用q(SELECT * FROM tbl)
,SQL::Statement
会将标识符转换为小写。这是必要的,因为处理中存在一些内部问题。要获取混合大小写列名称,请按您需要的名称查询它们:
q(SELECT CELL, DATE, avgRxLevUl, avgRxLevDl, RXQUALUL0 FROM tbl).