Я думаю, что я, вероятно, здесь упускаю что-то очевидное, поэтому, пожалуйста, просветите меня.
В настоящее время я читаю файл CSV в perl, используя Text :: CSV, и это метод 'parse' (обрисован в общих чертах ниже).
csv-> метод разбора:
while (<FILE>) {
if ($csv->parse($_)) {
my @columns = $csv->fields();
'refer to items with: $columns[1]'
}
else {
'Handle the parse error here'
}
}
Сейчас я ищу способ прочитать эти значения в хэш вместо массива. Просматривая документацию Text :: CSV, кажется, что наиболее эффективный способ сделать это - использовать метод 'getline' (обрисован в общих чертах ниже), но я не уверен, как отлавливать ошибки аналогично тому, как они отлавливаются с помощью подход массива.
csv-> getline метод:
my @cols = ("col1", "col2", "col3");
my $item = {};
$csv->bind_columns( \@{$item}{@cols} );
while( $csv->getline($it_fh) ) {
'refer to items using: $item->{col1}'
}
Любые подсказки / советы / ссылки были бы хороши, так как мой Google, кажется, вышел пустым?
РЕДАКТИРОВАТЬ: Итак, вот мое понимание ответа, который я принял, просто чтобы прояснить то, что я понимаю как отказоустойчивость этого метода.
$csv->column_names( qw(col1 col2 col3) );
my $line;
until ( eof(FILE) ) {
$line++;
my $item = $csv->getline_hr( \*FILE );
if ( $item ) {
# refer to items as $item->{col1}
} else {
my $err = "Line: " . $line . "failed to parse\n"
. "Input: " . $csv->error_input . "\n"
. "Error: " . $csv->error_diag . "\n";
print STDERR $err;
}
}