使用 perl 中的 TEXT::CSV_XS 模块将 CSV 文件转换为哈希结构
To Convert CSV File to Hash Structure using TEXT::CSV_XS Module in perl
下面是用于读取 csv 文件并转换为哈希的代码。键取决于用户需要的键列数。
use warnings;
use strict;
my %hash;
my $KeyCols = 2;
while (<DATA>) {
chomp;
my @cols = split /,/, $_, $KeyCols+1;
next unless @cols > $KeyCols;
my $v = pop @cols;
my $k = join '', @cols;
$hash{$k} = $v;
}
我需要帮助来使用 TEXT::CSV_XS 包实现相同的逻辑以提高效率。请帮忙
使用Text::CSV_XS的真正原因是为了正确性。它不会比你拥有的更快,但它会在你失败的地方工作。
use Text::CSV_XS qw( );
my $csv = Text::CSV_XS->new({
auto_diag => 2,
binary => 1,
});
my %hash;
while ( my $row = $csv->getline(\*DATA) ) {
$hash{ $row->[0] . $row->[1] } = $row;
}
直接将字段连接在一起(没有分隔符)看起来很奇怪。
以上内容使值成为字段数组而不是 CSV。如果您想要原始的 CSV,则需要将它们重新编码为 CSV。
my %hash;
while ( my $row = $csv->getline(\*DATA) ) {
my ($k1, $k2) = splice(@$row, 0, 2);
$csv->combine(@$row);
$hash{ $k1 . $k2 } = $csv->string();
}
下面是用于读取 csv 文件并转换为哈希的代码。键取决于用户需要的键列数。
use warnings;
use strict;
my %hash;
my $KeyCols = 2;
while (<DATA>) {
chomp;
my @cols = split /,/, $_, $KeyCols+1;
next unless @cols > $KeyCols;
my $v = pop @cols;
my $k = join '', @cols;
$hash{$k} = $v;
}
我需要帮助来使用 TEXT::CSV_XS 包实现相同的逻辑以提高效率。请帮忙
使用Text::CSV_XS的真正原因是为了正确性。它不会比你拥有的更快,但它会在你失败的地方工作。
use Text::CSV_XS qw( );
my $csv = Text::CSV_XS->new({
auto_diag => 2,
binary => 1,
});
my %hash;
while ( my $row = $csv->getline(\*DATA) ) {
$hash{ $row->[0] . $row->[1] } = $row;
}
直接将字段连接在一起(没有分隔符)看起来很奇怪。
以上内容使值成为字段数组而不是 CSV。如果您想要原始的 CSV,则需要将它们重新编码为 CSV。
my %hash;
while ( my $row = $csv->getline(\*DATA) ) {
my ($k1, $k2) = splice(@$row, 0, 2);
$csv->combine(@$row);
$hash{ $k1 . $k2 } = $csv->string();
}