2010-07-28 4 views
1

모듈에 문제가 있습니다. DBD :: CSV v0.30. newes 버전으로의 업데이트 이후 fetchrow_hashref 생성 된 해시의 모든 헤더는 대소 문자가 혼합되지 않고 소문자입니다.DBD :: CSV : 소문자로 된 헤더를 반환합니다.

마지막으로 데이터가 mysql 데이터베이스에 커밋되고 열 머리글은 대소 문자를 사용해야합니다.

CELL DATE avgRxLevUl avgRxLevDl RXQUALUL0 
RTAL3D 08.12.2009 15:50 -96.25072834 -92.32065149 179594 

실제 fetchrow_hashref는 다음과 같습니다 :

이 CSV 파일의 snipet가

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 ++; 
    } 
} 

DBD :: CSV를 사용하여 내 스크립트의 snipet입니다

$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"문을 사용하려고하며 반환 값은 대소 문자가 혼합되어 있기 때문에 업데이트가되어야합니다. –