无法在perl中获得CSV格式的所需哈希值
发布时间:2020-12-16 06:19:03 所属栏目:大数据 来源:网络整理
导读:我已将最常见的emp表导出为CSV.我想将每个列名称作为哈希键并将值存储在数组中. 下面是代码 use Data::Dumper; open($fh,"EMP.csv"); %hash = (); local $/= "n"; while($fh){ @columnNames = split(/,/,$_) if $. ==1; @columnValues = split(/,$_); push
我已将最常见的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"...],}; 解决方法
您试图在推送语句中使用切片,但这不起作用.数组将处于标量上下文中,这就是您看到键8的原因.您需要循环键以将值推送到数组上.但是,为什么这样呢?
您可以使用 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |