2014-01-20 3 views
0

Я использую модуль DBI :: CSV в Perl для анализа моего csv и запуска запросов на данные.Использование DBI :: CSV-модуля Perl. Получите undef для пустой строки при разборе csv

Мои данные что-то вроде этого

1001|23|1|loading 
1012|25||loading 

Я хочу третье поле во втором ряду, чтобы быть UNDEF, который я не в состоянии достичь. Я получаю поле как пустую строку вместо 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 равно undef здесь.
Любая помощь здесь меня оценила бы. Благодаря

ответ

0

Заменить:

$dbh->{'csv_tables'}{'info'} = { 'file' => "file.csv", col_names => \@cols }; 

С:

$dbh->{'csv_tables'}{'info'} = { 'file' => "file.csv", col_names => @cols }; 

Результаты в:

$VAR1 = { 
      '1012' => { 
         'col3' => undef, 
         'col1' => '1012', 
         'col2' => '25', 
         'col4' => 'loading' 
        } 
     }; 
+0

Я добавил ваше предложение, но до сих пор получаю тот же результат, что и пустая строка. – user1737619

+0

Я запустил ваш код и ваш образец и получил именно то, что вы запросили, в качестве желаемого результата, поэтому я не знаю, что не так с вашим кодом, это ваш код выше, точно так же, как и то, что вы используете? – nrathaus

+0

Да, это точно так же. – user1737619

1

Вы объявляете @cols как массив, но тогда вы назначаете ссылку на массив к нему , т. е. вы только инициализируете свой первый элемент. Не используйте квадратные скобки для массивов, только для ссылок на массивы:

my @cols = ("col1", "col2", "col3", "col4"); 
+0

Я отредактировал код, но я до сих пор не ожидаю результатов – user1737619

 Смежные вопросы

  • Нет связанных вопросов^_^