gpt4 book ai didi

perl - 无法在 perl 中获取 CSV 格式的所需哈希

转载 作者:行者123 更新时间:2023-12-04 23:55:12 32 4
gpt4 key购买 nike

我已将最常见的 emp 表导出为 CSV。我想将每个列名作为哈希键并将值存储在一个数组中。

下面是代码

 use Data::Dumper;
open($fh,"<EMP.csv");
%hash = ();

local $/= "\n";

while(<$fh>){

@columnNames = split(/,/,$_) if $. ==1;
@columnValues = split(/,/,$_);
push @{hash->{@columnNames}} ,@columnValues;
}

print Dumper(\%hash);

当我尝试打印哈希时,我得到了这个
$VAR1 = {
'8' => [
'"EMPNO"',
'"ENAME"',
'"JOB"',
'"MGR"',
'"HIREDATE"',
'"SAL"',
'"COMM"',
'"DEPTNO"
',
'"7839"',
'"KING"',
'"PRESIDENT"',
'""',
'"11/17/1981"',
'"5000"',
'""',
'"10"
',

但我期待这个
$VAR1 = { '"EMPNO"'=>[12,3,4,5,6,7,8,9],
'"EMPNAME"'=>["pavan","kumar"...],

};

最佳答案

您正在尝试在 push 语句中使用切片,但这是行不通的。数组将在标量上下文中,这就是为什么您会看到键 8 .您需要遍历键以将值推送到数组中。然而,为什么要这样做呢?

您可以使用 Text::CSV 这个模块,它相当简单,可能更合适,假设你有一个真正的 csv 格式。

use strict;
use warnings;
use Data::Dumper;
use Text::CSV;

my $csv = Text::CSV->new({
binary => 1,
eol => $/,
});
my %data;
open my $fh, "<", "yourfile.csv" or die $!;
$csv->column_names ($csv->getline($fh)); # get header names

while (my $row = $csv->getline_hr($fh)) { # get hashref with values
for my $key (keys %$row) {
push @{$data{$key}}, $row->{$key}; # store values
}
}
print Dumper \%data;

关于perl - 无法在 perl 中获取 CSV 格式的所需哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445359/

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