2010-07-28 31 views
1

我对模块有问题DBD :: CSV v0.30。 由于对newes版本的更新,fetchrow_hashref生成哈希中的所有标头都是小写字母,而不是混合大小写。DBD :: CSV:以小写形式返回标题

Finaly将数据提交到一个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我的剧本的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-> f尝试了几件事情etchrow_hashref()方法。我使用了参数“NAME”,“NAME_lc”和“NAME_uc”。第一个和第二个将标题转换为小写,第三个转换为大写。

感谢您的帮助。

回答

4

如果您使用q(SELECT * FROM tbl)SQL::Statement将标识符转换为小写。由于处理中的一些内部问题,这是必要的。要获得混合大小写列名,由您需要的名称来查询它们:

q(SELECT CELL, DATE, avgRxLevUl, avgRxLevDl, RXQUALUL0 FROM tbl). 
+1

感谢您的回复和解决方案,但它更像是一个解决方法不是解决我的意见。 我想使用语句“Select * From tbl”,并且返回值应该是混合大小写的列名称,因为它们用于更新。 – 2010-07-29 06:42:40