gpt4 book ai didi

perl - 从CSV将行读取到Perl中的哈希中,最抗错误的方法是什么?

转载 作者:行者123 更新时间:2023-12-03 07:40:37 25 4
gpt4 key购买 nike

我想我可能在这里遗漏了一些明显的东西,所以请启发我。

目前,我正在使用Text::CSV将CSV文件读取到perl中,这是“解析”方法(下面概述)。

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}'
}

任何提示/技巧/链接都很好,因为我的Googleing似乎是空的?

编辑:因此,这是我对我接受的答案的理解,只是为了阐明我对这种方法的容错能力的理解。
$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;
}
}

最佳答案

好吧,总有直接的方法:

my @cols = qw(col1 col2 col3);

while ( <FILE> ) {
if ( $csv->parse($_) ) {
my %item;
@item{@cols} = $csv->fields();
# refer to items using $item{col1}
}
else {
# handle the parse error here
}
}

但是,我怀疑至少在使用Text::CSV的XS实现时,以下操作可能会更有效率:
$csv->column_names( qw(col1 col2 col3) );

until ( eof(FILE) ) {
my $item = $csv->getline_hr( \*FILE );
if ( $item ) {
# refer to items as $item->{col1}
} else {
# handle the parse error here
}
}

关于perl - 从CSV将行读取到Perl中的哈希中,最抗错误的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9685283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com